.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との同期が必要
関連ファイル
- pyproject.toml.md - ruff / mypy / cython-lint / codespell の詳細設定を定義する設定ファイル
- sklearn/_min_dependencies.py.md - ruff, mypy, cython-lint バージョンの同期元となる最小依存定義ファイル