shellcheck について
shellcheckは、ShellCheckのワークフローを通じてシェルスクリプトの解析、修正、設定、エラーコードの説明を行うスキルです。bash/shスクリプトの引用、構文、互換性、スタイルの問題を見つけ、結果と修正案を提示します。
主な機能
- 01スクリプトの一般的な問題を解析
- 02修正案の生成と対話的な適用
- 03.shellcheckrcとフックの設定
- 04ShellCheckエラーコードの説明
- 05依頼を専用ワークフローに振り分け
活用シーン
- 01リリース前のシェルスクリプト検査
- 02複数スクリプトの問題確認と修正
- 03リポジトリへのShellCheck検査追加
- 04特定のSC警告の理解
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill shellcheckインストール後、Claude Code で/shellcheckを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BestPractices.mdConfiguration.mdErrorCodes.mdIntegration.mdTools/.gitkeepWorkflows/Analyze.mdExplain.mdFix.mdSetup.md詳細
ShellCheck - シェルスクリプトの静的解析
ユーザーが shellcheck、シェルの lint、bash スクリプトの解析、または SC エラーコードに言及した場合、自動的にルーティングします。
概要
ShellCheck は、bash/sh シェルスクリプトのバグを特定する、GPLv3 ライセンスの静的解析ツールです。次の問題を検出します。
- 構文エラーと解析上の問題
- 予期しない動作を引き起こす意味上の問題
- クォートの問題と単語分割のバグ
- POSIX 互換性に関する警告
- スタイルやベストプラクティスへの違反
音声通知
ワークフローを実行する際は、次の両方を行ってください。
-
音声通知を送信する:
curl -s -X POST http://localhost:8888/notify \ -H "Content-Type: application/json" \ -d '{"message": "Running the WORKFLOWNAME workflow from the ShellCheck skill"}' \ > /dev/null 2>&1 & -
テキスト通知を出力する:
Running the **WorkflowName** workflow from the **ShellCheck** skill...
ワークフローのルーティング
| ワークフロー | トリガー | ファイル |
|---|---|---|
| Analyze | "shellcheck this", "lint script", "check shell" | Workflows/Analyze.md |
| Fix | "fix shell errors", "apply shellcheck fixes" | Workflows/Fix.md |
| Setup | "setup shellcheck", "configure shellcheck" | Workflows/Setup.md |
| Explain | "explain SC2086", "what is SC code" | Workflows/Explain.md |
クイックリファレンス
基本的な使い方
# Check a script
shellcheck myscript.sh
# Specify shell dialect
shellcheck -s bash myscript.sh
# Exclude specific codes
shellcheck -e SC2086,SC2046 myscript.sh
# Output formats
shellcheck -f gcc myscript.sh # Editor integration
shellcheck -f json myscript.sh # Machine readable
shellcheck -f diff myscript.sh # Auto-fix patches
よくある SC コード
| コード | 問題 | 修正方法 |
|---|---|---|
| SC2086 | クォートされていない変数 | "$var" |
| SC2046 | クォートされていないコマンド置換 | "$(cmd)" |
| SC2034 | 未使用の変数 | 削除するか、エクスポートする |
| SC2154 | 代入されていない変数 | 代入するか、無効にする |
| SC2155 | 宣言と代入を別々に行う | 宣言を分ける |
インラインディレクティブ
# Disable for next command
# shellcheck disable=SC2086
echo $var
# Disable for entire file (after shebang)
#!/bin/bash
# shellcheck disable=SC2086,SC2046
全ドキュメント
- エラーコード:
SkillSearch('shellcheck error codes')-> ErrorCodes.md を読み込みます - 設定:
SkillSearch('shellcheck config')-> Configuration.md を読み込みます - CI/CD 統合:
SkillSearch('shellcheck ci')-> Integration.md を読み込みます - ベストプラクティス:
SkillSearch('shellcheck practices')-> BestPractices.md を読み込みます
例
例 1:スクリプトを解析する
User: "shellcheck my deploy script"
-> Invokes Analyze workflow
-> Runs shellcheck with JSON output
-> Presents findings grouped by severity
-> Suggests fixes with wiki links
例 2:よくある問題を修正する
User: "fix the shellcheck errors in scripts/"
-> Invokes Fix workflow
-> Generates diff output
-> Applies fixes interactively
-> Re-runs validation
例 3:プロジェクト用にセットアップする
User: "setup shellcheck for this repo"
-> Invokes Setup workflow
-> Creates .shellcheckrc
-> Adds pre-commit hook
-> Configures CI workflow
例 4:エラーコードを説明する
User: "what does SC2086 mean?"
-> Invokes Explain workflow
-> Fetches wiki documentation
-> Shows examples and fixes
-> Provides context-specific guidance
注意点
- SC2086 は
[[ ]]内では誤りです: Bash の[[ ]]では単語分割が行われないため、[[ -n $var ]]はクォートしなくても安全です。[[ ]]ブロックで SC2086 を無効にするのは、ルールに問題があるのではなく、誤った構文に lint を適用している兆候です。 - SC2034 は間接的に使用される変数にも反応します:
${!prefix*}による間接参照、declare -pによるイントロスペクション、または別のスクリプトへの読み込みを通じて使われる変数は、「未使用」と誤検出されることがあります。間接参照の説明コメントとともに# shellcheck disable=SC2034を使い、グローバルには無効にしないでください。 - シバンで決まるのは方言であり、ファイル名ではありません:
#!/bin/shを指定したscript.shは POSIX sh としてチェックされ、[[ ]]や配列などの bash 固有構文は拒否されます。正しいシバンを設定するか、明示的に-s bashを渡してください。.sh拡張子をあてにしないでください。 .shellcheckrcのshellcheck -e SC2086,SC2046は実際のバグを隠します: プロジェクト全体で無効にすると、1 年後には理由を誰も覚えておらず、クォートされていない展開が本番環境にデプロイされます。グローバルに抑制するのではなく、理由を説明するコメントを添えてインラインで無効にしてください。- ソースファイルの追跡には
-xフラグが必要です:source ./lib.shはデフォルトでは解析されません。全体をチェックするにはshellcheck -x script.shを実行するか、# shellcheck source=./lib.shディレクティブを追加してください。CI 設定でこれが漏れることはよくあり、チェックされていないソースファイルがデプロイされます。 -f diffによるパッチの生成には、スクリプトが問題なく解析できることが前提です: 構文エラーがあると、自動修正の出力は明確なメッセージなしにすべて生成されなくなります。-f diffで何も出力されない場合は、まず-fなしで実行して解析エラーを修正し、その後にパッチ生成を再実行してください。
コメント
Markdown 対応