mcpField
P
prek

prek

github.com/paulnsorensenテスト・品質158 回インストール今日更新
リポジトリ

prek について

リポジトリで prek のコミット前フックを設定・管理するスキルです。プロジェクトの言語を判定してフックを提案し、pre-commit の YAML から prek.toml への移行も扱います。

主な機能

  1. 01リポジトリの目印から言語を判定
  2. 02prek.toml の確認と生成
  3. 03組み込みおよび言語別フックの提案
  4. 04pre-commit YAML からの移行
  5. 05フックステージとファイルフィルターの設定

活用シーン

  1. 01prek.toml がないプロジェクトへのフック追加
  2. 02既存のフック設定の確認や拡張
  3. 03YAML 設定から prek.toml への変換

インストール

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

$npx skills add https://github.com/paulnsorensen/skillz-that-grillz --skill prek

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

詳細

prek

高速でRustを活用したpre-commitフックマネージャーであるprekを導入して設定します。

使用する場面

  • プロジェクトにprek.tomlがなく、pre-commitフックを導入するメリットがある場合
  • 既存のprek.tomlにフックを追加、監査、拡張したい場合
  • .pre-commit-config.yamlからprekのネイティブTOML形式に移行する場合

手順

1. プロジェクトの種類を検出する

リポジトリのルートで、言語を示すファイルを確認します。

マーカーファイル言語/フレームワーク
Cargo.tomlRust
pyproject.toml、setup.py、requirements.txtPython
package.jsonTypeScript/JavaScript
go.modGo
GemfileRuby
*.sh、zsh/、bin/シェル
DockerfileDocker

複数のマーカーがある場合は、複数言語を使うプロジェクトです。検出したすべての言語に対応するフックを提案します。

2. 既存の設定を確認する
  • prek.tomlがある場合は内容を読み、すでに設定されている項目を確認します
  • .pre-commit-config.yamlがある場合は、移行を提案します(prekはYAMLをネイティブに読み込めますが、TOMLがネイティブ形式であり、globパターンなどの機能も利用できます)
3. フックを提案する

フックをカテゴリ別に提示します。追加する前に、各フックの動作を説明します。次のリファレンスを使用してください。

組み込みフック(repo = "builtin")

高速で、オフラインで動作し、セットアップ不要です。常に基礎として提案してください。

フックID動作
trailing-whitespace行末の空白を削除します。引数:--markdown-linebreak-ext=md
end-of-file-fixerファイルの末尾が改行で終わるようにします
check-yamlYAML構文を検証します。引数:--allow-multiple-documents
check-tomlTOML構文を検証します
check-jsonJSON構文を検証します(キーの重複を拒否します)
check-json5JSON5構文を検証します
check-xmlXML構文を検証します
check-merge-conflict解決されていないマージコンフリクトのマーカーを検出します
detect-private-key秘密鍵を誤ってコミットするのを防ぎます
check-added-large-filesサイズの大きいファイルをブロックします。引数:--maxkb=1024
check-case-conflict大文字と小文字だけが異なるファイル名を検出します
check-symlinksシンボリックリンクの参照先が存在するかを検証します
check-executables-have-shebangs実行可能なスクリプトにshebangがあることを確認します
mixed-line-endingLFとCRLFが混在した改行コードを検出します
fix-byte-order-markerUTF-8 BOMを削除します
no-commit-to-branch保護されたブランチへの直接コミットをブロックします
言語別フック(コミュニティリポジトリ)

Rust:

# Local hooks (no external repo needed)
[[repos]]
repo = "local"

[[repos.hooks]]
id = "cargo-fmt"
name = "cargo fmt"
language = "system"
entry = "cargo fmt --"
files = "\\.rs$"
pass_filenames = true

[[repos.hooks]]
id = "cargo-clippy"
name = "cargo clippy"
language = "system"
entry = "cargo clippy --all-targets --all-features -- -D warnings"
files = "\\.rs$"
pass_filenames = false
always_run = true

Python:

# Ruff (linter + formatter)
[[repos]]
repo = "https://github.com/astral-sh/ruff-pre-commit"
rev = "v0.11.6"
hooks = [
  { id = "ruff", args = ["--fix"] },
  { id = "ruff-format" },
]

