そうだ ! 生成 AI にシステム開発の面倒ごとを手伝ってもらおう !

2024-09-03
デベロッパーのためのクラウド活用方法

Author : 宇賀神 みずき (しょぼちむ)

皆さん、こんにちは ! AWS の宇賀神 みずき こと しょぼちむ (@syobochim) です。数年前まで SIer で働いており、深夜のオフィスで「AI、ちょっとは仕事奪ってくれねぇかな〜」と呟いたことが何度かあります。最近は技術の進化も著しく、いよいよあの時の呟きが現実味を帯びてきました。

皆さんのシステム開発の現場では、すでに生成 AI は使われているでしょうか?調査・プログラミングのサポート・エラー解決など、開発の現場で生成 AI を活用するケースがどんどん増えてきています。今回は、もう少し視野を広げて、システム現場でよくある、面倒でやりたくない作業を生成 AI に押し付けられないかを、一緒に考えていきましょう !


ソフトウェア開発ライフサイクルでの生成 AI のユースケース

ソフトウェアの開発ライフサイクル全体を考えてみると、要求分析から保守まで、多くの検討やドキュメントの作成、整合性のチェックなどをする必要があります。たとえ、アジャイルな開発プロセスを採用されていても、まったくドキュメントを作らないことはなく、チーム内やステークホルダーとの認識を合わせるためのドキュメント作りや、そのための情報の整理は欠かせません。

でも、すでに頭の中にあることをわざわざ書き起こしていくのは、面倒な作業ですよね・・・。筆が進まずに、「やらなきゃ〜」と思いながら、つい別の仕事をしてしまう・・・、なんてことが、皆さんもあるのではないでしょうか ?

生成 AI の登場によって、非構造データの扱いが簡単になり、文章やコードの生成も可能になりました。また、生成 AI は相談相手としても優秀で、アイデア出しにも有効です。多くの方が AI 関連のサービスを活用されるのは、プログラミングやテストの部分が大きいのかと思いますが、ソフトウェア開発のライフサイクル全体を見てみると、生成 AI を活用できるユースケースが多くあります。

この記事では、設計のフェーズでの成果物に注目し、生成 AI に手伝ってもらう方法を一緒に考えていきましょう ! 


Amazon Bedrock でモデルを使う準備をしよう

Amazon Bedrock は、複数のプロバイダーから提供された生成 AI の基盤モデルを AWS 上で利用できるフルマネージド型のサービスです。API や SDK を通じて既存のシステムに簡単に統合でき、使用量に応じた料金体系で初期投資なしで利用できます。テキスト生成や画像生成などの活用ができます。

今回は、 Amazon Bedrock から、 Anthropic 社にて提供されている Claude 3.5 Sonnet を利用してみましょう。

AWS のマネジメントコンソールにて東京リージョンを選択し、 Amazon Bedrock のメニューから 「Bedrock configurations 」の「モデルアクセス」を選択します。画面上部の「Enable specific models」ボタンをクリックし、 「Claude 3.5 Sonnet」を選択してください。

これだけの操作で、モデルを利用する準備が整いました。
左メニューの「プレイグラウンド」にある「チャット」と「テキスト」にてすぐに生成 AI との会話を始められます。

クリックすると拡大します


プロンプトエンジニアリングを学ぼう

生成 AI に対して渡す指示を「プロンプト」と言い、生成 AI から求めている結果を出力するために、プロンプトを調整することをプロンプトエンジニアリングと言います。
Anthropic 社のサイトに Claude にて活用できるプロンプトエンジニアリングの方法 が 9 個掲載されています。

1. プロンプトジェネレーター
2. 明確かつ直接的であること
3. 例を使う(マルチショット)
4. Claudeに考えさせる(思考の連鎖)
5. XMLタグを使う
6. Claudeに役割を与える(システムプロンプト)
7. Claudeの応答を事前に埋める
8. 複雑なプロンプトを連鎖させる
9. 長いコンテキストのヒント
引用元: https://docs.anthropic.com/ja/docs/build-with-claude/prompt-engineering/overview


ここではすべての解説はしませんが、サンプルのプロンプトを利用していくつかポイントをご紹介します。

このサンプルプロンプトは、設計書に記載するシーケンス図の作成を目的としています。
サンプルプロンプトの末尾の数字と照らして内容を確認してください。

  • ①:Claude に役割を与える (システムプロンプト) : どのような役割を担うべきかを明確に指示することで、口調や態度、情報の精度が変わります。
  • ②:XML タグを使う : XML タグを使うことで情報の構造を整理しやすくなります。
  • ③:Claude に考えさせる (思考の連鎖) : ステップバイステップで考えさせたり、一度深呼吸させたりと、考える時間を与えることで、回答の精度があがります。
  • ④:明確かつ直接的であること : 出力形式を明確に指示しています。今回は出力形式に Markdown と Mermaid 記法を利用することにしました。

