shellcheck は sh/bash/dash/ksh 向けのシェルスクリプトを静的解析し、ポータビリティや引用漏れ、未定義変数などの問題をわかりやすく指摘するリンターです。CI連携やエディタ統合にも適しており、TUI表示のほか機械可読な出力も備えます。 (GitHub)
実務では、コミット前の品質チェック、CIでの自動検査、レガシーシェルの移植性確認に使います。
構文(Syntax)
# 基本
shellcheck [OPTIONS] FILE...
# 代表例
shellcheck script.sh # 人間向け(TTY)出力
shellcheck -s bash -f gcc script.sh # 解析シェル/出力形式を指定
shellcheck -e SC2086,SC2046 script.sh # 指定コードを除外
shellcheck -o all script.sh # すべての「任意チェック」を有効化
shellcheck -x -P SCRIPTDIR script.sh # source先も追跡し、探索パスを指定
オプションと挙動は man ページに準拠します。 (manpages.ubuntu.com)
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
| `-s, –shell sh | bash | dash |
| `-f, –format tty | gcc | checkstyle |
| `-S, –severity error | warning | info |
-e, --exclude CODE[,CODE...] | 指定した警告コードを除外。範囲(SC3000-SC4000)や all も可。 | shellcheck -e SC2086,SC2046 script.sh (manpages.ubuntu.com) |
-i, --include CODE[,CODE...] | 含めるコードを限定(除外より強い)。 | shellcheck -i SC2002 script.sh (manpages.ubuntu.com) |
-o, --enable NAME[,NAME...] | 「任意チェック」を名前で有効化。all ですべて有効。--list-optional で一覧。 | shellcheck -o all script.sh / shellcheck --list-optional (manpages.ubuntu.com) |
-x, --external-sources | source された入力外ファイルも追跡して解析。 | shellcheck -x script.sh (manpages.ubuntu.com) |
-a, --check-sourced | 解析対象に含めた source 先ファイルの中の問題も出力。 | shellcheck -a script.sh (manpages.ubuntu.com) |
-P, --source-path PATHS | source 探索パス(Unixは : 区切り)。特殊値 SCRIPTDIR あり。 | shellcheck -P SCRIPTDIR:lib script.sh (manpages.ubuntu.com) |
-C, --color[=WHEN] / -W NUM | 端末出力の色/警告ごとのWikiリンク数を制御。 | shellcheck -C always -W 0 script.sh (manpages.ubuntu.com) |
--norc | .shellcheckrc を読み込まない。 | shellcheck --norc script.sh (manpages.ubuntu.com) |
-V, --version | バージョン表示。 | shellcheck -V (manpages.ubuntu.com) |
実行例
基本:1ファイルを解析(TTY出力)
説明:典型的な引用漏れ(SC2086)等を人間向けに表示。
コマンド
shellcheck script.sh
出力例(例)
In script.sh line 3:
echo $file
^----^ SC2086: Double quote to prevent globbing and word splitting.
gcc 形式でエディタや make と連携
説明:-f gcc は <file>:<line>:<col>: <type>: <msg> 形式で出力し、エディタのエラー遷移に便利。
コマンド
shellcheck -f gcc script.sh
出力例(例)
script.sh:3:6: warning: Double quote to prevent globbing and word splitting. [SC2086]
source されたファイルも追跡して解析
説明:動的に source されるライブラリも検査対象に含めます。
コマンド
shellcheck -x -P SCRIPTDIR src/main.sh
出力例:src/lib/util.sh 内の警告も併せて表示。 (manpages.ubuntu.com)
その場で抑制/有効化(ディレクティブ)
説明:コード内のコメントで特定警告の無効化/任意チェック有効化が可能。
コマンド
# shellcheck disable=SC2035
echo "Files: " *.jpg
# ファイル全体で任意チェックを有効化
# shellcheck enable=quote-safe-variables
出力例:該当警告が出力されない/新たなチェックが有効。 (manpages.ubuntu.com)
エラー例:未知のフォーマッタを指定
説明:存在しないフォーマッタ名を渡すとエラー終了(終了コード 4)。
コマンド
shellcheck -f unknown script.sh; echo $?
出力例(例)
shellcheck: unrecognized format 'unknown'
4
(終了コードの意味:0=問題なし、1=問題あり、2=処理不可、3=呼び出し構文誤り、4=不正オプション) (manpages.ubuntu.com)
関連コマンド
shfmt:シェルスクリプトの整形ツール(スタイル統一)。bats:Bashスクリプトの単体テスト実行(TAP/JUnit出力)。bash/dash/ksh:対象シェル。-n(構文チェック)などと併用。grep/sed/awk:指摘箇所の一括修正に補助。
備考
- 対応シェル:
sh/bash/dash/kshのみを正式サポート。zsh等は未サポート(必要なら-sや# shellcheck shell=bashなどで明示)。 (ShellCheck) - 設定ファイル:
.shellcheckrc(またはshellcheckrc)でディレクティブをファイル全体に適用可能。親ディレクトリを遡って検索し、見つからなければ~/.shellcheckrcや~/.config/shellcheckrcを参照します。Snap 版は隠しファイルにアクセスできないためshellcheckrc名を利用します。 (manpages.ubuntu.com) - 環境変数:
SHELLCHECK_OPTSに既定フラグを設定可能(例:export SHELLCHECK_OPTS='--shell=bash --exclude=SC2016')。 (manpages.ubuntu.com) source解析:-xで入力外のsourceも追跡。-P/source-path=...で探索ルートを追加できます。 (manpages.ubuntu.com)- 出力形式の活用:
gcc/checkstyle形式はエディタ/CI連携、diffは提案修正をgit apply等で適用する用途に。 (manpages.ubuntu.com) - オンライン版:ローカルに入れなくても Web で試せます(貼り付けて即解析)。機密コードは避けましょう。 (ShellCheck)
参考
- manページ(Ubuntu):
shellcheck(1)(manpages.ubuntu.com) - manページ(Arch Linux):
shellcheck(1)(Arch Manual Pages) - 公式GitHub: koalaman/shellcheck(README・Issue・Wiki) (GitHub)
- ShellCheck Wiki(警告コード解説の索引) (ShellCheck)
- オンライン版 ShellCheck(ブラウザでお試し) (ShellCheck)

コメント