AI駆動開発(導入編)

プログラミングと生成AI

2025年現在、OpenAI o3を始めとする生成AI(LLM)は部分的なコーディングタスクで人間を凌ぐ精度を見せ始めている。既に一からコードを書く必要はほとんどなく、生成AIが出してきたコードを人間がレビューして仕上げるという開発スタイルが主流である。簡単な指示だけでAIエージェントが自律的にほとんどすべてのタスクをやってくれる未来もそう遠くはないと思われる。

一方で、生成AIは必ずしも完全なコードを出してくれるわけではない。LLMに確率的生成モデルを採用しているため、原理的にハルシネーション(もっともらしい嘘をつくこと)を起こしたり、可読性が低く保守しづらいコードや古いバージョンのコード、セキュリティリスクのあるコードを生成したりする可能性を含む。そのため、必ず人間によるチェックが必要になる。加えて、現実のソフトウェア要件は曖昧で変動しうるため、場面ごとのトレードオフに対する意思決定は人間が下す必要がある。そして、そのためには当然コードを読み書きでき、最終的な意思決定と品質保証をする人間が必要になる。

また、生成AIを「学習パートナー」として上手く活用すれば、状況に合わせてプログラミング学習をサポートしてくれる。生成させたコードに対して「このコードは何をしているのか?」、「なぜこのような書き方にしたのか?」、「他の書き方はないか?」「このコードをレビューして」などと深堀りしていくことで生成されたコードを深く理解できるようになる。自分の言葉で「なぜこのコードを採用したのか」を説明できるようになるまで深堀りできると効果的に学習を進められる。

AI学習の注意点

