mcpField
S
setup-git-hooks

setup-git-hooks

github.com/dyrits開発042 回インストール1 日前に更新
リポジトリ

setup-git-hooks について

setup-git-hooksは、Git組み込みのcore.hooksPath設定でリポジトリのフックを構成するスキルです。ステージ済みファイルの整形とチェックを各ツールに割り当て、設定済みの型チェックとビルドをコミット前に実行します。

主な機能

  1. 01core.hooksPathによるフック設定
  2. 02lint-staged経由でBiomeを実行
  3. 03未対応言語向けPrettierの追加
  4. 04設定済みの型チェックとビルドを実行
  5. 05フック設定の検証と関連ファイルのコミット

活用シーン

  1. 01リポジトリへのコミット前チェック追加
  2. 02プロジェクトの言語に合わせた整形設定
  3. 03移行を確認したうえでHuskyを置き換え

インストール

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

$npx skills add https://github.com/dyrits/skills --skill setup-git-hooks

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

同梱ファイルagents/openai.yamlapm.yml

詳細

Git フックを設定する

設定内容

  • コミット済みの .githooks/ ディレクトリを指す core.hooksPath(Git 組み込み機能のため、Husky は不要です)
  • 対応言語に対して Biome を実行する lint-staged
  • (存在しない場合)Biome の設定
  • Biome が対応していない言語用の Prettier(ユーザーが利用を選択した場合のみ)
  • pre-commit フック内の typecheck と build スクリプト

Husky を使わない理由:Husky の役割は、実行スクリプトを .git/hooks/ にコピーすることだけです。git config core.hooksPath .githooks なら、依存関係なしで同じことができます。prepare スクリプトにより、npm install のたびに設定されるため、チームメイトもクローン時に設定されます。

手順

1. パッケージマネージャーと既存のフックツールを確認する

package-lock.json(npm)、pnpm-lock.yaml(pnpm)、yarn.lock(yarn)、bun.lockb(bun)があるか確認します。存在するものを使用してください。判断できない場合は npm を使用します。

リポジトリですでに Husky を使用している場合(.husky/ ディレクトリがある、または prepare: husky が設定されている場合)は、何かをインストールまたは書き込む前に、Husky から移行するか、Husky を維持してここで停止するかをユーザーに確認してください。

2. フォーマッターの対応範囲を整理する

リポジトリに含まれる言語を一覧にし、インストールする Biome のバージョンが対応する言語(フォーマットとリント)を確認します(ドキュメントまたは biome --help を参照してください)。Biome 2.x では HTML など、一部の言語は biome.json で有効にした場合にのみ対応するため、対応済みとして数え、手順 7 で有効にしてください。プロジェクトですでに使用しているフォーマッター(oxfmt、dprint、Prettier)は維持し、それぞれの言語をそのフォーマッターに割り当ててください。

未対応の言語が残る場合は、それぞれの言語名を挙げて Prettier の利用を提案し、ユーザーが辞退できるようにしてください。

完了条件:リポジトリ内のすべての言語が、Biome、既存のフォーマッター、(利用を受け入れた場合の)Prettier、または(利用を辞退した場合の)フォーマッターなしのいずれかに割り当てられていること。

3. 依存関係をインストールする

lint-staged と @biomejs/biome を開発用依存関係としてインストールします。ユーザーが Prettier の利用を受け入れた場合のみ、prettier もインストールします。リポジトリにすでにあるツールはスキップしてください。

4. .githooks/pre-commit を作成する

このファイルを書き込み、実行可能にします(chmod +x .githooks/pre-commit)。

#!/bin/sh
npx lint-staged
npm run typecheck --if-present
npm run build --if-present

調整:npm を確認済みのパッケージマネージャーに置き換えます(pnpm --if-present はサポートされていないため、まず package.json でスクリプトを確認し、存在しない場合は行を省略してください)。リポジトリの package.json に typecheck または build スクリプトがない場合は省略し、その旨をユーザーに伝えてください。

5. Git にフックディレクトリを指定する
git config core.hooksPath .githooks

これはローカル設定のため、新しいクローンにも必要です。すべてのインストール時に実行されるよう、package.json に prepare スクリプトを追加します。

{
  "scripts": {
    "prepare": "git config core.hooksPath .githooks"
  }
}

既存のスクリプトに統合してください。すでに prepare がある場合は、git config の呼び出しを追加します(例:&&)。

6. .lintstagedrc を作成する

Biome は手順 2 で割り当てた言語のフォーマットとリント(check)を処理します。ユーザーが Prettier に割り当てた言語に対してのみ、Prettier のエントリーを追加してください。

