Pre-commit Setup Guide

October 22, 2025 · View on GitHub

🎯 抂芁

tree-sitter-analyzerプロゞェクトでは、パフォヌマンス最適化された包括的なpre-commit hooksを䜿甚しおいたす。修正したファむルのみをチェックするこずで、高速な開発䜓隓ず高品質なコヌドベヌスの䞡立を実珟しおいたす。

⚡ パフォヌマンス最適化

2段階チェック戊略

  1. コミット時高速: 修正したファむルのみをチェック
  2. プッシュ時包括的: より詳现なチェックを実行

🚀 セットアップ

1. Pre-commitのむンストヌル

# 開発䟝存関係をむンストヌル
uv sync --extra dev

# Pre-commit hooksをむンストヌル
uv run pre-commit install

2. 初回実行掚奚

# 党ファむルに察しおpre-commit hooksを実行
uv run pre-commit run --all-files

🔍 実行される品質チェック

📊 ツヌル別実行モヌド詳现

ツヌルコミット時プッシュ時手動実行察象ファむル
black✅-✅修正ファむルのみ
ruff✅-✅修正ファむルのみ
ruff-format✅-✅修正ファむルのみ
isort✅-✅修正ファむルのみ
pyupgrade✅-✅修正ファむルのみ
mypy✅--修正ファむルのみ
mypy-all--✅党ファむル
bandit✅--修正ファむルのみ
bandit (all)--✅党ファむル
pydocstyle-✅✅修正ファむルのみ
flake8-✅✅修正ファむルのみ
safety-✅✅党䟝存関係
quality-check-✅✅党ファむル

コミット時高速 - 修正ファむルのみ

  1. コヌドフォヌマット

    • black: Pythonコヌドの自動フォヌマット
    • ruff-format: 高速なコヌドフォヌマット
  2. 基本リンティング

    • ruff: 高速なPythonリンタヌpyflakes, pycodestyle等を統合
  3. 型チェック最重芁

    • mypy: 静的型チェック修正したファむルのみ
  4. むンポヌト敎理

    • isort: むンポヌト文の自動敎理
  5. セキュリティチェック

    • bandit: セキュリティ脆匱性の怜出修正したファむルのみ
  6. Python珟代化

    • pyupgrade: Python 3.10+の新機胜ぞの自動アップグレヌド
  7. ファむル圢匏チェック

    • YAML, JSON, TOML圢匏の怜蚌
    • 末尟空癜、改行の統䞀
    • 倧きなファむルの怜出

プッシュ時包括的 - より詳现

  1. ドキュメント品質

    • pydocstyle: Docstring品質チェックGoogle圢匏
  2. 高床なリンティング

    • flake8: 远加的なコヌド品質チェック
  3. 䟝存関係脆匱性チェック

    • safety: 既知の脆匱性を持぀パッケヌゞの怜出
  4. カスタム品質チェック

    • check_quality.py: プロゞェクト固有の品質チェック

手動実行党ファむル - 必芁時

  1. 完党型チェック

    • mypy-all: 党ファむルの型チェック
  2. 完党セキュリティチェック

    • bandit (all): 党ファむルのセキュリティチェック

🛠 䜿甚方法

通垞の開発フロヌ

# コヌドを線集
vim tree_sitter_analyzer/some_file.py

# 通垞通りコミット自動的にpre-commit hooksが実行される
git add .
git commit -m "feat: 新機胜を远加"

# プッシュ時にも远加チェックが実行される
git push origin develop

手動実行

修正ファむルのみ高速

# 特定のhookのみ実行
uv run pre-commit run mypy
uv run pre-commit run black

# å…šhookを実行修正ファむルのみ
uv run pre-commit run

# 特定のファむルに察しお実行
uv run pre-commit run --files tree_sitter_analyzer/core.py

党ファむルチェック包括的

# 党ファむルのmypyチェック
uv run pre-commit run mypy-all

# 党ファむルのbanditチェック
uv run pre-commit run bandit --hook-stage manual

# 党おの手動チェックを実行
uv run pre-commit run --hook-stage manual

# å…šhookを党ファむルに察しお実行
uv run pre-commit run --all-files

段階別実行

# コミット時のチェックのみ
uv run pre-commit run --hook-stage pre-commit

# プッシュ時のチェックのみ
uv run pre-commit run --hook-stage pre-push

# 手動チェックのみ
uv run pre-commit run --hook-stage manual

緊急時のスキップ

# 緊急時のみ䜿甚掚奚したせん
git commit -m "hotfix: 緊急修正" --no-verify

🔧 蚭定のカスタマむズ

個別ツヌルの蚭定

  • mypy: pyproject.toml の [tool.mypy] セクション
  • black: pyproject.toml の [tool.black] セクション
  • ruff: pyproject.toml の [tool.ruff] セクション
  • isort: pyproject.toml の [tool.isort] セクション

Pre-commit蚭定

.pre-commit-config.yaml で以䞋をカスタマむズ可胜

# 特定のファむルを陀倖
exclude: ^(tests/|examples/|archived_files/)

# 特定のhookを無効化
# - id: mypy
#   stages: [manual]  # 手動実行のみ

# 倱敗時に即座に停止
fail_fast: true

🚚 トラブルシュヌティング

よくある問題

  1. mypy゚ラヌ

    # 型゚ラヌを修正するか、䞀時的に無芖
    # type: ignore コメントを远加
    
  2. フォヌマット゚ラヌ

    # 自動修正される堎合が倚い
    # 再床コミットを詊行
    git add .
    git commit -m "同じメッセヌゞ"
    
  3. 䟝存関係の問題

    # Pre-commitの再むンストヌル
    uv run pre-commit clean
    uv run pre-commit install
    

パフォヌマンス最適化

# キャッシュをクリア
uv run pre-commit clean

# 特定のhookのみ実行
uv run pre-commit run --hook-stage manual mypy

⚡ パフォヌマンス特城

高速コミット

  • 修正ファむルのみをチェックpass_filenames: true
  • mypyは倉曎されたファむルのみを型チェック
  • 平均コミット時間: 5-15秒埓来の1/3以䞋

包括的プッシュ

  • 重いチェックはプッシュ時に実行
  • CI/CD前に品質を保蚌
  • チヌム党䜓で統䞀された品質基準

📊 品質メトリクス

Pre-commit hooksにより以䞋が保蚌されたす

  • ✅ 型安党性: mypy 100%パス修正ファむル
  • ✅ コヌド品質: ruff, flake8 100%パス
  • ✅ セキュリティ: bandit, safety 100%パス
  • ✅ フォヌマット: black, isort 100%統䞀
  • ✅ ドキュメント: pydocstyle Google圢匏準拠

🎯 利点

  1. 高速開発: 修正ファむルのみチェックで埅機時間最小化
  2. 早期゚ラヌ怜出: コミット前に型゚ラヌを発芋
  3. 䞀貫した品質: チヌム党䜓で同じ基準
  4. 自動修正: 倚くの問題が自動で修正
  5. CI/CD効率化: 事前チェックによりCI時間短瞮
  6. 孊習効果: 品質の高いコヌドの曞き方を孊習

泚意: 初回セットアップ時は党ファむルのチェックに時間がかかる堎合がありたすが、その埌は倉曎されたファむルのみがチェックされるため高速です。