AIはプログラミング学習の強力な味方になるが、使い方を間違えると学習の妨げになったり、思わぬトラブルに繋がったりすることもある。AIを活用した学習の注意点を以下に示す。

  • 過度な依存と思考停止: AIがすぐに答えを出してくれる便利さから、自分で考えることを放棄してしまうのが最も危険な落とし穴である。AIに頼りすぎると、問題解決能力や応用力が育たない。学習の目的は「コードを完成させること」自体ではなく、「なぜそのコードを採用したのかを説明でき、ユーザーからの要望に応じて既存機能の改修や機能の追加を自由にできること」であることを忘れてはならない。
  • AIが生成したコードを理解せず使用する危険性: AIが生成したコードを、内容を理解しないまま使ってはならない。そのコードが間違っていたり、セキュリティ上の問題を含んでいたり、あるいは非効率的な書き方になっていたりする可能性がある。理解せずに使っていると、いざ問題が発生した時に原因を特定できず、応用も効かないような非常に浅い学習に繋がってしまう。
  • 基礎学習の軽視: 「AIがやってくれるから基礎は適当でいいや」と考えてしまうと、結局AIを使いこなすことも、自力で問題を解決することもできなくなる。基礎知識はAIの生成物を理解・評価し、的確な指示を出すための土台である。
  • 情報の正確性への過信: AIは古い情報や不正確な情報を提供したりする可能性がある。AIの回答はあくまで「参考情報」と捉え、特に重要な情報については、公式サイトのドキュメントなど、信頼できる情報源で必ず裏付けを取る必要がある。
  • セキュリティとプライバシーへの配慮: 業務で扱う機密情報や個人情報を含むコードを、安易に公開されているAIツールに入力してはならない。利用するツールのプライバシーポリシーを確認し、情報がどのように扱われるかを理解しておくことが重要である。
  • 著作権の問題: AIはインターネット上の膨大なコードを学習しているため、生成されたコードが既存のソフトウェアのライセンス(利用許諾条件)に抵触する可能性もある。学習目的での利用は通常問題ないが、商用利用などを考える場合は注意が必要である。
  • AI駆動開発実践

    AIのサポートを受けながら開発を進める手順を示す。実践時にはGitHub CopilotやCursorなどの他AIツールを使ってもよいが、ここでは生成AIへの入出力が分かりやすいようにChatGPTとのチャット形式で進めてゆく。出力結果をしっかりと理解して自分の状況に合わせて書き換えたり、追加で質問したりすることが最も重要である。なお、使用したモデルは括弧内に明記しておくが、無料で利用できる範囲のAIツールを用いても(出力精度は変わってしまうが)特に問題ない。

    実践手順

  • 作りたいものがまだ決まってない場合は、そこから生成AIに相談する。
  • プロンプト:

    プログラミング初学者がPythonでテトリスを実装した後に、
    更にステップアップするためにおすすめのアプリ開発の題材を提案して下さい。
    そのアプリ開発でどんな技術が身につくのかも一緒に示してください。
    テトリスと関連付けなくて構いません。

    出力結果(model: OpenAI o3):output1


  • 必要に応じて生成AIに追加で質問し、アプリの題材を決める。(今回は段階的にステップアップしたいので難易度の低い「ToDoリスト」アプリを選択する)

  • 市場調査を実施する。(学習用に開発するアプリなら飛ばしてもOK)
  • プロンプト:

    「ToDoリスト」アプリを企画・開発しようとしています。
    類似アプリや競合アプリをリサーチし、市場調査の結果をまとめてください。

    出力結果(model:OpenAI DeepResearch):output2


  • 必要に応じて自分でも調査を行い、市場調査を完了する。

  • 要件定義書を作成する
  • プロンプト:

    以下の「アプリの題材」と「市場調査結果」をもとに、
    プログラミング初学者が作れる範囲で、
    「ToDoリスト」アプリの要件定義書を作成してください。
    
    ▼アプリの題材
    ```
    <アプリの題材をここに貼り付ける>
    ```
    
    ▼市場調査結果
    ```
    <市場調査の結果をここに貼り付ける>
    ```

    出力結果(model: OpenAI o3):output3


  • 必要に応じて書き換えるよう指示を出し、要件を確定する。

  • 要件定義書から画面遷移図、データベース設計を作成する。(今回は画面とテーブルがそれぞれ一つの小規模なアプリを想定しているので省略)
  • プロンプト例:

    要件定義書から画面遷移図、データベース設計を作成してください。
    
    ```
    <要件定義書をここに貼り付ける>
    ```

  • 実装手順を作成する
  • プロンプト:

    要件定義書の内容を踏まえて、
    プログラミング初学者にもわかるように具体的な実装手順を作成してください。
    
    ```
    <要件定義書をここに貼り付ける>
    ```

    出力結果(model: OpenAI o3):output4


  • 実装手順に従って実装を進めていく。実装手順が理解できなければ追加で質問する。
  • プロンプト:

    Phase 1 ― CLI × JSON(MVP)でやることを初学者にもわかるようにもっと具体的に書いてください。

    出力結果(model: OpenAI o3):output5


  • わからない点は生成AIに聞きながら、コードが完成するまで実装を進める。必要に応じて「このコードは何をしているのか?」、「なぜこのような書き方にしたのか?」、「他の書き方はないか?」「このコードをレビューして」などと質問してコードを深堀りする。
  • プロンプト例:

    以下のコードが何をしているのか一行ずつ順を追って教えてください。
    
    ```
    <対象のコードをここに貼り付ける>
    ```

  • 実装を進めていて難易度が高いと感じる場合は、課題選定や要件定義からやり直す。
  • プロンプト例:

    以下の要件がプログラミング初学者の私には難易度が高いです。
    もう少し機能を落として、簡単に実装できる内容に修正してください。
    
    ```
    <要件定義書をここに貼り付ける>
    ```

    詰まったときの対処法

    AIが生成する内容を理解できず、コードの量に圧倒されてしまうときなどは、基礎知識が不足している可能性が高い。そんなときは、まず「何がわからないか」を列挙して、知らない用語やライブラリを一つずつ調べて埋めていくと良い。例えばPyQt6ライブラリについて理解したいなら、生成AIに「PyQt6を使って、ボタンを押すと文字が変わるだけの最小サンプルをください」と頼み、コードを行ごとに確認しながら動かすと効率良く理解できる。

    また、AI駆動開発による学習と並行して、書籍や公式ドキュメントなどで全体像を整理、体系化することも大切である。点で集めた知識を線につなげることで、次に同じような壁に当たっても自力で乗り越えられる「真の技術力」が身につく。




    著者画像

    ゆうき

    2018/04からITエンジニアとして活動、2021/11から独立。主な使用言語はPython, TypeScript, SAS, etc.