
AIにコーディング規約を守らせる|指示とチェックの仕込み方
AIに書いてもらったコード、動くのはいいけれど——命名がキャメルケースとスネークケースで混ざる。インデントが違う。importの順番がチームのルールと逆。ログの出し方も、エラーの投げ方も、いつもの書き方と微妙にずれている。 そのたびに手で直して、レビューでも「ここ規約と違うよ」と指摘して……。一つひとつは小さいけれど、毎回積み重なると地味に疲れる。そんな引っかかり、ありますよね。
これはあなたのお願いの仕方が悪いわけでも、AIがわがままなわけでもありません。 AIは、その場の会話で渡された指示は覚えていても、チームの規約を最初から知っているわけではない。だから、何も仕込まなければ「一般的によくある書き方」で返してくる。それがたまたまチームの流儀と違うだけです。
この記事は、AIにコーディング規約を守ってもらうための、指示の仕込み方と、指示に頼りきらないチェックの仕込み方の話です。先に大事なことを言うと——毎回プロンプトで丁寧にお願いするより、規約をAIが読む場所に置き、最後は機械で直す方が、ずっと確実で楽になります。少し長めですが、まず効く所から一緒に見ていきましょう。
結論:AIに規約を守らせるコツは、「指示」と「チェック」を二段構えにすることです。①規約を、その場の会話ではなくAIが毎回読む設定ファイル(各AIツールのルールファイル)に、短く・優先順位をつけて置く。②それでもズレは残る前提で、Formatter(自動整形)とLinter(規約違反の自動検出)を通し、機械的に直せる所は機械に直させる。③人間は、機械で拾えない「意図」の部分だけ見る。指示だけで100%守らせようとせず、指示で減らし、チェックで揃える——この分担が一番ラクで確実です。
大事なのは、「AIに完璧に守らせる」ことをゴールにしないことです。 人間だって規約を全部そらんじて書いているわけではなく、FormatterやLinterに助けられています。AIも同じ土俵に乗せてあげれば、それで十分うまく回ります。
なぜAIは規約を守ってくれないのか

