ShellCheck

sh や bash のシェルスクリプトを実行せずに読み、クォート漏れや危険な書き方などのよくある間違いを指摘する静的解析ツール。

cat shellcheck/meta.yml確認日 2026-10-25

安全性

影響範囲 手元だけ自分の端末の中で完結し、外には何も送らない
管理者権限
不要
検証環境
不要

使い方

用途
防御
難易度
初級
形態
コマンドライン
対応環境
Linux / macOS / Windows / Docker / Web

信頼性

リポジトリ
koalaman/shellcheck
ライセンス
条件つきGPL-3.0
GitHub
スター40,2352026-10-25 時点
メンテ状況
更新が続いている最終更新 2026-10-19
目次
  1. はじめに
  2. ShellCheck でできること
  3. 安全な試し方
  4. 結果の読み方と主な使い方
  5. 注意点
  6. 次に読む
  7. 出典

ShellCheck は、シェルスクリプトを実行せずに読んで、間違いや危ない書き方を指摘するツールです。自分のパソコンの中だけで動き、スクリプトをどこにも送らないので、書いたスクリプトをすぐに確かめられます。

この記事は、sh や bash でスクリプトを書き始めた人に向けています。読み終えると、次のことができるようになります。

  • ShellCheck をインストールして、手元のスクリプトを確かめる
  • 警告の番号(SC2086 など)から、公式 Wiki の説明を引く
  • 不要な警告を抑えたり、CI に組み込んだりする

ShellCheck でできること

公式 README は、ShellCheck の目的として次のものを挙げています。

  • 初心者がつまずきやすい文法の間違いを指摘し、シェルの分かりにくいエラーの意味を説明する
  • 中級者が書きがちな、思ったとおりに動かない書き方を指摘する
  • 今は動いていても、条件しだいで将来失敗する落とし穴を指摘する

