生成AIの性能は大幅に向上し、いまやプロンプトを入力するだけでアプリのプロトタイプが完成します。業務で実用的なレベルになったAIとの共存は、今後のエンジニアにとって不可欠です。そして、そのためにはプロンプトの活用方法を知っておく必要があります。
2024年に開催された「Developer eXperience Day 2024」(主催:日本CTO協会)では、日本マイクロソフトの畠山大有さんが登壇。「Software Engineer のための Prompt 活用」というテーマで生成AIを使用するポイントを紹介し、ChatGPTでソフトウェアをつくる過程を実践しました。
日本マイクロソフト株式会社
シニア クラウド ソリューション アーキテクト
畠山 大有さん

国内外での 300 社以上の IT プロジェクトにアーキテクトおよびエンジニアとして参画。最新AIを駆使し、ソフトウェアの開発を行う。AIに関連したイベントやワークショップの講師として登壇する機会も多い。
目次
「LLMの出力結果はドラフト」生成AIを使用するときの心構え

皆さん、こんにちは。本日は、ソフトウェアエンジニアのためのプロンプト活用をテーマに話をいたします。今回の講演では、基本的なLLMとプロンプトの考え方について話をした後、簡単なソフトウェアを作りながら、プロンプトへの考え方を深めていければと思います。
まず、LLMを使うときの基本的な考え方、ChatGPTを使うためのポイント、ChatGPTが得意なことをお伝えしていきます。
LLMを使うときの基本的な考え方
LLMを使うときに念頭に置いてほしいことが2つあります。一つは、LLMが出力する出力結果については、すべてドラフトということです。どんなにプロンプトの精度を上げても完成品にはならない。つまり、LLMの出力結果は、どこかで切り上げないといけません。
次に、プロンプトは複数回に分けて入力できるということ。最初にすべての条件を書き、一発でアウトプットを得ようとしても、希望する結果が得られるとは限りません。LLMはプロンプトから出力された結果を蓄積していきます。つまり、最初のアウトプットは次のアウトプットの参考情報になるんですね。
ChatGPTで品質の高いアウトプットを生成するポイント
続いて、仕事でChatGPTを使うためのポイントをご紹介します。まず、参照データを入力することです。もちろん参照データを入力しなくても、品質の高いアウトプットが生成されます。しかし、生成AIを利用する上で注意が必要なのがハルシネーションです。それを防ぐためにも前提となる条件やデータは必ずインプットしてください。
ChatGPTが得意なこと2つ
ChatGPTには得意なことが2つあります。それは、主に変換と抽出に関するアウトプットです。変換に関してはイメージがしやすいかと思います。日本語を英語に変換する、コメントからプログラムを生成するような用途がこれです。
もう一つが抽出。入力したデータの中から特定の類型の情報をピックアップするのが得意です。たとえば、連続するメールから特定の用途を抜き出してまとめることができます。プロジェクトを進めるとき、メールがいくつにも連なり、情報がバラバラになることはよくありますよね。案件を進めるときには、それを抜け漏れなく拾っていかなければなりません。

このようなときに、メール本文を入力情報とし、案件情報としてピックアップしてほしい項目を指定すると、上記のような形でアウトプットされます。ChatGPTはこのような構造データの抽出が非常に得意です。ここでのポイントは、「わからない部分は『不明』にしてください」とプロンプトで指示をすることです。ハルシネーションの防止につながります。
つまり、コード、メール、ファイルなどをデータとして残しておけば、ChatGPTの活用でわかりやすく整理できるのです。いまはプロンプトを複数回にわたり入力し、アウトプット量も限られていますが、近い将来に解消されると思います。逆説的な話になりますが、いま重要なのはデジタルデータを安全に管理することと言えるでしょう。
生成AIで観光者アプリの試作品が完成
それでは、プロンプトの入力でどこまでアプリケーションを作れるのか。残り時間の30分で試していきましょう。

今回、テーマとして選んだのは、福島県の郡山市の観光アプリの開発です。初めての業務だとわからないことがたくさんあります。なので、まずはBingが提供している生成AIのCopilotで情報を調べてみましょう。
Copilotは自社製品の中でも強くおすすめできます。自分があまり知らない技術や社内システムに使用されているプロダクトなどを検索しても多くの結果が出力されるんです。私が初めての仕事に臨むときは必ずCopilotで調べた上で、クライアントと商談を進めるようにしています。

