安全かつ効果的にAIでコーディングする方法

同僚に頼むように指示を出し、レビュアーの視点で検証する。デバッグ、新規実装、テスト、レビュー用プロンプトと確認ポイントを解説。

読了目安 9 分更新日

Glass blocks connected by glowing lines with small gears

AIチャットはプログラミングにおいて非常に有用です。不慣れなコードの解説、エラー原因の特定、ボイラープレートの作成、テストコードの雛形作り、新しい言語やライブラリの学習などに役立ちます。一方で、もっともらしい嘘(ハルシネーション)をつくことも多いため、すべての回答は「仕事は早いがケアレスミスが多い同僚からのプルリクエスト」のように扱うのが賢明です。このガイドでは、的確な質問の仕方と、生成されたコードの確認方法を解説します。

AIチャットが得意なコーディングタスク

  • コードの解説: 「この関数を1行ずつ解説して」といった依頼。
  • デバッグ: エラーメッセージやスタックトレースを読み取り、考えられる原因を提示する。
  • 処理が明確な小さめの関数: 日付のパース、入力値のバリデーション、データ変換など。
  • ボイラープレートの作成: 設定ファイル、コマンドライン引数の解析、基本的なAPIハンドラーなど。
  • テストコード: 見落としがちなエッジケースを含めた単体テストのドラフト作成。
  • 正規表現、SQL、シェルワンライナーの作成: 各要素の解説付きで作成。
  • 学習・言語移行: 「Pythonは分かります。これをGoで書くとどうなるか、違いを含めて教えて」といった依頼。
  • コードレビュー: 可読性の問題、エラーハンドリングの不足、明らかなセキュリティ上の懸念の指摘。

一方で、コードベース全体に関わる大規模な設計判断、学習データにない最新バージョンのライブラリ、入力されていない情報への対応は苦手です。ChatGのようなチャット画面では、AIは貼り付けられた内容しか認識できません。あなたのローカルファイルを開いたり、コードを実際に実行したりすることはできません。

バグ修正を依頼する際のコツ

質の低い回答が返ってくる最大の原因は、文脈(コンテキスト)の不足です。効果的なデバッグプロンプトには、言語とバージョン、該当するコード、エラー全文、期待される動作と実際の挙動、すでに試したことの5点を含めましょう。

悪い例:
コードが動きません。直してください。
[200行のコードを貼り付け]
良い例:
Python 3.12、pandas 2.xを使用しています。この関数は顧客あたりの平均注文額を
返す仕様ですが、KeyError: 'customer_id' が発生します。

コード:
[該当する関数と、5行分のサンプルデータのみを貼り付け]

トレースバック全文:
[貼り付け]

CSVにcustomer_id列があることは確認済みです。考えられる原因は何ですか?
修正コードを提示する前に、まず修正方針を説明してください。

コードは問題を再現できる最小限のコード(ミニマルなコード)に絞り込んで共有してください。それだけで原因が特定できることも多く、重要な箇所に焦点を当てやすくなります。チャットでデバッグ用プロンプトを開き、内容を埋めて試してみましょう。

新しいコードの生成を依頼するコツ

小さな仕様書を書くイメージで指示を出しましょう。入力、出力、エッジケースを正確に指定するほど、あとからの手戻りが少なくなります。

TypeScriptでslugify(title: string): string関数を作成してください。
- 小文字、ASCII文字のみ。一般的なアクセント文字は置き換える
  (例: é は e に変換)。
- 連続する非英数字は1つのハイフンに置き換える。
- 前後のハイフンは削除。最大文字数は60文字で、単語の途中で切らない。
- 外部ライブラリは使用しない。
続いて、Vitestを使った単体テストを8件作成してください。空文字や絵文字を含む
入力もテストケースに含めてください。

コードと一緒にテストも依頼するのがポイントです。AIが書いたテストとコードの辻褄が合わない場合、本番環境に投入する前に問題を発見できます。

「外部依存ライブラリは追加しない」「既存の関数シグネチャを維持する」「標準ライブラリのみ使用」「この関数以外の部分は変更しない」など、やってほしくないことも指定しましょう。制約を与えないと、AIは指示していない箇所まで過剰に書き換えてしまう傾向があります。

デプロイ前の検証ポイント

AIが生成したコードは一見きれいに見えても、間違っていることがあります。以下のチェックを開発フローに組み込みましょう。

  1. 実際に実行する。 自身でコードとテストを実行せずに、プロジェクトへ取り込むのは絶対にやめましょう。
  2. 関数やオプションが実在するか確認する。 AIは存在しないメソッド、引数、設定キーを捏造したり、古いバージョンのものを使ったりすることがあります。使用しているバージョンの公式ドキュメントで必ず確認してください。
  3. パッケージ名はインストール前に確認する。 AIアシスタントが存在しないパッケージ名を提案し、攻撃者がその名前で悪意あるコードを登録するリスク(スロップスクワッティングと呼ばれる攻撃)が報告されています。インストール前に、公式レジストリに実在し、メンテナンスされている正規のパッケージか確認してください。
  4. セキュリティの観点でレビューする。 文字列結合によるSQL構築、入力バリデーションの欠落、証明書検証の無効化、ハードコードされたシークレット、過度な権限設定などがないか確認します。「すべての入力を悪意あるものと想定して、このコードのセキュリティリスクをレビューして」とAI自身に確認させるのも有効です。
  5. 理解できるまで読み込む。 そのブロックが何をしているか説明できない場合は、AIに質問するか、マージを見送りましょう。そのコードを今後保守していくのはあなた自身です。

