レガシースタイル継承 は何をしますか?
AIコードのスタイルドリフトを防止します。コードベースをスキャンして4つのメタアーキテクチャ次元にわたる暗黙的な規約を抽出し、ユーザーと1対1でコンフリクトを解決しながら、合意事項を強制力のある.ai-style-rules.mdに結晶化します。完全に言語・フレームワーク非依存です。
起動条件
- ユーザーが
/inherit-legacy-styleと入力 - ユーザーがAIを手書きレガシープロジェクトに導入する旨を言及
- ユーザーがAI生成コードの既存プロジェクト規約からの「逸脱」を懸念している
- ユーザーがプロジェクトの暗黙的なコーディングルールを抽出・形式化したい
使用するタイミング
レガシープロジェクトのスタイルを維持し、AIによるスタイルドリフトを防止する必要がある場合に使用します。上記の起動条件も参照してください。
前提条件
- Git(推奨。Git非利用プロジェクトではファイルのタイムスタンプでインクリメンタルモードにフォールバック)
- プロジェクトルートへの読み書きアクセス(
.ai-style-rules.mdおよび必要に応じてCLAUDE.mdを生成します)
ワークフロー
ステップ0 — 自動検出モード
プロジェクトルートに .ai-style-rules.md が存在するかを静かにチェックします:
| ファイルの有無 | モード |
|---|---|
| なし | ブランチA — 初回フルスキャン |
| あり | ブランチB — インクリメンタルスニフ |
モードを1行でアナウンスし、続行します。ユーザーに選択させることは絶対にしないでください。
ブランチA — 初回フルスキャン
1. 規模を測定し、スキャンティアを選択
git ls-files | grep -cE '\.(js|ts|jsx|tsx|vue|py|go|rs|java|kt|rb|php|cs|swift|c|cpp|h)$'
| ティア | ソースファイル数 | 戦略 |
|---|---|---|
| 小 | ≲ 50 | すべてのソースを完全にクローズリード |
| 中 | 50–500 | インフラ層 = 全読み、ビジネス層 = 次元ごとに2~3サンプル |
| 大 | ≳ 500 | 厳格なサンプリング + 予算制限。まず --stat サマリー、次に対象を絞った読み取り |
2. 4つの次元でスキャン
- ファイル構造 — ファイル内の宣言順序(インポート → 型 → メインロジック → ヘルパー → エクスポート)
- 状態と制御フロー — 非同期状態、ページネーション、フラグの命名規則
- インフラストラクチャ — 横断的ユーティリティの配置場所(インターセプター、フォーマッター、ミドルウェア)
- エラーハンドリング — try/catch vs グローバルインターセプター vs Result返却。nullチェック習慣
3. シグナル閾値によるノイズ低減を適用
ユーザーに割り込む前に、シグナル強度を評価:
- 弱いシグナル → 自動抑制: 少数派 <5% かつ 件数 <10 → 多数派のルールを採用し、少数派をDONTsへ
- 強いシグナル → グリル: ほぼ半々の分割、またはコア次元での意味論的分岐
- 小規模プロジェクト例外: ソース数 ≲50 で「3対2」は多数派とはみなさない → グリル対象
4. コンフリクトを1つずつ解決(グリリングプロトコル)
強いシグナルのコンフリクトごとに、正確に1つの質問を4択で提示:
証拠:
pathAはスタイルXを使用、pathBはスタイルYを使用 警告: リスク: 両方を混在させるとプロジェクトスタイルが分裂します 選択:1Xに従う2Yに従う3これは進化なのでルールを更新4新しいルールを提示
ユーザーの回答があるまで中断し、その後次のコンフリクトに進みます。質問を重ねてはいけません。
5. .ai-style-rules.md を生成 — 以下の3つの必須セクションを含む:
- [ゴールデンファイル] — 実際の模範ファイルパスと、それが示す内容の注釈
- [命名・状態制御ルール] — 具体的でチェック可能な規約
- [DONTs] — 絶対に伝播させてはならないアンチパターン
6. 永続的なフックをインストール
ユーザーに適用強度を尋ねます(AskUserQuestion を使用):
| オプション | メカニズム |
|---|---|
| 1 ソフトフック(推奨) | @.ai-style-rules.md 参照をプロジェクトの CLAUDE.md に書き込み |
| 2 ハードフック | ソフトフック + settings.json の `PreToolUse[Write |
| 3 フックなし | ルールファイルを保持。ユーザーが手動で参照 |
ブランチB — インクリメンタルスニフ
- 既存の
.ai-style-rules.mdを読む。コミットフィンガープリントがあればgit diff <last_hash> HEAD --statで差分を特定 - 最近のGit変更を読む(
git log -3 --stat→ 必要に応じて疑わしいファイルを調査) - 巨大な差分(数百ファイル以上)の場合:
--statサマリーのみ + 最大の変更をサンプリング - 新しいコードを記録済みルールと比較 → コンフリクトがあればグリリングプロトコルを実行
.ai-style-rules.mdの末尾に進化ログを追記(既存のルールは絶対に上書きしない)
ターンごとの強制
.ai-style-rules.md がコンテキストにある場合(CLAUDE.md経由でロード)、すべてのコード作成タスクは思考連鎖の中で 遵守宣言 を開始し、従う模範ファイルと回避するDONTsを明示しなければなりません。
仕組み
このスキルは、.ai-style-rules.md の有無に応じて初回実行かインクリメンタル実行かを自動検出します:
- 初回(ブランチA) — プロジェクト規模を測定し、4つのメタアーキテクチャ次元(ファイル構造、状態・制御フロー、インフラストラクチャ、エラーハンドリング)でコードベースをスキャンし、弱いコンフリクトを抑制するシグナル閾値ノイズ低減を適用し、強いシグナルのコンフリクトをユーザーと1対1で解決し、ゴールデンファイル/命名ルール/DONTsを含む
.ai-style-rules.mdを生成し、オプションの強制フックを提供します。 - インクリメンタル(ブランチB) — 既存のルールを読み、最近のGit差分をチェックし、新しいパターンや競合パターンがないか確認し、見つかったコンフリクトに対して1対1のグリリングプロトコルを実行し、既存のルールを上書きせずに進化ログを追記します。
- ターンごとの強制 — CLAUDE.md経由でフックされると、すべてのコード作成タスクは従う模範ファイルと回避するDONTsを明示した遵守宣言で開始されます。
出力仕様
- プロジェクトルートに
.ai-style-rules.md(ヘッダーにコミットフィンガープリントとスケールティアを含む) - 必要に応じて
@.ai-style-rules.md参照を含むCLAUDE.md ### [YYYY-MM-DD] Style Evolution Logエントリとして進化ログを追記
アンチパターン
- 失敗: 規模測定ステップをスキップしないこと — 30ファイルのプロジェクトをサンプリングすると「飢餓」状態に、5000ファイルのリポジトリをフルスキャンすると爆発します
- 失敗: 複数のコンフリクト質問を同時に提示しないこと — グリリングは厳密に1対1です
- 失敗: インクリメンタルモードで古いルールを上書きしないこと — 常に進化ログを追記します
- 失敗: ユーザーに確認せずに「ハードフック」をデフォルトにしないこと — 強制強度はユーザーが決定します
- 失敗: 構文や技術スタックの品質を判断しないこと — このスキルはメタアーキテクチャのみを対象とします
- 失敗: 模範ファイルからバグをコピーしないこと — 構造を再利用し、欠陥は報告します
ベストプラクティス
- スキャン前に、検出されたモード(初回 vs インクリメンタル)とスケールティアを1行でアナウンスする
- 大規模プロジェクトでは、まず
--statサマリーを読み、次に対象を絞ってReadする - シグナル閾値にノイズ処理を任せる — 843対8の命名分割はユーザーに割り込まず自動解決させるべき
- シグナル強度に迷った場合は、質問する方向に傾く
- CLAUDE.mdのソフトフック(
@.ai-style-rules.md)で通常は十分。ユーザーが機械的な強制を望む場合にのみハードフックを使用する
関連スキル
init— コードベースドキュメントを含む新しいCLAUDE.mdを初期化code-review— 差分を正確性とスタイル問題についてレビューsimplify— 再利用と簡略化の機会についてコードをレビュー
使用例
-
初回導入
- ユーザー: 「この古いコードベースにAIを導入するのを手伝って。スタイルは変えないで。」
- アクション: ブランチAフルスキャンを実行 → 規模測定 → 4次元スキャン → コンフリクトグリル →
.ai-style-rules.mdを生成 → フック強度(ソフト/ハード/なし)を提供。
-
チーム変更後のインクリメンタル更新
- ユーザー: 「新しいモジュールを追加した。既存のスタイルルールはそのままにして。」
- アクション: ブランチBインクリメンタルスニフを実行 → Git差分を記録済みルールと比較 → 新しいコンフリクトをグリル → 進化ログを上書きせず追記。
-
CLAUDE.mdによるDONTsの強制
- ユーザー: 「新しいコードがすべてプロジェクトのルールと一貫性を保つようにして。」
- アクション: ソフトフックをインストール →
.ai-style-rules.mdが毎セッションで自動ロード → すべてのコード作成タスクが遵守宣言で開始され、模範ファイルのパターンを再利用し、DONTsを回避。