hadolint について
hadolintでDockerfileを検査するスキルです。構文やベストプラクティス、埋め込みシェルを確認したい開発者向けで、設定を検出し、ルールコードと修正案を示します。
主な機能
- 01Dockerfileの構文と慣行の検査
- 02RUN内のシェルスクリプト解析
- 03hadolint設定の検出
- 04DL・SCコードと修正案の提示
活用シーン
- 01ビルド前のDockerfile確認
- 02複数Dockerfileの検査
- 03RUN命令内のシェル問題の発見
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ rshade/ agent-skills --skill hadolintインストール後、Claude Code で/hadolintを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
evals/Dockerfile.testevals.jsonreferences/hadolint-config.yamlhadolint-rules.md詳細
Hadolint
Dockerfile の構文エラー、ベストプラクティス違反、埋め込みシェルスクリプトの問題を検証します。イメージタグ、パッケージのバージョン固定、クリーンアップ、COPY と ADD の使い分け、RUN コマンド内のシェルスクリプトの問題、非推奨の命令をチェックします。ビルド失敗や実行時の問題につながるエラーを検出します。
このスキルでできること
hadolintが利用可能か確認します。利用できない場合はインストール方法を案内します(まずシステムバイナリを確認し、次に Docker を使用します)。- プロジェクト固有の
.hadolint.yamlを検出し、ない場合は適切なデフォルト設定を使用します。 - Dockerfile の構文、ベストプラクティス、RUN コマンド内のシェルスクリプトの問題を検証します。
- DL(Dockerfile)および SC(シェル)のルールコードと、具体的な修正方法を報告します。
インストールの確認
hadolint --version 2>/dev/null
インストールされていない場合は、システムへのインストールを試みます。
# Apt (Debian/Ubuntu)
sudo apt-get install hadolint
# Homebrew (macOS/Linux)
brew install hadolint
# Direct download (Linux amd64)
wget -O /usr/local/bin/hadolint \
https://github.com/hadolint/hadolint/releases/latest/download/hadolint-Linux-x86_64
chmod +x /usr/local/bin/hadolint
システムへのインストールに失敗した場合、または利用できない場合は、Docker に切り替えます。
docker run --rm hadolint/hadolint hadolint --version 2>/dev/null
システムバイナリも Docker も利用できない場合は、停止して問題と解決手順を報告します。検証を黙って省略してはいけません。
設定の検出優先順位
- プロジェクトのルートにある
.hadolint.yaml - ホームディレクトリにある
.hadolint.yaml(~/.hadolint.yaml) $XDG_CONFIG_HOME/hadolint.yaml(XDG 標準)references/hadolint-config.yamlのデフォルト設定
プロジェクト設定がなく、システムバイナリを使用する場合は、検証を実行する前に、references のデフォルト設定を使って一時的な .hadolint.yaml を作成します。Docker モードでは、設定ファイルが存在する場合にそれをマウントします。
検証ワークフロー
1. Check hadolint installation
├─ System binary available → continue
├─ Missing → try install
│ ├─ Install succeeds → continue
│ └─ Install fails → Docker fallback
│ ├─ Docker available → continue (Docker mode)
│ └─ Docker unavailable → fail with remediation
2. Detect project config
├─ Found .hadolint.yaml → use it
└─ Not found → use default config from references/
3. Run validation
├─ System binary:
│ hadolint Dockerfile
└─ Docker mode:
docker run --rm -i hadolint/hadolint < Dockerfile
4. Report results
├─ Valid → confirm and proceed
└─ Invalid → show DL/SC errors, suggest fixes, re-validate
検証方法
単一の Dockerfile を検証する
hadolint Dockerfile
複数のファイルを検証する
hadolint Dockerfile Dockerfile.prod Dockerfile.dev
明示的な設定を使用して検証する
hadolint --config .hadolint.yaml Dockerfile
標準入力から検証する
cat Dockerfile | hadolint -
Docker への切り替え(システムバイナリが利用できない場合)
docker run --rm -i hadolint/hadolint < Dockerfile
設定を指定して Docker に切り替える
docker run --rm -i \
-v "$(pwd)/.hadolint.yaml:/.config/hadolint.yaml" \
hadolint/hadolint < Dockerfile
エラー処理
インストール失敗
システムのパッケージマネージャー経由で hadolint をインストールできず、Docker も利用できない場合は、解決手順とともにエラーを報告します。検証を続行してはいけません。
検証失敗
検証に失敗した場合は、各エラーについて次の内容を報告します。
- ファイルと行番号
- エラーコード(Dockerfile のベストプラクティスには DL 接頭辞、シェルスクリプトの問題には SC 接頭辞)
- 問題の内容
- 具体的な修正方法
例:
Validation failed:
1. Dockerfile:1 DL3006 warning: Always tag the version of an image explicitly
Fix: FROM ubuntu → FROM ubuntu:22.04
2. Dockerfile:3 DL3008 warning: Pin versions in apt-get install
Fix: apt-get install -y curl → apt-get install -y curl=7.88.1-10+deb12u5
3. Dockerfile:3 DL3009 info: Delete the apt-get lists after installing
Fix: add && rm -rf /var/lib/apt/lists/* at the end of RUN
4. Dockerfile:4 DL3015 warning: Use --no-install-recommends flag in apt-get install
Fix: apt-get install -y → apt-get install -y --no-install-recommends
5. Dockerfile:5 DL3020 warning: Use COPY instead of ADD for files
Fix: ADD https://example.com/app.tar.gz → use curl or wget in RUN
6. Dockerfile:7 DL4000 error: MAINTAINER is deprecated, use LABEL instead
Fix: MAINTAINER [email protected] → LABEL maintainer="[email protected]"
7. Dockerfile:10 DL4006 warning: Set the SHELL directive in RUN for pipefail
Fix: add SHELL ["/bin/bash", "-o", "pipefail", "-c"] before RUN with pipes
8. Dockerfile:3 SC2086 info: Double quote to prevent globbing
Fix: COPY $SOURCE → COPY "$SOURCE"
DL コードは Dockerfile 固有の問題を示します。SC コードは、RUN 命令の内容に適用される shellcheck のコードです。エラーを報告した後、修正方法を提案し、修正後に再検証するよう依頼します。
ルールリファレンス
すべてのルール、よくあるエラーカテゴリ、DL/SC コードの詳しい説明、修正例、設定ファイルの形式については、references/hadolint-rules.md を参照してください。