TypeScript/JavaScript:

[[repos]]
repo = "local"

[[repos.hooks]]
id = "eslint"
name = "eslint"
language = "system"
entry = "npx eslint --fix"
files = "\\.(ts|tsx|js|jsx)$"
pass_filenames = true

[[repos.hooks]]
id = "prettier"
name = "prettier"
language = "system"
entry = "npx prettier --write"
files = "\\.(ts|tsx|js|jsx|json|css|md)$"
pass_filenames = true

Go:

[[repos]]
repo = "local"

[[repos.hooks]]
id = "go-fmt"
name = "go fmt"
language = "system"
entry = "gofmt -w"
files = "\\.go$"
pass_filenames = true

[[repos.hooks]]
id = "go-vet"
name = "go vet"
language = "system"
entry = "go vet ./..."
pass_filenames = false
always_run = true

シェル:

[[repos]]
repo = "https://github.com/shellcheck-py/shellcheck-py"
rev = "a23f6b85d0fdd5bb9d564e2579e678033debbdff"
hooks = [
  { id = "shellcheck" },
]
4. 最新バージョンを確認する

設定を書く前に、コミュニティのフックリポジトリ(ruff-pre-commit、shellcheck-pyなど)で、現在推奨されているバージョンを確認します。利用可能な場合はContext7 MCP、ハーネスのドキュメント検索ツール、または各リポジトリのGitHubリリースページを使ってください。確認手段がない場合は、上記に記載したバージョンを使用します。

5. prek.tomlを生成または拡張する

新規プロジェクト:次の内容を含むprek.tomlを生成します。

  1. 組み込みフック(必ずtrailing-whitespace、end-of-file-fixer、check-merge-conflict、detect-private-key、check-added-large-filesを含めます)
  2. 検出した言語に応じたフック
  3. 各セクションの説明コメント

既存プロジェクト:追加する内容の差分を提示します。すでに存在するフックは重複させないでください。

6. インストールして検証する

設定を書いた後、次を実行します。

prek install
prek run --all-files

prekがインストールされていない場合は、ユーザーにインストール方法(cargo install prekまたはbrew install prek)を伝え、packages.yamlがある場合はそこにも追加します。

高度なオプション

ステージ別フック

テストや完全なビルドなど、時間のかかるチェックはpre-commitではなくpre-pushに設定します。

[[repos.hooks]]
id = "pytest"
name = "Run tests"
language = "system"
entry = "pytest -x"
pass_filenames = false
always_run = true
stages = ["pre-push"]
priority = 100
グローバルフィルター

ベンダー提供コードや生成コードを、すべてのフックの対象外にします。

exclude = "^(vendor/|generated/|node_modules/)"
globパターン(prek専用)

Prekでは正規表現の代わりにglobパターンを使用できます(上流のpre-commitとは互換性がありません)。

files = { glob = "src/**/*.py" }
exclude = { glob = ["vendor/**", "dist/**"] }

pre-commit からの移行

.pre-commit-config.yaml がある場合:

  1. prek は YAML をネイティブに読み取るため、既存の設定をそのまま使えます
  2. prek 専用機能(グロブパターン、repo: builtin)を利用できるよう、prek.toml への変換を提案します
  3. 対応するフックでは、repo: https://github.com/pre-commit/pre-commit-hooks を repo: builtin に置き換えます

対応しないこと

  • CI パイプライン、GitHub Actions、その他の CI フックシステムの設定
  • husky、lint-staged、pre-commit(Python)の設定の管理
  • ユーザーの確認なしに既存のフックを削除すること
  • .pre-commit-config.yaml の直接変更 — 生成するのは prek.toml のみです

注意点

  • Context7 を利用できない場合があります — フックの推奨にはトレーニングデータを使用します
  • 自動修正フックによってすべてが再フォーマットされると、初回実行時に prek run --all-files が失敗する場合があります
  • prek.toml のリビジョン固定は古くなるため、定期的な更新を推奨します
  • prek install には .git/hooks/ への書き込み権限が必要です — フックを共有するワークツリーでは失敗します

コメント