git-hooks
コミット前にコード品質を自動チェックし、整形やテスト実行を効率化するGitフックを簡単に設定するSkill。
📜 元の英語説明(参考)
Git hooks setup with pre-commit, husky, and lint-staged for automated code quality. Use when user asks to "setup pre-commit hooks", "add husky", "lint on commit", "format before commit", "run tests on push", "setup git hooks", or automate code quality checks.
🇯🇵 日本人クリエイター向け解説
コミット前にコード品質を自動チェックし、整形やテスト実行を効率化するGitフックを簡単に設定するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-17
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Git フック
pre-commit、Husky、またはネイティブフックを使用して、Git フックでコード品質を自動化します。
Husky + lint-staged (Node.js プロジェクト)
セットアップ
# インストール
npm install -D husky lint-staged
# husky を初期化
npx husky init
# これにより .husky/pre-commit が作成されます
lint-staged の設定
// package.json
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.{json,md,yml}": "prettier --write",
"*.css": ["stylelint --fix", "prettier --write"]
}
}
Pre-commit フック
# .husky/pre-commit
npx lint-staged
Pre-push フック
# フックを作成
echo "npm test" > .husky/pre-push
chmod +x .husky/pre-push
Pre-commit フレームワーク (Python/Polyglot)
セットアップ
pip install pre-commit
pre-commit install
設定
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-json
- id: check-added-large-files
- repo: https://github.com/psf/black
rev: 24.1.0
hooks:
- id: black
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.14
hooks:
- id: ruff
args: [--fix]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.8.0
hooks:
- id: mypy
- repo: local
hooks:
- id: pytest
name: pytest
entry: pytest
language: system
pass_filenames: false
always_run: true
stages: [push]
コマンド
pre-commit run --all-files # すべてのファイルで実行
pre-commit autoupdate # フックのバージョンを更新
pre-commit install --hook-type pre-push
ネイティブ Git フック
フックの場所
.git/hooks/
├── pre-commit # コミット前
├── prepare-commit-msg # コミットメッセージの編集
├── commit-msg # コミットメッセージの検証
├── pre-push # プッシュ前
├── pre-rebase # リベース前
└── post-merge # マージ後
シンプルな Pre-commit
#!/bin/sh
# .git/hooks/pre-commit
# リンターを実行
npm run lint
if [ $? -ne 0 ]; then
echo "Lint failed. Commit aborted."
exit 1
fi
# テストを実行
npm test
if [ $? -ne 0 ]; then
echo "Tests failed. Commit aborted."
exit 1
fi
コミットメッセージの検証
#!/bin/sh
# .git/hooks/commit-msg
commit_msg=$(cat "$1")
# Conventional commits パターン
pattern="^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .{1,50}"
if ! echo "$commit_msg" | grep -qE "$pattern"; then
echo "Invalid commit message format."
echo "Use: type(scope): description"
exit 1
fi
フックの共有
Git Config (core.hooksPath)
# フックをリポジトリに保存
mkdir .githooks
mv .git/hooks/* .githooks/
# Git がそれらを使用するように設定
git config core.hooksPath .githooks
チームのセットアップ
// package.json
{
"scripts": {
"prepare": "husky || true"
}
}
フックをスキップ (緊急時)
git commit --no-verify -m "Emergency fix"
git push --no-verify 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Git Hooks
Automate code quality with Git hooks using pre-commit, Husky, or native hooks.
Husky + lint-staged (Node.js Projects)
Setup
# Install
npm install -D husky lint-staged
# Initialize husky
npx husky init
# This creates .husky/pre-commit
Configure lint-staged
// package.json
{
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.{json,md,yml}": "prettier --write",
"*.css": ["stylelint --fix", "prettier --write"]
}
}
Pre-commit Hook
# .husky/pre-commit
npx lint-staged
Pre-push Hook
# Create hook
echo "npm test" > .husky/pre-push
chmod +x .husky/pre-push
Pre-commit Framework (Python/Polyglot)
Setup
pip install pre-commit
pre-commit install
Configuration
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-json
- id: check-added-large-files
- repo: https://github.com/psf/black
rev: 24.1.0
hooks:
- id: black
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.14
hooks:
- id: ruff
args: [--fix]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.8.0
hooks:
- id: mypy
- repo: local
hooks:
- id: pytest
name: pytest
entry: pytest
language: system
pass_filenames: false
always_run: true
stages: [push]
Commands
pre-commit run --all-files # Run on all files
pre-commit autoupdate # Update hook versions
pre-commit install --hook-type pre-push
Native Git Hooks
Hook Locations
.git/hooks/
├── pre-commit # Before commit
├── prepare-commit-msg # Edit commit message
├── commit-msg # Validate commit message
├── pre-push # Before push
├── pre-rebase # Before rebase
└── post-merge # After merge
Simple Pre-commit
#!/bin/sh
# .git/hooks/pre-commit
# Run linter
npm run lint
if [ $? -ne 0 ]; then
echo "Lint failed. Commit aborted."
exit 1
fi
# Run tests
npm test
if [ $? -ne 0 ]; then
echo "Tests failed. Commit aborted."
exit 1
fi
Commit Message Validation
#!/bin/sh
# .git/hooks/commit-msg
commit_msg=$(cat "$1")
# Conventional commits pattern
pattern="^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .{1,50}"
if ! echo "$commit_msg" | grep -qE "$pattern"; then
echo "Invalid commit message format."
echo "Use: type(scope): description"
exit 1
fi
Sharing Hooks
Git Config (core.hooksPath)
# Store hooks in repo
mkdir .githooks
mv .git/hooks/* .githooks/
# Configure git to use them
git config core.hooksPath .githooks
Team Setup
// package.json
{
"scripts": {
"prepare": "husky || true"
}
}
Skip Hooks (Emergency)
git commit --no-verify -m "Emergency fix"
git push --no-verify