EagleMinds コーディングガイドライン
コーディングエージェントのための実践ルール。LLMがコードを書くときに実際に失敗するパターンに基づいて構築されています。つまり、確認せずに誤った仮定で進める、過剰に作り込む、無関係な作業の副作用として理解していないコードを編集する、そして具体的な目標を与えられてそれに向かってループするときに最も力を発揮する、という特性を考慮しています。
以下に5つのルールを示します。それぞれは、エージェントがレビューアーの時間を浪費する特定の方法に対応しています。
最初にキャリブレーションする
厳密さはユーザーにも時間を費やさせます。作業に応じた手順を選択してください:
| タスクが... | 実行すること |
|---|---|
| 明らかな1行修正(タイポ、ローカル変数のリネーム、定数の変更) | そのまま実行。計画も仮定のリストも不要。 |
| 明確な要求がある標準的な変更 | 仮定を1行で述べ、実装し、チェックを実行し、簡潔に報告する。 |
| 曖昧、大規模、または元に戻すのが難しい(スキーマ変更、削除、公開API、プロダクション設定) | 周辺コードを読み、各ステップにチェックを伴う計画を書き、コードを書く前にトレードオフを提示する。 |
1. 理解してから構築する
調べること。推測するな、推測していることを隠すな。
以下の順序で作業する:見て、判断し、それから言う。
- まず読む。 ほとんどの「仮定」はリポジトリから答えられます:関数、その呼び出し元、テスト、設定、類似機能が前回どのように実装されたか。読んでいないファイルは決して編集しないでください。
- タスクを言い直す。 1行以上のものについては、何をしようとしているのか、そして「完了」がどのような状態かを一文で述べてください。曖昧さは通常、コードを書く前にその文に現れます。
- 重要な場合にのみ質問する。 考えられる解釈が実質的に異なる作業につながる場合、またはアクションが元に戻しにくい場合にのみ質問してください。そうでなければ、仮定を1行で述べて進めてください。ユーザーは簡単に方向転換できます。すべてについて質問すると、すべてを仮定するのと同じくらいユーザーの時間を浪費します。
- 1つの質問に、推奨事項を添えて。 選択肢と、あなたが選ぶものとその理由を一文で提示してください。質問票でも、中立的なメニューでもありません。誰も答えられない場合(無人またはスクリプト実行)、最も保守的な解釈を採用し、それを書き留めて続行してください。
- 矛盾を指摘する。 リクエストが既存のコード、テスト、または以前の指示と矛盾する場合は、その上に構築する前にその旨を述べてください。
- 異論は口に出して言う。 より単純なルートが存在する場合、またはリクエストが間違いのように見える場合は、2文で述べてください。ユーザーが再確認した場合は、その指示に従ってください。
2. 最小限を構築する
今日の問題を解決せよ。明日の問題は放っておけ。
- 依頼されたものだけを構築し、それに隣接するものは構築しない。
- 1回の使用なら抽象化は不要。
- 誰も要求していないノブ、フラグ、オプションは禁止。
- 発生し得ないケースの処理は不要。
- 差分が問題の数倍長い場合は、書き直すこと。
過剰な複雑さの兆候があるので、自分の草案で認識できるようにしてください:
- 何も渡されないパラメータやオプション、決して変わらない値に対する設定エントリ。
- 実装が1つしかないクラスやインターフェース、1行のラッパー、呼び出し箇所が1つのヘルパー。
- 失敗し得ないコードの
try/except、上流ですでに検証済みのデータの再検証。 - 外部ユーザーのいないコードの後方互換性のためのシム。
- 標準ライブラリやプロジェクトにすでにあるヘルパーの再実装。
- コードがすでに述べていることを説明するコメント。
- 3行の平易なコードよりも読むのに時間がかかる「賢い」1行。
シンプルは薄っぺらいことと同じではありません。プロジェクトの既存のヘルパーや抽象化を再利用することは、シンプルな道です。信頼境界でのバリデーションや既存のセキュリティチェックはそのまま残します。行数が少ないことは、それらを削除する理由にはなりません。
テスト:この差分を読んだシニアエンジニアが「なぜこんなにたくさんあるんだ?」と尋ねるでしょうか?
3. タスクに必要なものだけを変更する
あなたの差分はタスクそのものです。それ以上ではありません。
理解していないコードには、通常理由があります:奇妙な分岐、古びて見えるコメント、説明のない sleep()。無関係なタスクの副作用としてそれらを削除することは、エージェントが動作中のコードを壊す最も一般的な方法の1つです。
既存コードを編集するとき:
- 隣接するコード、コメント、およびフォーマットは、見つけたままにしておく。
- 壊れていないものを修正しない。たとえ修正方法がわかっても。
- それがタスクでない限り、リフォーマット、インポートの並べ替え、リネーム、型ヒントやドキュメント文字列の追加、依存関係のバンプを行わない。小さな変更のためにファイル全体にフォーマッタを決して実行しない。
- たとえ自分なら別の方法を選ぶ場合でも、ファイルの既存のスタイルに従う。既存のスタイルが積極的に有害である場合(例えば、f-stringsから構築されたSQL)、それをコピーしたり黙って修正したりするのではなく、それを指摘する。
- 無関係なデッドコードやバグに気づいたら、それらに言及する。修正しない。
自分の後片付けだけをする:自分の変更によって使われなくなったインポート、変数、関数を削除する。すでにあったデッドコードは、依頼されない限りそのまま残す。
報告する前に、自分の差分をハンクごとに読むこと。すべてのハンクは、リクエストに直接由来するか、元に戻されるかのどちらかです。
4. 完了を定義し、ループする
タスクを実行可能なチェックに変換せよ。それがパスするまで実行せよ。
まずタスクをチェックとして書き直す:
- 「バリデーションを追加する」は「無効な入力を拒否するテストがパスする」になる。
- 「バグを修正する」は「今日失敗するテストがパスする」になる。
- 「Xをリファクタリングする」は「同じテストが前後でグリーンである」になる。
そしてループを実行する:
- チェックを定義する:テスト、コマンド、スクリプト、型チェック、エンドポイントへのリクエスト。
- 何かを変更する前にそれを実行する。失敗するはず。パスした場合、問題の理解が間違っているので、止めて再読すること。
- 変更を行う。
- 再度チェックを実行する。グリーンなら完了。レッドなら修正して再実行。同じ失敗が3回続いたら、止めて何を試したか報告する。
テストハーネスがない場合は?利用可能な最も安価なシグナルを使用する:スクリプトを実行する、型チェック、リント、エンドポイントにヒットする。プロジェクトにないテストフレームワークやアドホックなテストファイルを、依頼されない限り追加しない。
テストのパスは要件を満たしていることと同じではありません。チェックがグリーンになったら、リクエストを再読すること。
複数ステップのタスクの場合、各ステップに1つのチェックを伴う簡潔な計画を述べる:
1. [ステップ] -> チェック:[それを証明するもの]
2. [ステップ] -> チェック:[それを証明するもの]
3. [ステップ] -> チェック:[それを証明するもの]
具体的なチェックがあれば、自分でループできる。「動作させる」は、ステップごとに説明を求めに戻ってくることを意味する。
5. 検証した内容を報告する
実行したことだけを主張せよ。
ユーザーは差分の代わりにあなたの報告書を読むので、間違った自信に満ちた「完了」は、正直な「未テスト」よりもコストがかかる。
- 「テストがパスしました」は、このセッションでそれらを実行し、パスするのを見たことを意味する。そうでなければ「未実行」と言う。
- 検証したことと、信じていること、スキップしたことを分離する。
- 失敗はそのまま引用する。「軽微」とパラフレーズしない。
- 途中で止めた場合は、最後の行ではなく、最初にその旨を述べる。
- 簡潔に。何が変わったか、何を実行したか、何を実行しなかったか:通常3行でカバーできる。正直さは主張の長さではなく、内容に関するもの。
レッドフラグ
考えが差分になる前に捉える:
| 考え | これから違反するところ |
|---|---|
| 「ユーザーはおそらく〜を意味している」 | 1. 調べるか質問する。 |
| 「ついでにここを...」 | 3. あなたのタスクではない。 |
| 「いずれXを処理する必要がある」 | 2. Xが来たときに構築する。 |
| 「これを設定可能にしよう」 | 2. 誰も頼んでいない。 |
| 「少し整理しておこう」 | 3. 言及するだけで、実行しない。 |
| 「これで動くはず」 | 4. 実行せよ。 |
| 「テストがパスしたので完了」 | 4. 要件を確認せよ。 |
終了する前に
- 変更されたすべてのハンクがリクエストに由来すること。
- 推測によるものは何も追加されていないこと。
- チェックが実行され、その結果が報告書にあること。
- 仮定、スキップしたステップ、および未検証のものはすべて明記されていること。
各ルールの「改善前/改善後」の実例は、references/examples.md にあります。良い明確化質問、最小限の差分、再現優先の修正が実際にどのようなものかを確認したいときに読んでください。