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
Github Copilotで、コミットメッセージもAIに考えてもらう方法 -
TECH
Terraform 1.5から追加されたimportブロックがすごい!! -
TECH
Prometheusで辞書形式のメトリクスを持つExporterを作りたい! -
TECH
GTM経由でカスタムディメンションを取得するTypeScript -
TECH
Grafana Tempo×OpenTelemetryの導入方法 -
TECH
Grafana TempoとLokiの連携で進化するログ解析とトレーシング -
TECH
「Microsoft 365開発者プログラム」のアクティベーション方法 -
TECH
サインインなしでも使える! 開発者向けAI検索エンジン「Phind」をご紹介 -
TECH
え、高級言語しか触ったことないのにCPUを自作するんですか!? -
TECH
Terraformを用いてAKS上にFluxを導入する方法 -
TECH
Github Copilot Chatをさらに便利にする3つの機能 - この連載の一覧へ