# シーケンス図の作成
あなたは大規模イベントを専門とする、20年以上の経験を持つシステムエンジニアです。 ... ①
今回、グローバル企業向けの高度なイベント管理プラットフォームを設計する任務を与えられました。...①
このプラットフォームは、複数の国際会議、展示会、ネットワーキングイベントを同時に管理し、年間100万人以上の参加者を扱う必要があります。...①
このシステムには参加者の管理機能があります。参加者の管理機能の、シーケンス図を作成してください。

答える前に深呼吸をして、<thinking></thinking>で、ステップバイステップでXML タグ内で質問について考えてください。...②、③
それから質問に回答してください。 ... ③
回答の内容は、ドキュメントとしてMarkdownの形式で保存することを前提にしてください。シーケンス図はMermaid記法を利用してください。...④
回答の先頭行には必ず # を使ったh1タグを追加してください。...④


設計書の一部を作ってみよう

それでは、先ほどのプロンプトを Amazon Bedrock にて実行してみましょう。今回は左のメニューから「プレイグラウンド」の「チャット」を利用します。

画面上部の「モデルを選択」ボタンから、Anthropic 社の Claude 3.5 Sonnet を選択してください。
テキストボックスに以下のプロンプトを入力してみましょう。(先ほどのプロンプトから番号を抜きました。)

実行ボタンをクリックすると結果が出力されます。

クリックすると拡大します

プロンプトはこちら :

# シーケンス図の作成
あなたは大規模イベントを専門とする、20年以上の経験を持つシステムエンジニアです。
今回、グローバル企業向けの高度なイベント管理プラットフォームを設計する任務を与えられました。
このプラットフォームは、複数の国際会議、展示会、ネットワーキングイベントを同時に管理し、年間100万人以上の参加者を扱う必要があります。
このシステムには参加者の管理機能があります。参加者の管理機能の、シーケンス図を作成してください。

答える前に深呼吸をして、で、ステップバイステップでXML タグ内で質問について考えてください。
それから質問に回答してください。
回答の内容は、ドキュメントとしてMarkdownの形式で保存することを前提にしてください。シーケンス図はMermaid記法を利用してください。
回答の先頭行には必ず # を使ったh1タグを追加してください。

出力された結果を見ていきましょう。毎回結果は変わります。
出力結果の一番下にコピーのアイコンがあります。クリックすると出力結果をコピーできます。
指示通り、まずは <thinking> タグにて思考の整理をしています。その後、 Markdown 記法に則り、設計の情報が記載されています。

出力結果 :

<thinking>
1. システムの規模と要件を理解する
2. 参加者管理機能の主要なアクターを特定する
3. 参加者管理の主要なプロセスを考える
4. シーケンス図に含めるべき重要な要素を選択する
5. 大規模システムに必要な非同期処理や負荷分散を考慮する
6. セキュリティとデータプライバシーの観点を含める
7. シーケンス図をMermaid記法で作成する
8. 図の説明を追加する
</thinking>

# グローバルイベント管理プラットフォーム:参加者管理機能シーケンス図

以下は、グローバルイベント管理プラットフォームにおける参加者管理機能のシーケンス図です。この図は、参加者の登録から認証、イベント参加までの主要なプロセスを示しています。

```mermaid
sequenceDiagram
participant P as 参加者
participant UI as ユーザーインターフェース
participant AM as 認証マイクロサービス
participant RM as 登録マイクロサービス
participant DB as データベース
participant EM as イベント管理サービス
participant NQ as 通知キュー

P->>UI: 登録情報入力
UI->>RM: 登録リクエスト
RM->>DB: データ検証
DB-->>RM: 検証結果
RM->>DB: 参加者情報保存
RM->>NQ: 確認メール要求
RM-->>UI: 登録完了応答
UI-->>P: 登録完了表示

P->>UI: ログイン
UI->>AM: 認証リクエスト
AM->>DB: クレデンシャル検証
DB-->>AM: 認証結果
AM-->>UI: 認証トークン

P->>UI: イベント参加リクエスト
UI->>EM: 参加リクエスト (認証トークン付き)
EM->>DB: 参加資格確認
DB-->>EM: 確認結果
EM->>DB: イベント参加記録
EM->>NQ: 参加確認通知
EM-->>UI: 参加確認応答
UI-->>P: 参加確認表示
```

## 図の説明

