97 ポイント 投稿者 baeba 2025-06-05 | 5件のコメント | WhatsAppで共有

1. はじめに: プロンプトが開発生産性を左右する

  • AIコーディング支援ツールの性能は、プロンプトの品質に左右される。明確な依頼は精緻なコードを、曖昧な質問は役に立たない出力を生む。
  • プロンプト作成は今や開発者にとって必須のスキルであり、これは開発パートナーを訓練する作業に近い。
  • この記事では実践的な例と比較を通じて、「良い質問」がどのように「良いコード」を生み出すのかを示す。

2. 効果的なプロンプトの7つの原則

文脈を与える
  • AIはユーザーのプロジェクト背景を知らないため、言語、フレームワーク、ライブラリ、エラーメッセージ、目的などを明示する必要がある。
  • 例: 「Node.js + Express + Mongoose環境でuser fetch中にTypeErrorが発生」のように技術的背景を含める。
目標を明確にする
  • 「コードが動きません」では役に立たない。「期待結果は○○なのに実際は△△です。なぜですか?」という形で正確に尋ねよう。
複雑な作業を分割する
  • 機能全体を一度に尋ねるより、段階ごとに依頼するほうが効果的だ。例: コンポーネント > 状態管理 > API統合。
入出力の例を含める
  • 望む出力例を示すと、AIの意図把握能力が高まる。 (e.g. [3,1,4][1,3,4])
役割を与える
  • 「シニアReact開発者のようにコードをレビューして」のような役割設定は、応答の深さと品質を向上させる。
対話的に繰り返し改善する
  • 最初の応答が完璧である必要はない。フィードバックを与えれば、AIはその流れを引き継いで徐々に精緻な結果を出す。
コードの一貫性を保つ
  • 関数名、フォーマット、コメントなど、コード自体が一貫して書かれていれば、AIもその流れを維持して品質が高まる。

3. デバッグのためのプロンプト戦略

エラーの明示と期待動作との比較
  • エラーメッセージ、問題の症状、期待結果、入力値を一緒に提示すれば、AIは正確に診断できる。
行単位の追跡を依頼する
  • 「この変数の値がどこでおかしくなったのかを段階的に追跡して」のような依頼は、複雑なロジックバグに効果的だ。
最小再現コードを提供する
  • 全体のコードではなく、問題が発生する核心部分だけを渡せば、AIはより正確に原因を分析できる。
明確な追加質問をする
  • 「なぜこういう結果になるのですか?」より、「この部分ではどの条件が間違っているのでしょうか?」のような直接的な質問がよい。
比較例: 悪い質問 vs. 良い質問
  • 単に「コードが動かない」と言うだけでは推測ベースの回答しか出てこないが、エラーメッセージとコードを一緒に渡せば正確な解決策を得られる。

4. リファクタリングと最適化のためのプロンプト戦略

リファクタリングの目標を明確にする
  • 単に「リファクタリングして」ではなく、「可読性向上、性能改善、APIの最新化」など具体的な改善目標を示すべきだ。
  • 目標が曖昧だと、AIは無作為な改善を試みたり、望まない方向へ変えてしまうことがある。
言語・環境の文脈を与える
  • 「Reactのクラスコンポーネント → 関数コンポーネントへの変換」、「Node.js 14環境」など、プロジェクトのスタイルや技術的制約を知らせれば、適切な変換が可能になる。
説明もあわせて求める
  • リファクタリング後のコードと一緒に「なぜこう変えたのか」の説明を求めれば、コード品質のレビューと学習効果の両方を得られる。
役割ベースの依頼で水準を高める
  • 「シニアTypeScript開発者のようにリファクタリングして」のような依頼は、よりモダンで深みのある改善案を引き出す。

5. 新機能実装のためのプロンプト戦略

機能を段階に分けて依頼する
  • 複雑な機能でも「機能構造の設計 → UI作成 → ロジック接続」の順に分けて依頼すれば、より安定した結果を得られる。
