pre-commit について
pre-commitは、コードのコミットフックを管理するスキルです。フォーマット、Lint、セキュリティチェックを自動化し、設定生成や検証、トラブルシューティング、CI連携のワークフローを提供します。
主な機能
- 01コミットフックの導入と設定
- 02フォーマット、Lint、セキュリティフックの追加
- 03設定テンプレートの生成と検証
- 04フック失敗のトラブルシューティング
- 05CIパイプラインとの連携
- 06言語別およびインフラ分野の対応
活用シーン
- 01新規プロジェクトへのpre-commit導入
- 02Terraform検証フックの追加
- 03シークレット検出とセキュリティスキャンの追加
- 04失敗したESLintフックの診断
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill pre-commitインストール後、Claude Code で/pre-commitを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
ConfigurationGuide.mdHooksReference.mdQuickStartGuide.mdSecurityHooks.mdTools/HookGenerator.tsHookValidator.tspackage.jsonPreCommitManager.tsWorkflows/AddHooks.mdCIIntegration.mdCustomHook.mdSetup.mdTroubleshoot.md詳細
PreCommit
pre-commit フックを管理するための包括的なスキルです。pre-commit フックの多言語管理フレームワークであり、コード品質のチェック、フォーマット、リンティング、セキュリティスキャンを自動化します。
クイックリファレンス
| コマンド | 説明 |
|---|---|
pre-commit install | Git フックをインストールします |
pre-commit run --all-files | すべてのファイルですべてのフックを実行します |
pre-commit autoupdate | フックを最新バージョンに更新します |
pre-commit run <hook-id> | 指定したフックを実行します |
ワークフローの振り分け
| ワークフロー | トリガー | ファイル |
|---|---|---|
| セットアップ | 「pre-commit をセットアップ」「フックを初期化」「設定を作成」 | Workflows/Setup.md |
| フックの追加 | 「フックを追加」「リンティングを追加」「フォーマッターを追加」「セキュリティを追加」 | Workflows/AddHooks.md |
| トラブルシューティング | 「pre-commit を修正」「フックが失敗」「フックをデバッグ」 | Workflows/Troubleshoot.md |
| CI 統合 | 「CI パイプライン」「GitHub Actions」「GitLab CI」 | Workflows/CIIntegration.md |
| カスタムフック | 「カスタムフックを作成」「ローカルフック」「フックを書く」 | Workflows/CustomHook.md |
ドキュメント
| ドキュメント | 用途 |
|---|---|
QuickStartGuide.md | インストールと初回セットアップ |
HooksReference.md | 言語・目的別の包括的なフック一覧 |
ConfigurationGuide.md | 高度な設定オプション |
SecurityHooks.md | シークレットの検出とセキュリティスキャン |
ツール
| ツール | 用途 |
|---|---|
Tools/PreCommitManager.ts | pre-commit 設定を管理する CLI |
Tools/HookGenerator.ts | .pre-commit-config.yaml テンプレートを生成します |
Tools/HookValidator.ts | フック設定を検証します |
例
例 1:新しいプロジェクトで pre-commit をセットアップする
User: "Setup pre-commit for my Python project"
→ Invokes Setup workflow
→ Creates .pre-commit-config.yaml with Python hooks (black, isort, flake8)
→ Runs pre-commit install
例 2:Terraform フックを追加する
User: "Add Terraform validation hooks"
→ Invokes AddHooks workflow
→ Adds terraform_fmt, terraform_validate, terraform_docs hooks
→ Configures tflint and checkov integration
例 3:セキュリティスキャンを追加する
User: "Add secret detection to pre-commit"
→ Invokes AddHooks workflow
→ Adds gitleaks, detect-secrets, trufflehog hooks
→ Configures appropriate exclusion patterns
例 4:失敗するフックをデバッグする
User: "My eslint pre-commit hook is failing"
→ Invokes Troubleshoot workflow
→ Checks hook configuration and dependencies
→ Provides fix recommendations
サポート対象のフックカテゴリ
- Python:black、isort、flake8、mypy、bandit、pyupgrade
- JavaScript/TypeScript:prettier、eslint、biome
- インフラストラクチャ:terraform、terragrunt、helm、kustomize
- Kubernetes:kubeconform、kubeval、checkov
- セキュリティ:gitleaks、detect-secrets、trufflehog、trivy
- 汎用:yamllint、jsonlint、shellcheck、markdownlint
注意点
- エディターのターミナルで
git commit -mを実行すると、フックの出力が表示されません — エディターのラッパーによって stdout/stderr が隠されます。実際の失敗メッセージを確認するには、pre-commit run --all-filesを直接実行してください。 pre-commit autoupdateは最新のタグに更新しますが、フックリポジトリ内の固定設定は更新しません — 内部でflake8==6.0.0を固定しているフックは、そのバージョンのままです。autoupdate の後に、各フックのadditional_dependenciesを確認してください。- デフォルトではステージされたファイルでのみフックが実行されます。そのため、
git addの後にファイルを編集してコミットすると、フックは変更前の内容に対して実行されます。CI では--all-filesを使用してこれを検出してください。 exclude:の正規表現はfiles:とアンカーの扱いが異なります — 一部のフックバージョンではexclude: tests/はtests/foo.pyを除外しません。確実に除外するにはexclude: ^tests/を使用してください。すべてにアンカーを付けてください。language: systemのフックは pre-commit の仮想環境を経由せず、ユーザーの PATH に依存します。自分の環境では動いても、CI ではcommand not foundで失敗します。additional_dependenciesを指定してlanguage: pythonを使用することをおすすめします。pre-commit installはデフォルトではcommit-msgやpre-push用のフックをインストールしません — 別途--hook-typeの呼び出しが必要です。commit-msg フックを追加したのに動作しないと困惑するチームは少なくありません。SKIP=hookid git commitでフックをスキップしても、そのシェル呼び出しの間だけ有効です。CI はSKIPが未設定の新しい環境で実行されるため、フックは通常どおり実行されます。
コメント
Markdown 対応