Husky lint-staged with Claude Code
Learn about husky lint-staged using Claude Code. Practical tips and code examples included.
Gitフックでコード品質を自動担保する
HuskyはGitフックを簡単に管理するツール、lint-stagedはステージされたファイルのみを対象にlintやフォーマットを実行するツールです。この2つを組み合わせることで、コミット前にコード品質を自動チェックし、問題のあるコードがリポジトリに入るのを防ぎます。
セットアップ
Claude Codeにセットアップを依頼しましょう。
> Husky + lint-stagedをセットアップして。
> ESLint、Prettier、型チェック、テストのコミット前チェックを含めて。
# パッケージのインストール
npm install -D husky lint-staged
# Huskyの初期化
npx husky init
// .husky/pre-commit
npx lint-staged
// package.json
{
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix --max-warnings 0",
"prettier --write"
],
"*.{js,jsx,mjs,cjs}": [
"eslint --fix",
"prettier --write"
],
"*.{json,md,yml,yaml}": [
"prettier --write"
],
"*.css": [
"prettier --write"
]
}
}
型チェックの追加
ステージされたファイルに影響する型エラーをチェックするフックです。
// .husky/pre-commit
#!/usr/bin/env sh
# lint-staged(ESLint + Prettier)
npx lint-staged
# TypeScript型チェック(プロジェクト全体)
npx tsc --noEmit --pretty
型チェックはファイル単位では意味がないため、プロジェクト全体に対して実行します。大規模プロジェクトでは時間がかかることがあるため、CIに任せる判断もあります。
コミットメッセージの検証
conventional commitsに準拠したコミットメッセージを強制するフックです。
# commitlintのインストール
npm install -D @commitlint/cli @commitlint/config-conventional
// commitlint.config.mjs
export default {
extends: ["@commitlint/config-conventional"],
rules: {
"type-enum": [
2,
"always",
[
"feat",
"fix",
"docs",
"style",
"refactor",
"perf",
"test",
"build",
"ci",
"chore",
"revert",
],
],
"subject-max-length": [2, "always", 72],
"body-max-line-length": [2, "always", 100],
},
};
// .husky/commit-msg
npx --no -- commitlint --edit ${1}
高度なlint-staged設定
ファイルパターンに応じて異なる処理を実行する設定です。
// lint-staged.config.mjs
export default {
// TypeScript/JSXファイル
"*.{ts,tsx}": (filenames) => {
const files = filenames.join(" ");
return [
`eslint --fix --max-warnings 0 ${files}`,
`prettier --write ${files}`,
// 変更ファイルに関連するテストを実行
`vitest related --run ${files}`,
];
},
// スタイルファイル
"*.{css,scss}": ["prettier --write"],
// Prismaスキーマ
"prisma/schema.prisma": () => [
"npx prisma format",
"npx prisma validate",
],
// パッケージファイル
"package.json": ["npx sort-package-json"],
};
プッシュ前のチェック
プッシュ前にビルドとテストを実行するフックです。
// .husky/pre-push
#!/usr/bin/env sh
echo "プッシュ前チェックを実行中..."
# ビルドチェック
npm run build
# テスト実行
npm run test:ci
echo "すべてのチェックに合格しました"
CI/CDとの連携
ローカルのフックとCIのチェックを整合させる設定です。
// package.json
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint --fix .",
"format": "prettier --write .",
"format:check": "prettier --check .",
"typecheck": "tsc --noEmit",
"test": "vitest",
"test:ci": "vitest run --coverage",
"validate": "npm run typecheck && npm run lint && npm run format:check && npm run test:ci",
"prepare": "husky"
}
}
トラブルシューティング
よくある問題と対処法です。
# フックが実行されない場合
chmod +x .husky/pre-commit
chmod +x .husky/commit-msg
# git hooksのパスを確認
git config core.hooksPath
# lint-stagedのデバッグ
npx lint-staged --debug
# 一時的にフックをスキップ(緊急時のみ)
git commit --no-verify -m "hotfix: 緊急修正"
// Windowsでの改行コード問題への対処
// .gitattributes
// * text=auto eol=lf
// *.{cmd,bat} text eol=crlf
チーム導入のポイント
- 段階的に導入する - まずPrettierだけ、次にESLint、最後に型チェックと段階的に追加
- CI と一致させる - ローカルフックとCIで同じチェックを実行する
- パフォーマンスを意識する - コミットが遅くなりすぎないよう、重いチェックはCIに委ねる
- ドキュメント化する - セットアップ手順と
--no-verifyの使用ルールを共有する
まとめ
Husky + lint-stagedの組み合わせは、コード品質を自動で担保するための基本的かつ効果的な仕組みです。Claude Codeを活用すれば、セットアップからカスタムフック作成、トラブルシューティングまで効率的に対応できます。
ESLintの設定はESLint設定最適化ガイドを、Prettierの設定はPrettier設定カスタマイズガイドを参照してください。Husky公式ドキュメントも確認しておきましょう。
Level up your Claude Code workflow
50 battle-tested prompt templates you can copy-paste into Claude Code right now.
Free PDF: Claude Code Cheatsheet in 5 Minutes
Key commands, shortcuts, and prompt examples on a single printable page.
About the Author
Masa
Engineer obsessed with Claude Code. Runs claudecode-lab.com, a 10-language tech media with 2,000+ pages.
Related Posts
Creating Custom Slash Commands in Claude Code — Tailor Your Workflow
Learn how to create custom slash commands in Claude Code. Covers file placement, arguments, and automating frequent tasks with practical code examples.
10 Tips to Triple Your Productivity with Claude Code
Learn about 10 tips to triple your productivity using Claude Code. Practical tips and code examples included.
Canvas/WebGL Optimization with Claude Code
Learn about Canvas/WebGL optimization using Claude Code. Practical tips and code examples included.