シェルスクリプトの Lint ツール「shellcheck」を使ってみた

日頃、Bash で簡単なスクリプトを書くことがある。何もインストールされていないマシンでも、とりあえず書いて実行できるから、未だ活用する機会は多い。

しかし、シェルスクリプトは独特の構文が多く、現代的な言語に慣れ親しんだ人が片手間に書くには罠が多いと感じている。

以前 bats というテストツールを紹介したが、コレは実際にスクリプトを実行してみて、その結果をテストするツールだった。

そうではなく、実行前にチェックできるような Lint ツールはないのだろうか、と思い調べたところ、shellcheck というツールを見つけた。

様々な環境向けにインストール手順が用意されている。

インストール後は、

$ shellcheck ./example.sh

という風に叩くだけで構文チェックができる。

警告の位置や理由も分かりやすく、詳細は shellcheck の GitHub Wiki に記載されているので、それを読みながら修正していけば良い。

shellcheck での警告を無視するには、スクリプト内にコメントで示せば良い。この辺りは TSLint や ESlint の disable-next-line 的な感じだ。

#!/bin/bash

# 変数展開はダブルクォートで囲むべき、というエラーを無視する

# shellcheck disable=SC2086
my_variable=$my_value

なお、ちょっと試すだけなら、公式サイト上にスクリプトを貼り付けての検出もできるので、試しに使ってみると良いだろう。

さらに、GitHub Actions の実行基盤には shellcheck がプリインストールされているので、何の事前準備もなくいきなり

- run: shellcheck ./my-script.sh

と Lint ジョブを実行したりもできてしまう。超絶便利!

シェルスクリプトは書き手のスキルと品質が他の言語よりも密接に比例する言語だと思うので、こうした Linter を活用しての品質向上が大切になってくるだろう。チーム内での水準向上のためにも、活用してみてほしい。