対策の前に、なぜズレるのかを一度だけ整理します。理由が分かると、どこに手を打てばいいかが見えてきます。
- チームの規約を知らない:AIは世の中の一般的なコードを土台に答えます。あなたのチームの「importはこの順」「ログはこの関数で」といったローカルなルールは、渡さなければ知りようがありません。
- 会話の指示は流れていく:チャットの最初に「スネークケースで」と伝えても、やり取りが長くなると前の指示の重みが薄れ、だんだん元の癖に戻ることがあります(トークンが積み上がって文脈が薄まるイメージです)。
- 規約が言葉になっていない:そもそもチームの規約が人の頭の中にあるだけで、明文化されていないことも多い。人間なら空気で合わせられても、AIは書かれていないものは読めません。
- 指示が多すぎて優先順位がない:「あれもこれも」と大量に伝えると、AIはどれを優先すべきか分からず、結局いくつか落とします。
まとめると、原因は「規約が、AIが毎回読める場所に、読める形で置かれていない」ことに尽きます。 逆に言えば、置き場所と書き方を整え、最後に機械で揃える仕組みを足せば、ほとんど解決します。次から順に見ていきます。
指示の仕込み方①——「AIが毎回読む場所」に置く
まず押さえたいのは、規約をその場の会話に書くのではなく、AIが毎回自動で読む場所に置くことです。会話で毎回お願いするのは、忘れやすく、担当者ごとにバラつきます。
多くのAIコーディングツールには、プロジェクトのルールを書いておく専用の場所があります(ツールにより名前は違いますが、リポジトリ直下に置く「ルールファイル」「指示ファイル」の類です)。ここに書いておけば、毎回のプロンプトに自動で効くので、会話で言い忘れても守られやすくなります。
置き場所の考え方は、こう整理できます。
| 置く場所 | 効き方 | 向いている内容 |
|---|---|---|
| ツールのルールファイル(リポジトリ直下) | 毎回自動で効く | チーム共通の恒久ルール。命名・構成・使う/使わないライブラリ |
| その場のプロンプト | その会話だけ効く | 今回だけの事情。「今回はこのファイルの流儀に合わせて」 |
| コードのすぐ近く(既存コードを一緒に渡す) | 例として効く | 言葉で書きにくい「空気」。近い既存コードを見せて合わせさせる |
いちばん効くのはルールファイルですが、それだけに頼らず、近い既存コードを一緒に渡すのも強力です。AIは「言葉のルール」より「実際のお手本」に上手く合わせてくれることが多いからです。既存コードの文脈を渡すコツは既存コードベースにAIを馴染ませる文脈の渡し方にまとめました。
指示の仕込み方②——「短く・優先順位つき」で書く
置き場所が決まったら、次は書き方です。ここでの失敗は、たいてい書きすぎです。規約を全部だらだら並べると、AIはどれが大事か分からず、肝心なところを落とします。
意識したいのは3つです。
- 数を絞る:本当に守ってほしいものだけを、上から順に。細かいスタイル(インデント幅など)は後述のFormatterに任せ、言葉のルールには「機械で直しにくいこと」だけ残すと、ぐっと読みやすくなります。
- 優先順位をつける:「まずこれ、次にこれ」と順番を示す。AIは上に書かれたものを優先しやすいので、外せないルールを上に置きます。
- 理由を一言添える:「ログは
logger経由で(標準出力だと本番で拾えないため)」のように、なぜを短く足すと、AIは似た場面でも応用して守ってくれます。
書き方のイメージはこんな感じです(あくまで型で、中身は各チームに合わせてください)。
# コーディング規約(優先順位順)
1. 命名はスネークケース。関数・変数とも統一する。
2. 外部入力は必ず検証してから使う(未検証のまま処理に渡さない)。
3. ログは logger 経由で出す(print/標準出力は使わない。本番で拾えないため)。
4. 新しいライブラリを足すときは、まず候補だけ挙げて相談する(勝手に追加しない)。
5. エラーは握りつぶさず、呼び出し元が判断できる形で返す。
ポイントは、「スタイル」ではなく「判断」を書くことです。 インデントや空白の入れ方は機械が直せるので、ルールファイルには機械が拾いにくい約束事(設計の流儀、使ってほしくないもの、外部入力の扱いなど)を優先して残します。渡す前提と制約のそろえ方そのものはAIにコードを書かせる前に渡す前提と制約の伝え方が下敷きになります。
チェックの仕込み方——最後は機械で揃える