対応する方言は sh(POSIX)、bash、dash、ksh、busybox です。どの方言として読むかは、ファイル先頭の shebang(#!/bin/bash など)や拡張子から自動で決まります。-s bash のように指定もできます。

セキュリティの面で役に立つのは、次のような指摘です。

番号 指摘の内容 起こりうる事故
SC2086 変数をダブルクォートで囲んでいない 値に空白や * などが入ると、単語分割やグロブ展開が起きて、別の引数やファイル名に化ける
SC2115 rm -rf "$STEAMROOT/"* のように、変数が空だと /* になる書き方 変数が空のとき、ルートディレクトリの中身を消してしまう

SC2115 の Wiki は、直し方として "${STEAMROOT:?}/"* を示しています。:? を付けると、変数が空か未設定のときにコマンドが失敗して止まります。

しないことShellCheck はスクリプトを読むだけで、実行はしません。マルウェアの検出や、秘密情報の漏れを探す用途の道具でもありません。警告が出なかったからといって、スクリプトが安全だとは言えないので、指摘は見直しのきっかけとして使ってください。

安全な試し方

  1. パッケージマネージャでインストールします。公式 README には、次のような方法が載っています。

    環境 コマンド
    Debian 系 sudo apt install shellcheck
    Fedora 系 dnf install ShellCheck
    macOS(Homebrew) brew install shellcheck
    Windows winget install --id koalaman.shellcheck、choco install shellcheck、scoop install shellcheck
    Docker docker run --rm -v "$PWD:/mnt" koalaman/shellcheck:stable myscript

    GitHub Releases には、Linux・macOS・Windows 向けのビルド済みバイナリもあります。

  2. 練習用のファイル test.sh を作り、次の 2 行を書きます。中身は実行しないでください。

    #!/bin/bash
    echo $1
  3. shellcheck test.sh を実行します。$1 に SC2086 の指摘が付きます。

  4. echo "$1" に直して、もう一度実行します。指摘が消えれば完了です。

インストールせずに試すなら、ShellCheck.net にスクリプトを貼り付ける方法もあります。ただし、貼ったスクリプトはサーバーへ送られます(後の「注意点」を参照)。

結果の読み方と主な使い方

指摘には SC から始まる番号と重大度が付きます。番号で公式 Wiki(https://www.shellcheck.net/wiki/SC番号)を開くと、悪い例、直した例、理由が読めます。重大度は重いほうから error、warning、info、style の 4 段階です。

やりたいこと 書き方
重大度 warning 以上だけを表示する shellcheck --severity=warning myscript(短縮形は -S)
1 回の実行だけ特定の番号を外す shellcheck -e SC2059 myscript
次のコマンド 1 つだけ警告を抑える 直前の行に # shellcheck disable=SC2059
ファイル全体で抑える shebang の直後に # shellcheck disable=SC2059
プロジェクト全体で抑える .shellcheckrc に disable=SC2059,SC2034
結果を機械で読む形にする -f json1、-f checkstyle、-f gcc など

終了コードは、問題がなければ 0、指摘があれば 1 です。そのため Makefile や CI に shellcheck myscripts/*.sh と書くだけで、指摘があるときにビルドを失敗させられます。公式 README は、新しい版で警告が増えてビルドが突然落ちるのを防ぐため、CI では版を固定して入れることを勧めています。pre-commit 用のフックも公式に用意されています。

エディタでは、VS Code(vscode-shellcheck)、Vim(ALE など)、Emacs(Flycheck など)、Sublime Text(SublimeLinter)などで、書きながら指摘を表示できます。

注意点

  • ShellCheck.net に貼ったスクリプトは、ブラウザから同サイトのサーバー(shellcheck.php)へ送られて解析されます。送られた内容をサーバーが保存するかどうか、どれくらいの期間残るかは、公式の記載を見つけられず未確認です。パスワード、API キー、社内のホスト名などが入ったスクリプトは、手元の shellcheck コマンドで確かめてください。
  • 警告を disable で抑えるときは、理由をコメントに残しておくと、後から見直せます。公式 Wiki によると、command1; command2 のように 1 行に並べたコマンドでは、ディレクティブは最初のコマンドにしか効きません。
  • 他人から受け取ったスクリプトを確かめるときも、ShellCheck は実行しないので安全に読めます。ただし、指摘がないことを理由にそのスクリプトを実行してよいとは判断しないでください。

次に読む

出典

  1. 公式リポジトリ(README)github.com/koalaman/shellcheck
  2. マニュアル(shellcheck.1.md)github.com/koalaman/shellcheck/blob/master/shellcheck.1.md
  3. Wiki:SC2086www.shellcheck.net/wiki/SC2086
  4. Wiki:SC2115www.shellcheck.net/wiki/SC2115
  5. Wiki:警告を無視する(Ignore)github.com/koalaman/shellcheck/wiki/Ignore
  6. ShellCheck.net(オンライン版)www.shellcheck.net
  7. ShellCheck.net のソース(shellcheck.js)github.com/koalaman/shellcheck.net/blob/master/shellcheck.js

確認日 2026-10-25

似たツール

Gitleaks

影響範囲 手元だけ
gitleaks/gitleaks

Git リポジトリやファイルに紛れ込んだパスワード、API キー、トークンなどの秘密情報を見つけるコマンドラインツール。

用途
防御
形式
コマンドライン
難易度
初級
ライセンス
自由に使えるMIT
分類
脆弱性スキャン
更新が続いているスター30,315最終更新 2026-10-23
Gitleaksの解説を読む

Trivy

影響範囲 手元だけ
aquasecurity/trivy

コンテナイメージやコード、Kubernetes の脆弱性・設定ミス・埋め込まれた秘密情報を見つけるスキャナー。

用途
防御
形式
コマンドライン
難易度
初級
ライセンス
自由に使えるApache-2.0
分類
脆弱性スキャン/コンテナ・クラウド
更新が続いているスター38,703最終更新 2026-10-23
Trivyの解説を読む