{
  "*.{js,jsx,ts,tsx,json,jsonc,css,graphql}": "biome check --write --no-errors-on-unmatched",
  "*.{html,md,mdx,yaml,yml,scss,vue,svelte,astro}": "prettier --write"
}

各 glob にはツールを 1 つだけ指定し、リポジトリに含まれる拡張子のみを列挙してください。

7. biome.json と(必要な場合は).prettierrc を作成する

設定ファイルが存在しない場合に限り、作成してください(biome.json、biome.jsonc、.prettierrc、.prettierrc.json、prettier.config.* があるか確認してください)。手順 2 で Biome に割り当てたオプトイン言語を有効にしてください。.prettierrc は Prettier の利用が受け入れられた場合のみ作成してください。

Biome のデフォルト設定(biome.json)。書き込む前に、基本的なフォーマッター設定の希望をユーザーに確認し(以下の質問を参照)、その後ファイルを作成します。

{
  "$schema": "https://biomejs.dev/schemas/latest/schema.json",
  "formatter": {
    "enabled": true,
    "indentWidth": 2,
    "lineWidth": 160,
    "trailingComma": "none"
  },
  "javascript": {
    "formatter": {
      "quoteStyle": "double",
      "semicolons": "always",
      "arrowParentheses": "always"
    }
  },
  "json": {
    "formatter": { "enabled": true }
  },
  "css": {
    "formatter": { "enabled": true }
  },
  "linter": { "enabled": true },
  "organizeImports": { "enabled": true },
  "assist": {
    "actions": {
      "source": {
        "useSortedAttributes": "on",
        "useSortedKeys": "on",
        "useSortedProperties": "on"
      }
    }
  }
}

biome.json を書き込む前に、基本設定をユーザーに確認してください(上記ですでに回答済み、または決定済みの項目は省略します)。

  • タブとスペースのどちらを使いますか(デフォルト:スペース、幅 2)?
  • 行の幅はいくつにしますか(デフォルト:160)?
  • JS/TS の引用符スタイルはどれにしますか(デフォルト:ダブルクォート)?
  • セミコロンとアロー関数の括弧はどうしますか(デフォルト:常に付ける/常に付ける)?

Prettier のデフォルト設定(利用が受け入れられた場合の .prettierrc。Biome の基本設定に合わせます)。

{
  "useTabs": false,
  "tabWidth": 2,
  "printWidth": 160,
  "singleQuote": false,
  "trailingComma": "none",
  "semi": true,
  "arrowParens": "always"
}
8. 確認
  • .githooks/pre-commit が存在し、実行可能である
  • git config core.hooksPath が .githooks を出力する
  • package.json の prepare スクリプトが core.hooksPath を設定する
  • .lintstagedrc が存在する
  • biome.json が存在する(または既存の Biome 設定が見つかっている)
  • Prettier を採用した場合、prettier 設定が存在する
  • npx lint-staged を実行し、動作することを確認する
9. コミット

このセットアップで作成または変更したファイルのみをステージします:.githooks/、.lintstagedrc、フォーマッターの設定ファイル、package.json、ロックファイルです。ほかに未コミットの変更があり、ブランチがデフォルトブランチの場合は、コミットする前に確認してください。インストールしたツール名を含むメッセージでコミットします。例:Add git hooks via core.hooksPath (lint-staged + biome)。

コミット時には新しい pre-commit フックが実行されます。すべてが動作することを確かめる、よいスモークテストです。

注意事項

  • core.hooksPath は .git/hooks/ を全面的に上書きするため、.git/hooks/ 内のフックは実行されなくなります
  • prepare スクリプトを実行するには Git リポジトリが必要です。公開パッケージでは、対策を講じない限り、Git コンテキスト以外での npm install は失敗します(例:prepare": "git rev-parse && git config core.hooksPath .githooks || true")
  • Biome の check はフォーマットと lint を一度に実行します。--no-errors-on-unmatched を指定すると、サポートされているファイルがステージされていない場合に lint-staged が不要な出力をしなくなります
  • Prettier は Biome が対応していないものだけを処理するため、同じファイルをめぐって両者が競合することはありません
  • pre-commit は最初に lint-staged(高速で、ステージ済みファイルのみを対象)を実行し、その後に完全な型チェックとビルドを実行します
  • チームで pre-commit 以上の機能(並列ステップや、lint-staged を使わない glob ごとのランナー)が必要な場合は、次のステップとして lefthook を提案してください。Husky は core.hooksPath ですでにできることに、便利なラッパーを追加するだけです

コメント