FIXER cloud.config Tech Blog
Azure Pipelinesでtypos-cliを爆速で実行させる方法
2023年02月09日 10時00分更新
本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「【typos-cli】タイポをAzure Pipelinesで爆速チェックする」を再編集したものです。
こちらの記事は「FIXER Advent Calendar 2022」20日目の記事です。
はじめに
こんにちは、本田です。
コードを書いているといつの間にかtypoをしてしまい、だれも気付かないままmainにmergeされるなんてことありませんか?
このようなことが起こらないように我々のチームではRust製のタイポ検出ツール、typos-cliをAzure Pipelinesに導入しています。
導入してみましたが… Azure Pipelines上で遅い!
typosの実行時間は速いのですが、typos-cliのcargo installが2~3分と比較的長い!
というわけで今回はtypos-cliの基本を紹介しつつ、Azure Pipelinesでtypos-cliを爆速で実行させる方法を書きます。
あ、Gihub Actionsにtypos-cliはありますので、Azure Pipelinesにこだわらない方はこちらからお試しください。本田はAzure Pipelinesにこだわりました。
typos-cliについて
typos-cliはRust製のソースコードのスペルチェッカーです。
install
cargo install typos-cli
もしくは
brew install typos-cli
でインストールしてください。
使い方
typos
とやればtypoを検出してくれます。
こんな感じでtypoを怒ってくれます
$> typoserror: `numebr` should be `number` --> .\src\lib.rs:112:13 | 112 | let numebr = 0; | ^^^^^^ |
意図的な単語に対してtypoを検知をした場合は _typos.toml に単語を追加して上げればいいです。
[default.extend-words] numebr = "numebr"
これでnumebrに関しては検知しなくなります。
その他オプション(?)として、
// 正しい単語に修正してくれる typos -w // 正しい単語に修正した場合の差分を修正してくれる typos --diff // 標準入力されたものを正しい単語に修正して標準出力してくれる typos - -w
があります、適宜使いましょう。
typos-cliを使ってAzure Pipelinesでtypoを爆速チェックする
さて、本題です。まあ爆速でチェックする方法ですが、cargo installが長いだけなのでビルド済みのtypos-cliを持ってくればいいです。
releaseに各環境のビルド済みファイルが上がっているのでそれをwgetなりで手元に持ってきて展開していい感じに配置してやります。
結果的にyamlはこんな感じになりました。
trigger:
- main
pr:
branches:
include:
- '*'
pool:
vmImage: ubuntu-latest
steps:
- script: |
mkdir $(Pipeline.Workspace)/_tmp
URL=$(curl -s https://api.github.com/repos/crate-ci/typos/releases/latest | grep "browser_download_url.*linux.*tar\.gz" | cut -d : -f 2,3 | tr -d \")
NAME=$(curl -s https://api.github.com/repos/crate-ci/typos/releases/latest | grep "name.*linux.*tar\.gz" | cut -d : -f 2,3 | tr -d \",)
sudo apt install wget -y
wget -q -P $(Pipeline.Workspace)/_tmp ${URL}
export FILE_PATH=`echo $(Pipeline.Workspace)/_tmp/${NAME} | tr -d " "`
tar -zxf ${FILE_PATH} -C $(Pipeline.Workspace)/_tmp
cp $(Pipeline.Workspace)/_tmp/typos $(Build.SourcesDirectory)
export RESULT=`$(Build.SourcesDirectory)/typos`
echo "${RESULT}"
RESULT="${RESULT//'%'/'%25'}"
RESULT="${RESULT//$'\n'/'%0A'}"
RESULT="${RESULT//$'\r'/'%0D'}"
RESULT="${RESULT//$'`'/' '}"
echo '##vso[task.setvariable variable=typos.result;]'${RESULT}
displayName: check typo
workingDirectory: '$(Build.SourcesDirectory)'
- script: |
echo "##vso[task.LogIssue type=error;]$(typos.result)"
echo "##vso[task.complete result=Failed;]"
displayName: Post Result
condition: ne(variables['typos.result'], '')
注意点として以下があります。
workingDirectoryなどファイルの配置位置は環境によって変えてください。
・最新版のtypos-cliを使うために、ダウンロードURLとtypos-cliのフルネームをGithub APIで取得しています。いらない場合は消してください。
・Azure Pipelines実行時の数分前にtypos-cliのrelease行なわれた場合はエラーが出ることを確認してます。ちょっと待てばいつも通り使えます。
・RESULT周りですが、typosのpipelinesの実行結果をいい感じにGithubから見えるようにゴニョニョしてます。いらない場合は消してください。
おわりに
これで実行時間が2~3分あったtyposのPipelinesが13秒で終わるようになりました。
爆速!
本田 匠/FIXER
四日市事業所所属のエンジニア
本記事はアフィリエイトプログラムによる収益を得ている場合があります


この連載の記事
-
TECH
「SOSの出し方を知ろう」 新卒入社から1年、学んだことを振り返る -
TECH
MobSF(Mobile Security Framework)でできること、動かない理由 -
TECH
3週間の自動テストが半日に! Playwrightの使い方の基本 -
TECH
Next.jsで静的テスト環境を構築し、GitHub Actionsで自動化してみた -
TECH
クイズ:正規表現で「0~255」のすべてにマッチするのはどれ? -
TECH
ミニPCサーバーにFluxを導入、GitOpsで自動デプロイする方法 -
TECH
アプリ開発の手戻りを防ぐ 「入力チェック(バリデーション)」の設計方法 -
TECH
Webアプリを使いやすく! 「入力チェック(バリデーション)」の正しい考え方 -
TECH
機械科卒・ITエンジニア就職から一年、やって良かったこと -
TECH
Chrome DevTools MCPとは? Claude Codeとの連携でWebアプリ開発体験が劇的に変わった -
TECH
Terraformのバージョン管理ツール、古いtfenvからtenvへの移行 - この連載の一覧へ