Copilotがジャンルごとに観光スポットを紹介してくれました。さて、事前調査はこれくらい。GPT-4oにプロンプトを入力しながらアプリを作っていきます。本日は、要件定義、設計、デプロイの直前まで行います。
まずは、要件定義から始めます。今からお見せするデモンストレーションに使用するプロンプトは、私のGitHubのレポジトリに保存しています。その中から以下のプロンプトを入力します。
# 役割:
あなたは世界最高峰のコンサルタントです。**ソフトウェアエンジニアリング**に非常に長けています。# ユースケース作成のタスク:
以下のユーザーストーリーから詳細な**ユースケース**を考えてください。終了の指示があるまで、作成を続けてください。タスクが完了したら、「タスクが完了しました」と出力してください。
タスクを完了させるために情報に不足がある場合は、その旨を尋ねてください。
深呼吸をして、一歩ずつ取り組んでください。# ユーザーストーリー:
– 福島県郡山市の観光をする観光客をサポートするWebアプリケーションを作成したい
– 美味しいごはんを食べたい
– ステキな景色をみたい
– 移動手段を何とかしたい
– 支払い方法を簡略化したい
– スマホがメインターゲットのデバイス。勿論、同じデータをPCからも使いたい
ぜひプロンプトに使用する「ユースケース」という単語を覚えて帰っていただきたいです。この単語をプロンプトとして入力するだけでも出力結果が大幅に変わります。

さて、ユースケースが出力されましたので、機能要件を定めていきましょう。実際の業務では、お客様の条件を入力する時間も必要になります。ただ、その時間を考慮したとしても自分たちでゼロからつくるより圧倒的に早いです。以下のプロンプトを入力します。
# 機能要件作成のタスク:
作成したユースケースから詳細な**機能要件**を抽出してください。以下の機能要件の項目が必要です。終了の指示があるまで、作成を続けてください。タスクが完了したら、「タスクが完了しました」と出力してください。
タスクを完了させるために情報に不足がある場合は、その旨を尋ねてください。
深呼吸をして、一歩ずつ取り組んでください。# 機能要件の項目:
– アプリケーション開発の目的や背景
– 対象ユーザーや利用シーン
– 主要な機能やサービス
– 画面や操作
– 外部サービスとのやり取り
– 他のアプリケーションやサービスとの依存関係

出力結果を見てみると、それらしい機能要件が定められていることがわかります。続いて、非機能要件を定めましょう。
# 非機能要件作成のタスク:
以下のヒアリングドキュメントから、非機能要件を抽出してください。非機能要件には以下の非機能要件の項目が必要です。終了の指示があるまで、作成を続けてください。タスクが完了したら、「タスクが完了しました」と出力してください。
タスクを完了させるために情報に不足がある場合は、その旨を尋ねてください。
深呼吸をして、一歩ずつ取り組んでください。# 非機能要件の項目:
– 可用性
– 性能・拡張性
– 運用・保守性
– 移行性
– セキュリティ
– 環境・サステナビリティ# ヒアリングドキュメント:
システムに求められる非機能要件ですか、そうですね……。

こちらは、非機能要件の「# ヒアリングドキュメント」の欄です。ユーザーからヒアリングした内容の文字起こしをそのまま貼り付けしています。AIは抽出が得意ですので、文章を整理せずにインプットしなくてもよい結果が得られます。

さて、ここまで出力されると最終的なコンポーネントの姿がイメージできるかと思います。ここからアプリケーションのアーキテクチャを作っていきましょう。以下のプロンプトを入力します。
# アプリケーションアーキテクチャ作成のタスク:
これまでの情報を基にして、アプリケーションのアーキテクチャを作成してください。
Mermaid記法で作成してください。指示を完了させるために情報に不足がある場合は、その旨を尋ねてください。
深呼吸をして、一歩ずつ取り組んでください。
今回は、Mermaid記法でアーキテクチャを作成しました。この出力結果をMermaid Live Editorに貼り付けると……

一瞬でダイアグラムが完成しました。ここから、本来であれば実装計画に進むのですが、時間の関係で省略し、実際の設計に入っていきます。
以下のプロンプトを入力し、すべてのユースケースにおけるデータモデルを作ります。
# データモデル作成のタスク
**ユースケース**の全てを網羅するデータモデルを作成してください。
Mermaid記法で作成してください。ここで事前にユースケースをアウトプットしていることが活きます。GPT-4oが迷わずにアウトプットできるんですよね。プロンプトを重ねていく重要性がわかるかと思います。
続いて画面遷移図。これも以下のプロンプトを入力するだけです。
# 画面遷移図作成のタスク
ユーザーの画面遷移図を作成してください。
Mermaid記法で作成してください。
これにて要件定義が完了しました。

