mcpField
H
hadolint

hadolint

github.com/rshadeテスト・品質389 回インストール2 週間前に更新
リポジトリ

hadolint について

hadolintでDockerfileを検査するスキルです。構文やベストプラクティス、埋め込みシェルを確認したい開発者向けで、設定を検出し、ルールコードと修正案を示します。

主な機能

  1. 01Dockerfileの構文と慣行の検査
  2. 02RUN内のシェルスクリプト解析
  3. 03hadolint設定の検出
  4. 04DL・SCコードと修正案の提示

活用シーン

  1. 01ビルド前のDockerfile確認
  2. 02複数Dockerfileの検査
  3. 03RUN命令内のシェル問題の発見

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/rshade/agent-skills --skill hadolint

インストール後、Claude Code で/hadolintを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

evals/
Dockerfile.test
evals.json
references/
hadolint-config.yaml
hadolint-rules.md

詳細

Hadolint

Dockerfile の構文エラー、ベストプラクティス違反、埋め込みシェルスクリプトの問題を検証します。イメージタグ、パッケージのバージョン固定、クリーンアップ、COPY と ADD の使い分け、RUN コマンド内のシェルスクリプトの問題、非推奨の命令をチェックします。ビルド失敗や実行時の問題につながるエラーを検出します。

このスキルでできること

  1. hadolint が利用可能か確認します。利用できない場合はインストール方法を案内します(まずシステムバイナリを確認し、次に Docker を使用します)。
  2. プロジェクト固有の .hadolint.yaml を検出し、ない場合は適切なデフォルト設定を使用します。
  3. Dockerfile の構文、ベストプラクティス、RUN コマンド内のシェルスクリプトの問題を検証します。
  4. 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 も利用できない場合は、停止して問題と解決手順を報告します。検証を黙って省略してはいけません。

設定の検出優先順位

  1. プロジェクトのルートにある .hadolint.yaml
  2. ホームディレクトリにある .hadolint.yaml(~/.hadolint.yaml)
  3. $XDG_CONFIG_HOME/hadolint.yaml(XDG 標準)
  4. 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 を参照してください。

コメント