ここが本題です。どれだけ丁寧に指示しても、AIの出力は毎回わずかにブレます。だから「指示で完璧に守らせる」を目指すと、いつまでも手で直し続けることになります。発想を変えて、ズレは残る前提で、最後に機械で揃える方が圧倒的にラクです。
順番はこうです。
1. Formatter(自動整形)を通す インデント、空白、改行、クォートの種類——こうした見た目のスタイルは、Formatterに一発で揃えさせます。AIがどんな書き方で返してこようが、保存時やコミット前に自動整形が走れば、スタイルの議論そのものが消えます。まずここを入れるだけで、指摘の大半がなくなります。
2. Linter(規約違反の自動検出)を通す 未使用の変数、危ない書き方、命名ルール違反、使ってほしくない関数の呼び出し——こうした「これはダメ」というルールは、Linterに検出させます。AIの出力も人の出力も同じLinterを通せば、誰が書いても同じ基準で引っかかります。チーム独自のルールも、多くのLinterは設定で足せます。
3. CIで自動チェックを走らせる FormatterとLinterを、手元だけでなく、プルリクエスト(変更をまとめてレビューに出す単位)の自動チェックにも組み込みます。こうすると、通っていないコードはそもそもマージできないので、「うっかりチェックを忘れる」がなくなります。人の善意に頼らず、仕組みで守れます。
4. 人間は「機械で拾えない所」だけ見る ここまで来ると、レビューで見るべきはスタイルや規約違反ではなく、設計の意図や妥当性だけになります。「この分岐で本当に合っているか」「この抽象化は妥当か」——AIも機械も判断しづらい、人にしか見えない所に集中できます。レビューで人が見るべき観点はAIにレビューさせてもバグが残る——人が見るべき観点に詳しくまとめています。
この四段を通せば、AIが多少ブレても、本番に入る頃には規約に沿った状態になります。 指示は「ブレを減らす」ため、チェックは「残ったブレを揃える」ため。役割を分けるのがコツです。
それでも守られないルールへの向き合い方
FormatterやLinterで機械化しても、どうしても言葉でしか伝えられないルール(設計の流儀、ドメイン特有の約束)は残ります。これがAIに守られにくいときの手当ても、いくつか持っておくと安心です。
- お手本を一緒に渡す:「規約はこうです」と言葉で説明するより、その規約どおりに書かれた既存コードを1つ見せる方が、AIはよく合わせます。言葉で書きにくい流儀ほど、実例が効きます。
- 会話が長くなったらルールを貼り直す:やり取りが長引くと初期の指示が薄まります。節目でルールをもう一度貼る、あるいは文脈をリセットして仕切り直すと戻ります。長引いたときの立て直しはAIとの修正ループが終わらないときも参考にしてください。
- 守れないルールは、そもそも機械化できないか考える:「毎回言っても守られない」ルールは、Linterのカスタムルールにできないか一度検討します。言葉で頼み続けるより、機械の関所を1つ増やす方が、長い目で見て確実です。
大事なのは、「守られないのはAIのせい」で止めないことです。 守られにくいなら、置き場所・書き方・機械化のどこかに手を打てるサインだと捉えると、前に進めます。
明日からやること(小さく3つ)
全部いっぺんに仕組み化しようとすると重いので、まずこの3つから。
- ルールを3つだけ、ルールファイルに書き出す:完璧な規約集でなくていいので、いちばん毎回ズレる3つを、優先順位順に書いて置く。会話で毎回言う手間が消えます。
- Formatterを1つ入れる:スタイルの指摘が多いなら、まずFormatterを入れて保存時に自動整形。スタイルの議論を今日から機械に渡します。
- お手本コードを1つ添えて頼んでみる:次の依頼で、規約どおりに書けている既存コードを1つ一緒に渡す。言葉の指示より効くのを体感できます。
この3つだけでも、「毎回手で直す」引っかかりがぐっと減ります。 慣れてきたら、LinterやCIへの組み込みを足していけば十分です。
AIに規約を守らせるチェックリスト
依頼を送る前・受け取った後に、さっと確認します。全部に○が要るわけではなく、関係する所だけで十分です。
仕込み(指示)
- 規約を、会話ではなく「AIが毎回読む場所」に置いているか
- ルールは数を絞り、優先順位順に並べているか
- スタイルではなく「判断・約束事」を言葉で書いているか
- 大事なルールに「なぜ」を一言添えているか
- 言葉で伝えにくい流儀は、お手本コードを一緒に渡したか
仕込み(チェック)
- スタイルはFormatterで自動整形しているか
- 規約違反はLinterで自動検出しているか
- FormatterとLinterをCIの自動チェックに組み込んでいるか
- 人間のレビューは「機械で拾えない意図」に絞れているか
- 守られにくいルールを、機械化できないか一度検討したか
この記事のまとめ
AIに規約を守らせるのは、丁寧にお願いし続ける根気くらべではありません。 規約をAIが読む場所に短く置いて(指示)、残るブレは機械で揃える(チェック)。この二段構えにすれば、AIが多少ブレても、本番に入る頃にはちゃんと揃っています。人間は、機械にできない「意図の確認」だけに力を使えます。

一度に完璧な仕組みを作らなくて大丈夫です。 今日ひとつ「よくズレる3つをルールファイルに書く」か「Formatterを入れる」ができたなら、それはもう「毎回手で直す」を減らす確かな一歩です。指示で減らして、チェックで揃える。渡す前提のそろえ方は渡す前提と制約の型、受け取った後の見方はAI生成コードのレビュー・検証チェックリスト。この2つがそろうと、AIコーディングはずいぶん落ち着きます。