さて、プロトタイプの作成に進みましょう。ここでもプロンプトを重ねるだけでサンプルデータを作ってもらうことができます。プロンプトは以下の通りです。
# サンプルデータ作成のタスク
データモデルを参考にして、日本語のサンプルのデータを作成してください。ここまで完了したら、Azure SQL Databaseで実装してみます。使用するSQL以外のデータベースでも大丈夫です。ただ、バージョンの指定はしてください。出力結果をより正確にするためです。
# テーブル作成のタスク
以下の使用技術を使います。テーブルの作成のSQL文を作成してください。# 使用技術:
– Azure SQL Database v12続いて、サンプルデータを登録するために、以下のプロンプトを入力します。
# サンプルデータの登録SQL文作成のタスク
サンプルのデータを Azure SQL Database に登録するSQL文を作成してください。

画面の作成です。ひたすらChatGPTにプロンプトを入力します。
# 画面作成のタスク
以下の使用技術を使って、作成対象画面の画面を作成してください。
単独でも動作するようなサンプルデータも追加してください。深呼吸をして、一歩ずつ取り組んでください。
# 使用技術:
– HTML5
– Vue.js v3# 作成対象画面:
– ホーム画面
– レストラン検索画面これが完了したら、初期ローカル実行の手順書を作成してもらい、実装に移ります。以下のプロンプトを順番に入力します。
# 初期ローカル実行の手順書作成のタスク
作成した画面をローカルで動かすための詳細な手順書を作成してください。
ファイルの配置構造も作成してください。# サーバー側のAPI作成のタスク:
Vue.jsから呼び出すサーバー側のAPIをAzure Functionsにホストするアプリケーションを作成します。以下の使用技術を使って、レストラン検索ロジックのAPI実装にそったコードを作成してください。# 使用技術
– Azure Functions v4
– Python 3.11# レストラン検索ロジックのAPI実装:
– DBへの保存ロジックはここでは実装しません。APIを呼び出したらサンプルデータを返します
– サンプルデータは、先に作成したレストランデータを使います
– データの項目毎にAPIにもパラメーターを設定して、フィルタリングが出来るようにします
これでデータのドラフトが完成します。ところどころ飛ばした部分はありますが、ここまでにかかった時間は14分。やったことはほぼプロンプトの入力のみです。実際の仕事では手直しなどがあります。しかし、その手直しの時間を考慮しても30分あれば、ソフトウェアのプロトタイプレベルが完成します。
もちろんこれらはドラフトですし、バグもあります。ただ、業務では、非常に役立ちます。とくにクライアントとの会議で、条件を聞きながらプロンプトを入力するとすぐに試作品が完成。それを見ながら打ち合わせを進めることでプロジェクトが非常に効率的に進みます。
ちなみに、このような使い方をしている実感として、ChatGPTで生成した95%以上の図・スクリプト・コードはこの結果で動作します。
ここで紹介したプロンプトは私のGitHubのレポジトリにまとめています。ぜひ気になった方は参考にしてみてください。
書類の作成はLLMが得意な分野 
これまで見てきたように、LLMは書類の作成が得意です。単体テストの仕様書も作れます。そして、そのレビューもChatGPTに担ってもらうことができます。もちろん成果物の品質は自分で確認しなければなりません。ただ、生成AIは、このときに望んだ結果が出なかった場合に、何度でもやり直せます。その点は大きなメリットです。
ただ、やり直すには、プロンプトを知っておく必要があります。私自身、本日使用したプロンプトに最初からいきついていたわけではありません。何度も試行錯誤しています。ぜひ皆さんも毎日プロンプトを入力し、生成AIを活用できるプロンプトを作りましょう。
おそらく今後、AIの性能は向上していくと思います。そのときにプロンプトを活用できれば、楽しい未来が待っているはずです。
編集後記:生産性を格段に向上する生成AIの活用
生成AIに業務にマッチしたプロンプトを入力していくことで、アウトプットを短時間で生み出せることが実感できました。
資料作成などの場面に活きてくるため、ビジネスパーソンが活用することで、生産性を格段に向上させることができそうです。毎日、生成AIにプロンプトを入力し、業務にマッチしたプロンプトをつくることを意識していこうと思いました。
(文:中たんぺい)
