このページの本文へ

FIXER Tech Blog - Development

FIXER cloud.config Tech Blog

Azure Pipelinesでtypos-cliを爆速で実行させる方法

2023年02月09日 10時00分更新

文● 本田 匠/FIXER

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事は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
四日市事業所所属のエンジニア

[転載元]
 【typos-cli】タイポをAzure Pipelinesで爆速チェックする

カテゴリートップへ

この連載の記事