シークレットや機密コードは入力しない

APIキー、パスワード、トークン、秘密鍵、接続文字列などをAIチャットに入力してはいけません。YOUR_API_KEYなどのプレースホルダーに置き換えてください。万が一、本番のシークレットを外部に漏洩させてしまった場合は、直ちにローテーション(再発行)してください。

企業やクライアント向けの業務でコードを書く場合は、外部のAIサービスにコードを貼り付けてよいか、社内規定を確認してください。多くの組織では、機密コードの取り扱いに承認済みツールのみを認めています。迷った場合は、プロジェクトの固有情報を含まない汎用的なサンプルコードに置き換えて質問しましょう。詳細はAIプライバシーと安全性ガイドで解説しています。

開発者向けのおすすめプロンプト

[言語]の経験はあるがこのライブラリは初めての開発者に向けて、
このコードを解説してください。ブロックごとに説明し、リスクの
ある箇所や非推奨の書き方があれば指摘してください。
[コードを貼り付け]
シニアエンジニアの視点でこのdiffをレビューしてください。コメントを
バグ、セキュリティ、パフォーマンス、可読性に分類してください。
該当する行を引用しながら具体的に指摘してください。
[diffを貼り付け]
[要件の説明]にマッチする正規表現を作成してください。各パーツの解説と、
マッチすべき文字列5つ、マッチしてはならない文字列5つの例を挙げてください。
Pythonは熟知していますが、現在Rustを学んでいます。[やりたい処理]をRustで
実装する方法を教えてください。所有権と借用についても、初学者向けに解説してください。

その他の例はコーディング用プロンプト集に掲載されています。単発のタスクなら、説明やコード断片から解説付きコードを生成するコードアシスタントツールが便利です。また、内蔵のコーディングアシスタントを使えば、会話全体を通して開発者向けのトーンを維持できます。

よくある失敗

  • プロジェクト全体を丸ごと貼り付ける。 長すぎるプロンプトは重要な情報を埋もれさせ、AIのコンテキスト処理上限を超える原因になります。関連するファイルや関数のみを抜粋してください。
  • 症状を覆い隠すだけの「対症療法」を受け入れる。 全体をtry/exceptブロックで囲めばエラー表示は消えますが、バグ自体は直っていません。なぜそのエラーが起きるのかを突き止めましょう。
  • 同じアプローチに固執する。 2〜3回やり取りしても解決しない場合は、一旦立ち止まりましょう。文脈を追加する、例を小さくする、あるいは新しいチャットを開いて問題を整理し直すのが効果的です。
  • バージョンを指定しない。 主要フレームワークはメジャーバージョン間でAPIが大きく変わるため、使用バージョンを明記しましょう。
  • ライセンスを無視する。 既存コードの引用と分かるようなコード片が生成された場合は、使用前にライセンスを確認してください。

開発者向けのChatG活用法や、一般的なプロンプト作成ガイドもあわせてご覧ください。

主導権を握るための開発フロー

  1. まずはコードを書かせず、目的だけを伝える。 実装前に、2〜3種類のアプローチと考えうるトレードオフを挙げてもらいます。
  2. 1つの手法を選び、小さなステップから依頼する。 機能全体を一気に作るより、関数ごと・ファイルごとに進めるほうが検証も容易です。
  3. 実行して結果をフィードバックする。 「動きません」とだけ伝えるのではなく、実際に出力された内容やエラーメッセージを貼り付けます。
  4. テストとレビューを依頼する。 「見落としているエッジケースはありますか?」と尋ねることで、潜在的なバグを先回りで発見できます。
  5. コミットメッセージは自分で書く。 何をなぜ変更したのかを自分の言葉で要約できないなら、まだその変更を十分に理解できていません。

よくある質問

AIを使えばプログラミング学習は不要になりますか?

いいえ。AIは、コードを読み解き正否を判断できる人の作業を加速させるツールです。出力が正しいかどうか判断できなければ、安全に使いこなすことはできません。「どう書くか」だけでなく「なぜそうなるのか」をAIに問いかけ、学習の加速に役立てましょう。

どのプログラミング言語に対応していますか?

Python、JavaScript、TypeScript、Java、C#、C++、Go、PHP、SQL、シェルスクリプトなど、広く普及している言語はおおむね得意です。使用例が少ないマイナー言語では精度が下がります。また、リリースされたばかりのライブラリや新バージョンでも品質が落ちる傾向があります。

ChatGはコードを実行したりリポジトリを閲覧したりできますか?

いいえ。ChatGはテキストベースのチャットツールです。貼り付けられた内容のみを処理し、コードを実行することはありません。動作確認やテストは必ずご自身の開発環境で行ってください。

AIが生成したコードは商用利用しても安全ですか?

外部から取得したコードと同様に扱ってください。レビューやテストを行い、依存関係やコピー元が疑われるコードのライセンスを確認し、所属組織のポリシーに従いましょう。なお、本記述は一般的な情報提供であり、法的な助言ではありません。

今すぐ始めましょう

チャットを開いて、最初の質問を入力してみてください。無料で、インストールも不要です。

チャットを始める