jpskill.com
🛠️ 開発・MCP コミュニティ

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. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

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