1. **参加者登録プロセス**:
- 参加者がUIを通じて登録情報を入力
- 登録マイクロサービスがデータを検証し、データベースに保存
- 確認メールが通知キューを通じて送信される

2. **認証プロセス**:
- 参加者がログイン情報を入力
- 認証マイクロサービスがクレデンシャルを検証
- 認証成功時、UIに認証トークンが返される

3. **イベント参加プロセス**:
- 認証済み参加者がイベント参加をリクエスト
- イベント管理サービスが参加資格を確認
- 参加記録がデータベースに保存され、確認通知が送信される

この設計では、マイクロサービスアーキテクチャを採用し、各機能を独立したサービスとして実装しています。これにより、システムの拡張性と保守性が向上します。また、通知キューを使用することで、非同期処理を実現し、システムの応答性を高めています。

セキュリティ面では、認証トークンを使用して各リクエストを保護し、データベースアクセス時には常に検証を行っています。大規模なシステムであることを考慮し、各コンポーネントは水平スケーリング可能な設計となっています。

出力結果を Markdown ファイルとして保存し、結果を見てみましょう。コピーする際は先頭の <thinking> タグのブロックは削除してください。
Mermaid 記法に対応したエディタや Wiki サービスであれば、シーケンス図が描画されます。
シーケンス図の説明も末尾に記載されており、設計意図を伝えられる設計書ができました !

実際にはこのままでは利用できず、要件によってシーケンス図をカスタマイズする必要があります。

しかし、Mermaid 記法で最初から書いたり、 Excel の図形を使ったりするよりも、最初の雛形作成がここまで簡単にできるだけで、生産性は大きく向上します。

クリックすると拡大します


生成 AI が作ったものをレビューしよう

それでは生成 AI が作ったシーケンス図をレビューし、必要な箇所は修正していきましょう。

今回生成されたシーケンス図をよく見ると、認証リクエストでクレデンシャルの検証と結果の取得をデータベースに対して実行するフローになっています。

認証マイクロサービスがあり、認証系の処理はすべて任せたかったので、この部分は修正が必要です。
データベースへのリクエストを削除し、認証マイクロサービスに認証リクエストを送信した結果、認証トークンが返却されるよう、直接 Markdown ファイルを修正してフローを変更しました。

具体的には、以下の ① ② の2行を削除しています。


P->>UI: ログイン
UI->>AM: 認証リクエスト
AM->>DB: クレデンシャル検証 ← ①
DB-->>AM: 認証結果 ← ②
AM-->>UI: 認証トークン

シーケンス図 修正前
(画像をクリックすると拡大します)

シーケンス図 修正後
(画像をクリックすると拡大します)

このように、要件の伝え漏れや指示の誤り、ハルシネーションなどが発生し、生成 AI からの出力結果が意図した通りに設計されない場合があります。

そのため、生成 AI が出力した成果物に対しては必ずレビューをしましょう。

何度か試してみた個人的な主観では、完全に要件に沿ったシーケンス図を生成 AI だけで作成しようとすると、なかなか上手く指示を伝えられず、何度も指示を出すことになり大変でした。
ある程度は生成 AI に作成させて、そこからは手で Markdown ファイルを直接修正してしまうことをオススメします。


まとめ

今回は生成 AI にて設計書を作成してみました !

ただ、やはり生成 AI に意図を伝えきれなかったり、生成 AI も出力結果を間違えてしまったりというケースも多くあり、「知識のない方でも生成 AI を利用すれば設計ができる」わけではありません。
業務知識や設計スキルを持った方が、伝えたい設計を記載するためのショートカットとして、生成 AI をご活用いただくことをオススメします。

今回は一般的な仕様である Markdown と Mermaid 記法を利用しました。生成 AI はこのような一般的な形式( PlantUML や Swagger など)の方が出力しやすいです。
生産性向上のために生成 AI を利用される前に、設計書のフォーマットや記載方法、慣習を再検討できるかが、今後の生産性向上にも大きくつながってくると思います。

是非、皆様、生成 AI を活用して生産性を向上させ、より良いシステム作りに時間を掛けていきましょう ! 


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

宇賀神 みずき (しょぼちむ / @syobochim)
アマゾン ウェブ サービス ジャパン合同会社
パートナーソリューションアーキテクト

SIer でのアプリケーション開発者を経験後、2020 年にパートナーソリューションアーキテクトとして AWS Japan に入社。主に開発者の方に向けてセミナーやワークショップを提供しています。初心者向けの『いちばんやさしいGit&GitHubの教本』という本も書きました。
インドア派でしたが、最近は子どもと一緒に毎週公園で日を浴びています。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する