この記事は Claude on SonicGarden の記事です。ソニックガーデンのプログラマが、Claude Codeの活用について書いています。#claude_on_sonicgarden
きっかけ
前編で extract-rules によるルール抽出、中編で merge-rules / apply-rules による組織ルールの共有について紹介しました。
ここまででルールの抽出と共有はできるようになったのですが、正直なところルールを書いてもClaude Codeに無視されることが結構あります。ルールファイルが増えるほどその傾向は強くなります。
最初はサブエージェントによるコードレビューにルールの観点も含めてチェックしていたのですが、通常のレビュー観点と混ぜるとルール違反の検出漏れがなかなか減りませんでした。
そこで、ルールチェックに特化したレビュースキルを別で作ることにしました。
作ったもの
/rules-review
これだけで、HEAD~1 を起点にした差分をルールファイルと照合してチェックしてくれます。--base-commit abc1234 で起点を変えることもできます。
仕組み
各ルールファイルの paths: フロントマターで変更ファイルとルールを紐づけます(paths: がないルールは project.md のように全変更ファイルに適用)。カテゴリごとにグルーピングした上で、グループごとに並列でサブエージェントを起動してチェックします。
AIエージェントの開発をしていて感じるのは、LLMに指示を守ってもらうにはできるだけ責務をシンプルにしたほうがいいということです。Claude Codeも本質的には同じはずなので、グループ単位で分けて各エージェントが見るべきルールと差分を絞ることで、レビュー精度は上がると考えています。ルールファイル1つずつに並列エージェントを立てたほうがより精度は上がるかもしれませんが、トークン消費がヤバいことになりそうなので現状はカテゴリ単位にしています。一般的なコード品質やバグの指摘は行わず、ルールファイルに書かれていない問題は報告対象外です。
出力例
違反なし:
All rules compliant
違反あり:
## Rules Compliance Violations
### .claude/rules/frameworks/rails-controllers.md
- **Violated rule**: コントローラーにビジネスロジックを書かない
- **Location**: app/controllers/users_controller.rb:15
- **Description**: createアクション内でユーザーの権限チェックロジックが直接記述されている
- **Suggested fix**: 権限チェックをPunditポリシーに移動する
どのルールの、コードのどこが違反していて、どう直すかまで出してくれます。
4つのスキルの全体ワークフロー
3回にわたって紹介してきた4つのスキルは、こんな感じで循環します。
| スキル | 役割 | 実行タイミング |
|---|---|---|
| extract-rules | ルールの抽出 | プロジェクト開始時、会話後、PRレビュー後 |
| merge-rules | 組織ルールの統合 | ルールが更新されたとき |
| apply-rules | ルールの適用 | 新規プロジェクト、ルール更新後 |
| rules-review | 準拠チェック | コード変更時 |
ちなみに、これらのスキルを統合した dev-workflow というスキルも同じリポジトリにあります。計画 → 実装 → テスト → コードレビュー → ルール更新の流れの中で、完了時に --from-conversation を自動実行してくれるので、ルールが勝手に育っていきます。
おわりに
3回にわたって4つのスキルを紹介しました。
| 記事 | スキル | やること |
|---|---|---|
| 前編 | extract-rules | プロジェクトの流儀を抽出する |
| 中編 | merge-rules + apply-rules | 組織のルールを共有する |
| 後編 | rules-review | ルール準拠をチェックする |
ルールを書いただけではClaude Codeに無視されることが結構あるので、ルールの抽出・共有だけでは片手落ちだったなーというのが正直なところです。rules-review による準拠チェックを組み合わせて、今のところいい感じにルールを守らせることができている感触があります。興味があれば試してみてください。
今回紹介したスキルは以下のリポジトリで公開しています。
hiroro-work/claude-plugins
この記事はZenn/Qiitaにクロスポストしています