既存コードのスタイルを示す
  • 類似コンポーネントや内部規約を提示すれば、プロジェクトの一貫性に合ったコードが生成される。例: 「UserListをベースにProductListを生成」
コメント/TODOで意図を伝える
  • IDEで「// TODO: リクエストのバリデーションを実装」のように自然言語コメントを付けると、Copilotがそれに合ったコードブロックを自動生成する。
入出力の例を提示する
  • 入力値と期待出力の例を含めると、AIはそれを満たそうとし、精度が高まる。
フィードバックベースで繰り返し改善する
  • 最初の結果が期待に届かなくても、「filterではなくmapを使ってください」のようにフィードバックすれば、AIはすぐに反映して進化する。

6. 失敗するプロンプトの7つのパターン (Anti-patterns)

曖昧な依頼
  • 「このコード、なぜ動かないのですか?」のような質問は、意味のない一般論的な回答しか引き出さない。エラーメッセージ、コード、期待結果を含めよう。
要求過多
  • 「アプリ全体を生成 + 認証機能追加 + デプロイスクリプト込み」などの複合依頼は、漏れや混乱を招くため、段階的な分離が必要だ。
質問がない
  • コードだけを投げて依頼がないと、AIは要約をしたり無関係な結果を出しやすいので、質問の目的を明確にすべきだ。
成功基準が不明確
  • 「速くして」「もっと良くして」は基準が曖昧だ。例: 「O(n)の時間計算量に改善」のように、測定可能な基準を示す必要がある。
AIの質問を無視する
  • AIが「これは関数型ですか、クラス型ですか?」と尋ねたなら、それに答えてこそ最適化された出力を得られる。
一貫性不足
  • スタイル、文法、用語が次々に変わると、AIも混乱する。ひとつのスタイルを維持してこそ応答品質が向上する。
「上のコード」のような曖昧な参照
  • 会話が長くなるほど「上のコード」は不明確になる。できるだけコードを再提示するか、明示的に関数名へ言及しよう。

7. 結論: AIとの協業は反復的な対話だ

  • プロンプトエンジニアリングは今や開発者の中核的なコミュニケーションスキルだ。文脈の提示、明確な目標、反復的な改善が基本である。
  • AIはコーディング支援ツールではなく、協業者であり学習パートナーでもある。これをうまく活用すれば、生産性だけでなく開発力そのものも向上する。
  • 実験、フィードバック、役割設定など多様な戦略を活用すれば、AIを実戦のチームメンバーのように扱える。
  • 最終目標はより速く正確なコード生成だが、同時により良い開発者になるための学習ツールとしても積極的に活用すべきだ。

良いプロンプト vs 悪いプロンプト 比較表

区分 デバッグ リファクタリング 機能実装
良いプロンプト TypeErrorが発生する箇所はここです。期待値は○○ですがNaNが出ます。原因の特定をお願いします。 この関数の重複を取り除いて性能を改善してください。fetch部分はhelperに分離し、エラーメッセージは維持してください。 検索ボックス付きのProductListコンポーネントを作成してください。/api/productsからJSONを受け取り、一覧をフィルタリングし、エラー・ローディング状態も含めてください。
悪いプロンプト なぜ私の関数は動かないのですか? リファクタリングしてください。 検索機能を作ってください。

5件のコメント

 
bootno2316 2025-06-08

人間のプログラマーを相手にするのと変わりませんね。

 
xguru 2025-06-08

プログラマーのためのプロンプトエンジニアリング・プレイブック

GN+要約ボットが要約したバージョンもあわせて参考にしてください。Hacker News の要約コメントも読む価値があります。

 
baeba 2025-06-09

先に投稿されていたんですね..
ありがとうございます。

 
bichi 2025-06-05

頼むから頼むからこうするなと言っても、10回に1回はそうするやつらなんだよ -_-

 
mango 2025-06-05

人間が何を知ってるっていうんだ!