この記事は Claude on SonicGarden の記事です。ソニックガーデンのプログラマが、Claude Codeの活用について書いています。#claude_on_sonicgarden
きっかけ
前編で紹介した extract-rules で各プロジェクトのルールを抽出できるようになりました。
せっかく各プロジェクトのルールを抽出できたので、これをいい感じにマージしたらオレ流さらにはオレたち流のルールの完成なのでは?
それを会社全体で共有できればみんながClaude Codeにいい感じのコードを書いてもらえるのでは?と思い、共通ルールを一元管理して配布できるスキルを作りました。
全体像
- extract-rules: 各プロジェクトからルールを抽出(前編)
- merge-rules: 複数プロジェクトのルールを統合して組織共通ルールセットを作成
- apply-rules: 組織共通ルールを個々のプロジェクトに適用
前編で触れた「Principles(.md)とProject-specific patterns(.local.md)の分離」がここで効いてきます。
| ファイル | 役割 | merge-rulesでの扱い |
|---|---|---|
*.md |
ポータブルな原則 | マージ対象 |
*.local.md |
プロジェクト固有パターン | 昇格候補 |
*.examples.md |
コード例 | ルールに追従してマージ |
merge-rules
/merge-rules
設定ファイルにマージ元のプロジェクトを指定しておきます。
# .claude/merge-rules.local.md
---
projects:
- ~/projects/frontend-app
- ~/projects/backend-api
- ~/projects/shared-lib
promote_threshold: 0.5
---
Principlesのマージ
各プロジェクトの ## Principles を集めて統合します。同名の原則はヒント(括弧内のキーワード)を和集合で統合。意味が異なる場合は両方保持してレポートで通知してくれます。
.local.md パターンの昇格
各プロジェクトの .local.md に書かれた「プロジェクト固有」のパターンでも、複数プロジェクトで共通して使われているなら、それはもう組織共通のパターンだよねということで、ポータブルなルールに昇格(promote)させます。
promote_threshold: 0.5 なら、プロジェクトが3つの場合、2つ以上で見られるパターンが昇格対象です。
useAuth() → { user, login, logout }
- プロジェクトA: ✅
- プロジェクトB: ✅
- プロジェクトC: ❌
→ 2/3で閾値超え → ポータブルルールに昇格
昇格されなかったパターンもレポートに出るので、「これは昇格させたほうがよくない?」みたいな判断材料になります。
ちなみに、プロジェクトによって rails-controller.md だったり rails-controllers.md だったりする揺れも自動で正規化してくれます。
apply-rules
/apply-rules https://github.com/org/repo/tree/main/.claude/rules
/apply-rules ~/org-rules/.claude/rules
/apply-rules --dry-run # sourceを設定ファイルで指定済みの場合
GitHub URLまたはローカルパスでソースを指定します。設定ファイル(.claude/apply-rules.local.md)に書いておけば引数なしでも実行できます。
Tech Stack自動検出
Gemfile、package.json などからプロジェクトの技術スタックをベストエフォートで検出して、関連しそうなルールを絞り込みます。判断しきれないもの(未検出のインテグレーション等)は後述のインタラクティブな確認で聞いてきてくれます。
インタラクティブな解決
自動で判断できないところは聞いてきてくれます。
> 以下のインテグレーションルールは検出されませんでした。適用しますか?
> 1. integrations/rails-pundit — 認可ライブラリPunditのルール
> 2. integrations/rails-good-job — ジョブキューGoodJobのルール
>
> Options: all / none / 番号で指定
同名の原則で内容が異なる場合も、組織ルールを採用するか、プロジェクトのを維持するか、両方保持するかを選べます。
.local.md の保護
既存の .local.md の内容は基本的には変更・削除しません。プロジェクト固有のドメイン知識が組織ルールの適用で消えたら困るので。
適用後、extract-rules / merge-rules の規約に沿わないファイルがあれば検出してマイグレーション計画も提案してくれます。
使ってみて
- 今までなんとなくみんなの頭の中にあったオレたち流がルールによって明確になった
- いいコードの方向性は大体一緒だけど、細かい好みや宗派の違いはあるので、そのへんを考慮してルールを取捨選択したほうがみんな幸せになれそう
-
/apply-rulesで新規プロジェクトにもオレたち流ルールをサクッと持ってくれるとはとても便利
ただ、ルールを適用しただけではClaude Codeにルールを無視されることも普通にあります。これは次回の後編で対策します。
おわりに
extract-rules → merge-rules → apply-rules の3つで、ルールの管理が組織レベルで回るようになりました。
次回の後編では、ルールが実際に守られているかをチェックする rules-review について紹介します。
今回紹介したスキルは以下のリポジトリで公開しています。
hiroro-work/claude-plugins
この記事はZenn/Qiitaにクロスポストしています