.pre-commit-config.yaml

基本情報

項目 内容
ファイルパス .pre-commit-config.yaml
種別 開発ツール設定(pre-commit フック)
適用環境 開発環境(ローカル開発時およびCI)

概要

このファイルは pre-commit フレームワークの設定ファイルであり、scikit-learn プロジェクトにおけるコミット前の自動コード品質チェックを定義している。YAML バリデーション、末尾空白除去、ruff によるリンティング/フォーマット、mypy による型チェック、Cython コードのリント、Prettier によるドキュメント用 CSS/JavaScript フォーマット、codespell によるスペルチェックの7つのフックグループを含む。グローバル除外パターンにより .git/sklearn/externals/asv_benchmarks/env/ を対象外としている。

設計パターン

特定の設計パターンは使用していません。本ファイルは YAML 形式の宣言的設定ファイルであり、プログラムロジックを含まないため設計パターンは適用されない。

主要な構成要素

YAML 設定ファイルであり、クラス・メソッド・関数は存在しないため該当なし。本ファイルはリポジトリ定義(repos)のリストとグローバル除外パターン(exclude)で構成される宣言的設定である。

設定項目一覧

セクション キー 説明 推奨値
(root) exclude ^(.git/\|sklearn/externals/\|asv_benchmarks/env/) グローバル除外パターン -
repo: pre-commit-hooks rev v5.0.0 pre-commit-hooks のバージョン 最新安定版
repo: ruff-pre-commit rev v0.12.2 ruff のバージョン sklearn/_min_dependencies.py と同期
repo: mirrors-mypy rev v1.15.0 mypy のバージョン sklearn/_min_dependencies.py と同期
repo: cython-lint rev v0.21.0 cython-lint のバージョン sklearn/_min_dependencies.py と同期
repo: mirrors-prettier rev v2.7.1 prettier のバージョン -
repo: codespell rev v2.4.1 codespell のバージョン -
ruff-check args ["--fix", "--output-format=full"] 自動修正有効、完全出力形式 -
mypy files sklearn/ 型チェック対象ディレクトリ -
mypy additional_dependencies [pytest==9.1.0] mypy 追加依存 build_tools/update_environments_and_lock_files.py と同期
cython-lint args [--ban-relative-imports] 相対インポート禁止 -
prettier files ^doc/css/styles/\|^doc/js/scripts/ フォーマット対象 -
prettier exclude ^doc/js/scripts/vendor/ ベンダーファイル除外 -
prettier types_or ["css", "javascript"] フォーマット対象ファイル種別 -

環境別差分

キー 開発環境 本番環境 理由
- - - 該当なし。本ファイルは開発・CI 環境でのみ使用され、本番環境では動作しない

セキュリティ考慮

設定項目 現在値 推奨値 リスク
外部リポジトリ参照 6つの外部 GitHub リポジトリ rev を固定(実施済み) サプライチェーン攻撃のリスクがあるが、rev 固定により軽減
mypy additional_dependencies pytest==9.1.0 バージョン固定(実施済み) 依存パッケージのバージョン固定により安全性確保

依存関係

関連先 種別 関連内容
sklearn/_min_dependencies.py 設定同期 ruff, mypy, cython-lint バージョンをこのファイルと同期する必要がある
pyproject.toml 設定連携 codespell の設定本体は pyproject.toml に記載
pyproject.toml [tool.ruff] 設定連携 ruff の詳細ルール設定は pyproject.toml で定義
pyproject.toml [tool.mypy] 設定連携 mypy の詳細設定は pyproject.toml で定義
pyproject.toml [tool.cython-lint] 設定連携 cython-lint の ignore ルールは pyproject.toml で定義
build_tools/update_environments_and_lock_files.py 設定同期 pytest バージョンをこのファイルの mypy additional_dependencies と同期する必要がある
doc/css/styles/ 対象ファイル prettier のフォーマット対象
doc/js/scripts/ 対象ファイル prettier のフォーマット対象(vendor/ 除外)

定数一覧

YAML 設定ファイルであり、プログラム上の定数定義は存在しないため該当なし。

リレーション

Model ではないため該当なし。本ファイルは pre-commit フレームワークの設定ファイルであり、データモデルやリレーション定義を含まない。

オーバーライドメソッド

YAML 設定ファイルであり、クラスの継承やメソッドのオーバーライドは存在しないため該当なし。

データ構造

YAML 設定ファイルであり、プログラム上のプロパティや独自のデータ構造は存在しないため該当なし。ファイル自体は pre-commit フレームワークが定義する YAML スキーマ(exclude, repos[].repo, repos[].rev, repos[].hooks[] 等)に従った宣言的構造である。

技術的負債・既知の問題

種別 内容 影響度 改善案
TODO cython-lint の double-quote-cython-strings フックが未導入(ディレクトリ指定やチェック専用モードの使い勝手改善待ち) 上流の cython-lint で機能が改善され次第、フックを追加する
非推奨 prettier が v2.7.1 に固定されており、メジャーバージョン v3.x 系への更新が行われていない Prettier v3 への移行を検討(CSS/JS フォーマットへの影響を検証の上)

拡張性・保守性

  • 拡張ポイント: 新しいリンター・フォーマッターを追加する場合は repos リストに新たなリポジトリエントリを追加する。既存フックの対象ファイルを変更する場合は各フック定義の files / exclude パターンを編集する
  • 制約事項: ruff のバージョンを変更する際は sklearn/_min_dependencies.py および doc 内の .rst ファイル(ruff== の記載箇所)も同時に更新する必要がある(ファイル内コメントで明示されている)。mypy, cython-lint のバージョンも sklearn/_min_dependencies.py との同期が必要(ファイル内コメントで明示)
  • テスト容易性: pre-commit run --all-files で全フックの動作を確認可能。個別フックは pre-commit run <hook-id> で検証できる

注意点・特記事項

  • 変更時の影響範囲: 全開発者のローカル開発環境および CI の pre-commit チェックに影響する。フックの追加・削除は全コントリビューターに波及する
  • 再起動要否: 再起動不要。pre-commit install で即時反映。バージョン変更時は pre-commit autoupdate または手動更新後に pre-commit clean が推奨される
  • 他の設定との関連: ruff バージョンを更新する際は sklearn/_min_dependencies.py および doc 内の .rst ファイル(ruff== の記載箇所)も同時に更新が必要(ファイル内コメントにて明示)。mypy, cython-lint のバージョンも同様に sklearn/_min_dependencies.py との同期が必要

関連ファイル