AI生成コードをそのまま信じない:個人開発で最低限見るべきレビュー観点チェックリスト
Copilot、ChatGPT、Claude Codeに書かせたコードを「動いたからOK」で終わらせず、個人開発でも最低限の品質・安全性・保守性を確認できるレビュー手順に落とし込む記事です。
📌 AI生成コードレビューとは何か——「優秀な新人の成果物」を受け取る感覚
AI生成コードレビューを一言で言えば、AIが出したコードを、人間が要件・安全性・保守性の観点で受け入れてよいか判断する作業です。
日常の例えで言うなら、めちゃくちゃ手が速い新人エンジニアが「できました!」と持ってきたプルリクを見る感覚に近いです。たしかに動く。たしかに速い。けれど、なぜその実装にしたのか、例外時にどうなるのか、認証まわりをうっかり素通りしていないかは、レビューしないと分かりません。
AI生成コードは、次のようなことを高速化してくれます。
- ボイラープレートコード(毎回似た形になる定型コード)の作成
- 関数やコンポーネントのたたき台作成
- テストケースの案出し
- リファクタリング候補の提示
- エラー原因の仮説出し
ただし、ここで大事なのは「AIは速いが、責任者ではない」という点です。GitHub Copilotの公式ドキュメントでも、Copilot code reviewは人間のレビューを置き換えるものではなく補助として使うべきで、生成されたフィードバックやコードは確認・テストする必要があると説明されています。さらに、Copilotのコード提案には構文・意味の誤りやセキュリティ上の問題が含まれる可能性があるとも明記されています。
つまり、AIはペアプロ相手としては優秀ですが、最終承認者としてはまだ椅子に座らせない方がいい。椅子を渡すなら、せめて非常停止ボタンをこちらが握っておきましょう。
💡 動機:なぜ個人開発ほどレビューが雑になりやすいのか
個人開発では、レビューが自然に消えます。チーム開発ならプルリクを誰かが見ますが、個人開発では「作者」「レビュアー」「リリース責任者」が全部自分です。冷静に考えるとワンオペ居酒屋より忙しい状態です。
そこにAIが入ると、さらに危険な誘惑が生まれます。
「動いた」
「見た目もそれっぽい」
「エラーも出ていない」
「じゃあコミットで」
この流れ、気持ちは分かります。筆者も小さなHTMLツールを作るとき、AIが一発でそれっぽいUIを出してくると、つい勝利のファンファーレを鳴らしたくなります。しかし、実際に怖いのは「動かないコード」ではなく、普段は動くが、特定条件で壊れるコードです。
たとえば、入力が空のときだけ例外になる。日本語ファイル名で保存できない。ブラウザのLocalStorage(ブラウザ内に小さなデータを保存する仕組み)に機密情報をそのまま置く。APIキーをフロントエンドに埋め込む。こういう問題は、デモでは見えません。むしろデモが成功するからこそ、気づきにくくなります。
OpenAIのヘルプでも、言語モデルは役に立つ一方で、誤った情報を自信ありげに出すことがあり、重要な情報は信頼できる情報源で検証するよう案内されています。コードでも同じです。AIの説明が流暢でも、実装が正しいとは限りません。
🧪 仮説:レビュー観点を固定すれば、AI生成コードはかなり安全に使える
ここで立てたい仮説はシンプルです。AI生成コードの危険性は、才能や経験だけでなく、確認観点を固定することでかなり下げられるのではないか。
レビューが難しい理由は、能力不足だけではありません。毎回ゼロから「何を見ようかな」と考えるから疲れるのです。買い物に行くたびに献立から考えるとしんどいのと同じで、レビューもチェックリスト化した方が続きます。
特に個人開発では、巨大なレビュープロセスは続きません。セキュリティ部門のような重厚なゲートを作っても、翌日には面倒になってスキップします。必要なのは、毎回3〜10分で回せる「小さな関門」です。
そこでこの記事では、AI生成コードを受け入れる前に見る観点を、次の5つに絞ります。
この5つを毎回見るだけで、「AIが書いたから怖い」から「AIが書いたので、ここを重点的に見る」へ切り替えられます。
🔍 検証:最低限見るべき5つのレビュー観点
ここからは実際のチェックリストです。ポイントは、AIの出力を人格として信じるのではなく、差分として見ることです。友達としては信じても、main ブランチには無審査で入れない。友情とマージ権限は別物です。
| 観点 | 見ること | AI生成コードで起きやすい問題 | 最低限の確認方法 |
|---|---|---|---|
| 要件 | 目的・入力・出力・制約に合っているか | 頼んでいない機能を勝手に足す、前提を取り違える | 仕様メモと差分を1行ずつ照合する |
| 差分 | 変更範囲が必要最小限か | 無関係なリファクタリング、命名変更、CSS崩れ | `git diff`で変更ファイルと行数を見る |
| 安全性 | 入力検証、認証、権限、秘密情報の扱い | APIキー露出、XSS、過剰な権限、出力の丸飲み | 外部入力が入る場所を検索し、表示・保存・実行経路を見る |
| テスト | 正常系・異常系・境界値で動くか | デモ入力だけ成功し、空値・長文・特殊文字で壊れる | 最低3パターンを手動または自動テストする |
| 保守性 | 半年後の自分が読めるか | 巨大関数、謎の抽象化、コメントと実装の不一致 | 関数名・責務・コメントを声に出して説明できるか確認する |
✅ 観点1:要件に合っているか
AIは親切です。親切すぎて、頼んでいないことまでやります。ここが最初の罠です。
たとえば「CSVを読み込んで表に表示して」と頼んだだけなのに、AIが勝手にグラフ表示、検索、エクスポート、ダークモードまで足すことがあります。見た目は豪華になりますが、機能が増えるほどバグの入口も増えます。小さな個人開発では、豪華な未完成品より、地味な完成品の方が価値があります。
確認することは単純です。
- 入力は何か
- 出力は何か
- どの環境で動く必要があるか
- やらないことは何か
- 既存機能を壊していないか
特に「やらないこと」は重要です。AIに依頼するときは、実装してほしいことだけでなく、「今回はログイン機能は追加しない」「既存CSSのクラス名は変更しない」「外部ライブラリは増やさない」のように制約を書くと、レビューも楽になります。
✅ 観点2:差分が必要最小限か
AI生成コードで意外と怖いのが、差分の膨張です。1つのバグ修正を頼んだのに、ファイル全体が整形され、ついでに命名が変わり、なぜかボタンの色まで変わる。本人は善意です。善意の台風です。
まず見るべきは git diff です。差分(変更された行の一覧)は、レビューにおける防犯カメラの映像です。ここを見ずに動作確認だけで済ませると、「何が変わったか分からないけど動いた」という危険な状態になります。
個人開発なら、次の基準で止めるとよいです。
- 1つの依頼で複数の目的が混ざっている
- 触る必要のないファイルが変わっている
- 整形だけの変更と機能変更が混ざっている
- 既存のIDやクラス名が理由なく変わっている
- 生成されたコメントが実装とズレている
この時点で怪しければ、AIに「今回の目的に必要な最小差分だけに戻して」と頼み直します。レビューとは、AIを叱る場ではなく、スコープを戻す場です。
✅ 観点3:安全性——入力・出力・秘密情報を疑う
安全性の確認では、AIが作ったコードを「知らない人が触るフォーム」として眺めます。つまり、善良な自分だけが使う前提を一度捨てます。
OWASPのLLM向けTop 10では、プロンプトインジェクション(入力でLLMの振る舞いを意図しない方向へ誘導する攻撃)や、LLM出力を検証せず下流処理に渡すことによる問題が挙げられています。これはAIアプリだけの話に見えますが、個人開発のAI生成コードにも通じます。外部入力をそのままHTMLに差し込む、AIの提案したコマンドをそのまま実行する、生成されたSQLを確認せず使う——どれも「出力の丸飲み」です。
最低限、次の場所は疑ってください。
innerHTMLにユーザー入力を入れていないか- APIキーやトークンをフロントエンドに直書きしていないか
- 認証が必要な処理を画面表示だけで隠していないか
- ファイルパスやURLを外部入力からそのまま組み立てていないか
- AIが提案した外部ライブラリの必要性を説明できるか
ここでいう「説明できる」は、完璧なセキュリティ専門家になるという意味ではありません。「なぜこの入力を検証するのか」「なぜこの値を保存してよいのか」を、未来の自分に説明できる程度で十分です。説明できない秘密情報は、だいたい置き場所を間違えています。
✅ 観点4:正常系だけでなく、異常系と境界値を見る
AI生成コードは、サンプル入力に対しては気持ちよく動くことが多いです。問題は、サンプル入力以外です。
テスト(期待した動きを確認する作業)は、料理で言えば味見です。見た目がカレーでも、砂糖と塩を間違えていたら食卓に出す前に気づきたい。コードも同じで、画面が出ただけでは完成ではありません。
個人開発で最低限試したいのは、この3種類です。
- 正常系:普通の入力で期待通り動くか
- 異常系:空欄、未選択、存在しないファイルなどで壊れないか
- 境界値:長文、大きな数、小さな数、特殊文字、日本語などで崩れないか
たとえばメモアプリなら、短いメモだけでなく、空のメモ、長文メモ、絵文字入りメモ、改行だらけのメモを試します。CSVツールなら、空ファイル、列数が違うファイル、日本語ヘッダー、カンマを含む値を試します。
テストコードを書けるなら理想ですが、毎回完璧な自動テストを作る必要はありません。まずは「最低3パターンを手で試す」だけでも、動いた詐欺をかなり減らせます。
✅ 観点5:半年後の自分が読めるか
個人開発で最も手強いレビュアーは、半年後の自分です。しかも彼は容赦ありません。「なんでこんな実装にしたの?」と過去の自分に詰め寄ってきます。過去の自分は不在です。裁判はだいたい負けます。
保守性(あとから直しやすい性質)を見るときは、次を確認します。
- 1つの関数が複数の責務を持ちすぎていないか
- 変数名や関数名が役割を表しているか
- コメントが「何をしているか」ではなく「なぜそうしたか」を補足しているか
- 似た処理がコピペで増殖していないか
- エラー時の表示やログが、原因調査に役立つか
AIは、一見きれいなコードを書くことがあります。しかし、きれいに見えることと、直しやすいことは別です。特に抽象化は要注意です。小さなツールに巨大な設計パターンを持ち込むと、棚を買うために倉庫を建てるような状態になります。
🔥 ハマりポイント:AI生成コードレビューでやりがちな3つの過ち
チェックリストがあっても、実際の作業ではつい楽な方に流れます。ここでは、個人開発で特に起きやすい失敗を3つに絞ります。
その1:「動いた」を「正しい」と勘違いする
画面が表示されると、人間は安心します。エラーが出ないと、さらに安心します。しかし、これは「玄関のドアが開いた」くらいの確認であって、家全体の耐震チェックではありません。
症状としては、デモ用の入力だけで確認してマージしてしまうことです。原因は、AIが作ったコードの完成度が見た目では高く見えること。対処法は、正常系・異常系・境界値の3パターンをレビュー項目に固定することです。
その2:AIの説明をそのまま信じる
AIは説明も上手です。むしろ、コードより説明の方が上手いことすらあります。ここが怖いところです。
OpenAIも、モデルは自信ありげでも誤ることがあるため、重要な情報は確認するよう案内しています。GitHub Copilotの公式ドキュメントも、Copilotのレビューコメントには存在しない問題を指摘する「hallucination」のリスクがあると説明しています。
症状は、「AIがこの修正で解決すると言ったからOK」と判断することです。原因は、説明文の流暢さを根拠と勘違いすること。対処法は、説明ではなく差分・テスト・ログで確認することです。言葉より証拠。これはコードレビュー界の健康標語です。
その3:セキュリティを後回しにする
個人開発では「自分しか使わないから大丈夫」と思いがちです。しかし、GitHub Pagesで公開したり、URLを共有したり、ブラウザにデータを保存したりする時点で、考えるべき範囲は広がります。
症状は、APIキーの直書き、入力値の未検証、外部ライブラリの安易な追加です。原因は、機能完成を急ぐあまり「誰が、何を入力し、どこに保存されるか」を見ないこと。対処法は、入力・出力・保存・外部通信の4点だけ先に確認することです。
OWASPのLLM Top 10が示すように、AI関連システムでは入力や出力の扱いがセキュリティ上の重要ポイントになります。AI生成コードを使う場合も、「出てきたものをそのまま信じない」という姿勢は共通です。
🚀 今日から取り込むには:3分レビュー用チェックリスト
ここまで読んで「分かった、でも毎回全部見るのは重い」と感じた人もいるはずです。その感覚は正しいです。重すぎるチェックリストは、筋トレ初日に100kgを担ぐようなものです。続きません。
まずは、AI生成コードをコミットする前に、次の3分チェックだけ回してください。
## AI生成コード 3分レビュー
### 1. 要件
- [ ] 今回の目的を1文で説明できる
- [ ] 頼んでいない機能が増えていない
- [ ] 既存機能を壊していない
### 2. 差分
- [ ] `git diff`で変更ファイルを確認した
- [ ] 無関係な整形・命名変更が混ざっていない
- [ ] 変更理由を説明できない行がない
### 3. 安全性
- [ ] APIキー・トークン・個人情報を直書きしていない
- [ ] ユーザー入力をそのままHTML・SQL・コマンドに渡していない
- [ ] 外部ライブラリを追加した理由を説明できる
### 4. テスト
- [ ] 普通の入力で動いた
- [ ] 空値・未選択・存在しない値で壊れない
- [ ] 長文・日本語・特殊文字など境界値を試した
### 5. 保守性
- [ ] 半年後の自分が関数名と変数名を読んで意味を追える
- [ ] コメントは「なぜ」を補足している
- [ ] 巨大関数やコピペ増殖を見つけたら分割を検討した
このチェックリストの狙いは、完璧な品質保証ではありません。目的は「危険な見落としを減らすこと」です。NISTのAI Risk Management Frameworkも、AIの信頼性には設計・開発・利用・評価にリスク管理を組み込む考え方を示しています。個人開発でも、毎回の小さなレビューはそのミニチュア版だと考えると分かりやすいです。
🔄 AIレビューと人間レビューの使い分け
AIにコードを書かせたあと、AIにレビューさせるのは有効です。ただし、それは「別の人間に見てもらった」のではなく、「別角度の静的チェックを増やした」くらいに考えるのが安全です。
| レビュー方法 | 得意なこと | 苦手なこと | 個人開発での使いどころ |
|---|---|---|---|
| AIレビュー | タイポ、単純なバグ候補、テスト観点の提案 | プロダクト固有の意図、隠れた要件、責任判断 | コミット前の一次チェック |
| 自分の手動レビュー | 目的との整合、使い勝手、公開してよいかの判断 | 思い込み、疲労、見慣れたコードの見落とし | 最終判断とスコープ確認 |
| 自動テスト・Lint | 再現性のある検査、形式・ルール違反の検出 | 仕様そのものの妥当性、UIの気持ちよさ | 繰り返し確認する土台 |
おすすめは、AIに次のように頼むことです。
以下の差分をレビューしてください。
観点は「要件とのズレ」「セキュリティ」「異常系」「保守性」に限定してください。
推測で断言せず、問題がある行と理由をセットで挙げてください。
修正案は、既存仕様を変えない最小差分にしてください。
このプロンプトのポイントは、観点を限定することです。「レビューして」だけだと、AIは広く浅く見ます。レビュー観点を絞ると、AIの出力もレビューしやすくなります。
📊 結果:個人開発では「全部疑う」より「入口を固定する」が効く
この記事の結論は、AI生成コードを使うな、ではありません。むしろ逆です。使うなら、受け入れ手順を固定した方が安心して速度を出せます。
GitHub Copilotの公式ドキュメントが示すように、AIによるコードレビューやコード提案には限界があります。OWASPのLLMセキュリティ資料が示すように、AIシステムでは入力や出力をどう扱うかが重要です。OpenAIの案内が示すように、モデルの回答は有用でも常に正しいとは限りません。NISTのAIリスク管理の考え方が示すように、信頼性は「使ってから祈る」ものではなく、設計・確認・運用に組み込むものです。
個人開発で現実的なのは、巨大な品質保証プロセスではなく、次の小さな型です。
- AIに実装させる前に、目的と制約を書く
- 生成後に
git diffを見る - 入力・出力・秘密情報を確認する
- 正常系・異常系・境界値を試す
- 半年後の自分が読める形に整える
これだけでも、「AIが書いた謎コードをそのまま信じる」状態からは抜け出せます。
🧭 考察:AI時代のレビュー力は「疑う力」ではなく「受け入れ条件を決める力」
AI生成コードのレビューというと、つい「AIを疑え」という話になりがちです。もちろん疑うことは大事です。しかし、疑うだけでは疲れます。毎回すべてを疑っていたら、開発速度はAI導入前より落ちます。これは本末転倒です。
本当に必要なのは、受け入れ条件を決める力です。
- どこまで動けば今回の目的を満たすのか
- どの入力は必ず試すのか
- どの種類の変更は許可しないのか
- どの情報は絶対にコードへ埋め込まないのか
- どの複雑さを超えたら分割するのか
AIは、この条件を勝手には決めてくれません。決めるのは開発者です。ここに人間の仕事が残ります。コードを書く量は減っても、判断する責任は消えません。
逆に言えば、この判断基準さえ持てば、AIはかなり頼れる相棒になります。AIに実装を任せ、人間が受け入れ条件を握る。この分担が、個人開発ではいちばん現実的だと考えています。
✅ まとめ
AI生成コードは、個人開発の速度を大きく上げてくれます。ただし、「生成されたコード=完成品」と見なすと、要件ズレ、余計な差分、セキュリティ不備、境界値バグ、保守不能な実装を抱え込みやすくなります。
この記事で紹介した最低限のレビュー観点は、次の5つです。
- 要件に合っているか
- 差分が必要最小限か
- 入力・出力・秘密情報の扱いが安全か
- 正常系・異常系・境界値を試したか
- 半年後の自分が読めるか
これを読んだあなたは、AIにコードを書かせたあと、「なんとなく動いたからOK」ではなく、3分レビューで受け入れ可否を判断できるようになります。AIを信じるか疑うかではなく、AIの成果物をレビュー待ちの差分として扱う。ここから、個人開発のAI活用はかなり安定します。
参考文献
- GitHub Docs, Responsible use of GitHub Copilot code review
- OWASP Foundation, OWASP Top 10 for Large Language Model Applications
- NIST, AI Risk Management Framework
- NIST AIRC, AI Risks and Trustworthiness
- OpenAI Help Center, ChatGPT can be helpful—but it’s not always right
Rui Software