ルールファイルは永続的な指示として機能します。一度のリクエストにのみ適用されるチャットプロンプトとは異なり、ルールファイルはエージェントが作業を開始するたびに自動的に読み込まれます。タスクを入力する前から、コーディング規約、アーキテクチャの決定事項、命名規則、制約についてエージェントに伝えることができます。
形式は通常シンプルです。ほとんどのエージェントはMarkdownファイルまたは構造化されたセクションを持つプレーンテキストファイルを想定しています。必須のスキーマはありません。プロジェクトにとって重要なことを記述すれば、エージェントはそれをコードと並行してコンテキストとして読み取ります。
ルールファイルに含めるべき内容
コーディング規約
言語の慣例、命名パターン、フォーマットルール。camelCaseかsnake_caseか、タブかスペースか、どのスタイルガイドに従うかをエージェントに伝えましょう。
アーキテクチャの制約
使用すべきパターン、避けるべきパターン、フォルダ構造。ヘキサゴナルアーキテクチャやフィーチャーベースモジュールなど、特定のアーキテクチャに従っている場合は、ここに明記してください。
ファイル命名規則
ファイル、コンポーネント、テスト、モジュールの命名方法。一貫した命名規則は、ルールファイルが提供できる最も効果的な改善の一つです。
禁止パターン
エージェントが絶対にやってはいけないこと:特定のアンチパターン、非推奨API、使用禁止のライブラリ。明示的な禁止事項は、一般的なアドバイスよりも有用なことが多いです。
テスト要件
テストファイルの配置場所、フレームワークの優先順位、カバレッジの期待値。テストがどこにあり、どのような構造を期待しているかをエージェントに伝えましょう。
コンテキストヒント
最も重要なファイル、エントリーポイント、主要な依存関係。ファイルツリーから推測させるのではなく、エージェントが正しい出発点を見つけられるよう手助けしましょう。
ルールファイルはセキュリティ境界ではない
ルールファイルはガイダンスであり、強制ではありません。エージェントはコンテキストとして読み取りますが、ルールを無視したり、意図と異なる解釈をしたりすることを防ぐ仕組みはありません。「ファイルを絶対に削除しない」とルールファイルに書いても、エージェントがタスク完了のためにファイル削除が最善だと判断すれば、削除する可能性があります。
プロンプトインジェクションにより、この問題はさらに深刻になります。悪意のある依存関係、README、コードコメントにルールファイルを上書きする指示が含まれている場合、エージェントはそちらの注入された指示に従う可能性があります。ルールファイルは、エージェントが読む他のテキストに対する特権を持ちません。コンテキストウィンドウの一部にすぎないのです。
実践的な結論は明確です。危険な動作を防ぐためにルールファイルに頼らないでください。望ましくない変更がコードベースに反映される前にキャッチするにはdiffレビューを使いましょう。エージェントが実行できる操作を制限するにはサンドボックスを使いましょう。出力が基準を満たしているか検証するには自動チェックを使いましょう。ルールファイルはエージェント出力の平均品質を向上させますが、制御メカニズムではありません。
ポータブルな指示 vs ベンダーロックイン形式
AIコーディングツールにはそれぞれ独自の慣例があります。Claude CodeはCLAUDE.mdを、Cursorは.cursorrules を、Windsurfは.windsurfrules を読み取ります。チームが複数のツールを使用している場合、ツールごとに個別のファイルを管理するメンテナンスの負担は、新しいツールが増えるたびに大きくなります。
よりポータブルなアプローチは、プロジェクトの指示を汎用的なMarkdownファイル(PROJECT_RULES.mdやCODING_GUIDELINES.mdなど)に記述し、各ベンダー固有のファイルからそれを参照またはインクルードする方法です。これにより、核となる指示は一箇所にまとまり、ツール固有のファイルは薄いラッパーになります。
ポータビリティの利点は利便性だけではありません。特定のベンダーのモデルだけでなく、どのエージェントにとっても明確な指示を書くことが求められるからです。特定のモデルの癖に依存した指示は脆くなりがちです。プロジェクトを明確に記述した指示は、ツールやモデルのアップデートをまたいでもうまく機能する傾向があります。
ルールファイルでよくある間違い
| 間違い | 問題点 | 対処法 |
|---|---|---|
| ルールファイルが長すぎる | 重要な指示が埋もれ、トークンを無駄に消費する | 500行以内に抑え、最も重要なものを優先する |
| 矛盾するルール | エージェントが相反する指示を受け取る | ルールファイル全体の一貫性を確認する |
| 過度に詳細なフォーマット指定 | ルールがモデルの自然なパターンと競合する | 正確なフォーマットではなく意図を記述する |
| ルールにセキュリティ指示を記載 | ルールではセキュリティを強制できない。エージェントは無視できる | diffレビューと自動チェックを代わりに使用する |
| ルールファイルがそもそもない | エージェントが規約を推測してしまう | 最小限のルールファイルから始めて反復的に改善する |
実践的なルールファイルテンプレート
以下は、プロジェクトに合わせてカスタマイズできる構造化されたテンプレートです。該当するセクションをコピーし、不要なものを削除して、簡潔に保ちましょう。
# Project: [プロジェクト名]
## Overview
このプロジェクトの概要、主な目的、
解決する主要な問題の簡潔な説明。
## Tech Stack
- Language: TypeScript 5.x
- Framework: React 18 with Next.js 14
- Styling: Tailwind CSS
- Testing: Vitest + Testing Library
- Package manager: pnpm
## Conventions
- フックを使った関数コンポーネントを使用。クラスコンポーネントは不可。
- コンポーネント名はPascalCase。ユーティリティ名はcamelCase。
- 1ファイル1コンポーネント。テストはソースファイルの隣に配置。
- default exportではなくnamed exportを使用。
- ネストされた条件分岐よりもearly returnを優先。
## Forbidden Patterns
- `any` 型の使用禁止。`unknown` を使い、型を絞り込む。
- 本番コードでの `console.log` 禁止。loggerを使用する。
- PRに記載なく新しい依存関係を追加しない。
- /generated 内のファイルは変更禁止(自動生成のため)。
## Testing
- テストはソースの隣に配置: `Component.test.tsx`
- テスト実行: `pnpm test`
- 新機能には最低1つのインテグレーションテストが必要。
- 外部APIはモック化し、テスト内で実際に呼び出さない。
## Key Files
- Entry point: `src/app/layout.tsx`
- API routes: `src/app/api/`
- Shared utilities: `src/lib/`
- Database schema: `prisma/schema.prisma`
CodeWingerの位置づけ
CodeWingerはプロジェクトレベルの指示をサポートしており、エージェントのコンテキストに反映されます。ローカルファーストかつBYOKのため、ルールファイルはお使いのマシンに留まり、選択したプロバイダーに直接送信されます。
- プロジェクトレベルの指示はローカルで読み取られ、エージェントのコンテキストに含まれます。
- ローカルファーストアーキテクチャにより、ルールファイルはAPIキーのプロバイダーへのAPI呼び出しの一部としてのみマシンから送信されます。
- BYOKにより、モデルとプロバイダーを自分で選べます。ルールファイルの互換性はIDEベンダーではなくモデルに依存します。
- インラインdiffレビューにより、変更がコードベースに反映される前にエージェントがルールに従ったかを確認できます。
試してみる
CodeWinger Desktop for Windows x64をダウンロード
CodeWinger Desktop 0.3.0は現在無料でご利用いただけます。通常のWindowsユーザーにはsetupインストーラーを推奨しています。
まとめ
ルールファイルは、AIコーディングエージェントの出力を改善する最もシンプルな方法の一つです。作成コストはゼロで、リポジトリ内に保存でき、エージェントの最初の推測を的確にします。しかし、魔法ではありません。何かを強制する力はなく、diffレビュー、テスト、開発者の判断に代わるものでもありません。短く明確なルールファイルを書き、常に最新の状態に保ち、ガバナンスではなくガイダンスとして扱いましょう。
よくある質問
AIコーディングにおけるルールファイルとは何ですか?
プロジェクト内に配置するテキストファイル(CLAUDE.md、.cursorrules など)で、AIエージェントにコーディング規約、パターン、制約などのプロジェクト固有の指示を伝えるものです。
ルールファイルはプロンプトエンジニアリングと同じですか?
関連はありますが異なります。ルールファイルはプロジェクト全体に持続的なコンテキストを提供します。プロンプトエンジニアリングはタスクごとの指示です。ルールファイルはコンテキストエンジニアリングに近い概念です。
ルールファイルでエージェントの低品質なコードを防げますか?
いいえ。ルールファイルはガイダンスであり、強制力はありません。エージェントはルールを無視したり誤解したりする可能性があります。diffレビューこそが本来の品質ゲートです。
CLAUDE.mdと.cursorrules、どちらを使うべきですか?
使用するIDEによります。ポータビリティを重視するなら、どのエージェントでも読める汎用的なMarkdownファイルを使いましょう。可能な限りベンダーロックインのある形式は避けてください。
ルールファイルの適切な長さはどのくらいですか?
500行以内を目安にしてください。短いほど良いです。エージェントの出力品質に最も大きな影響を与える規約や制約に絞りましょう。
CodeWingerはルールファイルに対応していますか?
はい。CodeWingerはプロジェクトレベルの指示を読み込み、エージェントのコンテキストに反映します。ローカルファーストのため、ルールファイルはローカルで読み取られ、選択したBYOKプロバイダーに直接送信されます。