要件定義
項目 | 小項目 | 内容 |
---|---|---|
プロジェクト概要 | 目的 | プライベートAIアシスタント「すすむくん」の開発 |
スコープ | AWSとChatGPTを活用したカレンダー連携、通知機能を含む | |
利用者と関係者 | ターゲットユーザー | 自分自身、チームメンバー |
関係者 | 開発者、使用者(ユーザー) | |
機能要件 | カレンダー同期 | Googleカレンダーとの連携 |
通知機能 | AWS Lambdaを使ってLINE WORKSで通知送信 | |
問い合わせ応答機能 | LINE WORKS上で問い合わせを行うと応答を返す | |
非機能要件 | セキュリティ | AWS Secrets Managerを利用 |
性能 | 通知処理は3秒以内に完了 | |
可用性 | システム稼働率95%以上を保証 | |
データ要件 | データ項目 | ユーザー名、メールアドレス、スケジュール情報 |
保存期間 | 過去1年間 | |
データ量 | 1日のトランザクション数は最大500回 | |
システム連携 | 連携対象 | GoogleカレンダーAPI、LINE WORKS API、ChatGPT API、AWS Lambda、AWS DynamoDB |
制約条件 | 技術的制約 | Pythonを主な開発言語とする |
予算制約 | 個人利用として無料・低コストを優先 | |
スケジュール制約 | 年明け(2025年1月中)リリース目標 | |
スケジュール | 要件定義書作成 | 2024/11/30 |
プロトタイプ開発 | 2024/12/15 | |
ユーザーテスト | 2025/01/10 | |
リスクと対応策 | API利用制限 | 利用頻度を事前調整 |
サーバー負荷 | AWS Auto Scalingを設定 | |
データ漏洩 | 定期的なセキュリティ確認 | |
成果物 | 完成品 | AIアシスタント「すすむくん」 |
承認プロセス | 承認者 | 開発者自身 |
承認手順 | 自己レビュー後に次フェーズ進行 |
機能一覧
機能カテゴリ | 機能名 | 詳細説明 | 優先度 | 備考 | 該当フロー |
---|---|---|---|---|---|
カレンダー連携 | Googleカレンダー同期 | Googleカレンダーの予定をリアルタイムで取得 | 高 | カレンダー同期のフロー | |
イベントの登録確認 | カレンダーに新規イベントが登録された際に確認通知を送信 | 中 | イベント変更通知のフロー | ||
日次予定リマインダー | 当日の予定を指定時刻に通知 | 高 | リマインダー通知のフロー | ||
イベントリマインダー | 特定イベントの開始時刻前にリマインド通知 | 高 | リマインダー通知のフロー | ||
通知機能 | 定時通知 | 毎日決まった時間に重要情報を通知 | 中 | スケジュール設定可能 | 定時通知のフロー |
イベント変更通知 | カレンダーイベントが変更された場合に通知 | 高 | イベント変更通知のフロー | ||
緊急通知 | ユーザーからの指定に応じて即時通知を送信 | 高 | 設定変更フロー | ||
LINE WORKS通知管理 | LINE WORKSの特定グループやユーザーへの通知を設定 | 高 | 設定変更フロー | ||
問い合わせ応答機能 | メッセージ応答 | LINE WORKS上で受けた質問に応答 | 高 | ChatGPTを活用 | 問い合わせ応答のフロー |
FAQ検索機能 | 定型的な質問への回答を自動生成 | 高 | 問い合わせ応答のフロー | ||
会話履歴参照機能 | 過去の問い合わせ履歴を基に応答を調整 | 中 | 問い合わせ応答のフロー | ||
応答精度向上設定 | ユーザーのフィードバックを基に応答精度を向上 | 中 | 設定変更フロー | ||
設定・管理機能 | 設定画面 | 通知時間やリマインダー設定、通知先の管理 | 高 | 設定変更フロー | |
APIキー管理 | GoogleカレンダーAPIやLINE WORKS APIのキー管理 | 高 | 設定変更フロー | ||
ユーザー情報管理 | ユーザー名、メールアドレスなどの情報を登録・編集 | 中 | 設定変更フロー | ||
ログ管理 | 問い合わせや通知履歴を一覧表示 | 中 | エラーハンドリング全体フロー | ||
バックエンド機能 | データベース管理 | AWS DynamoDBでデータを保存・管理 | 高 | データ更新フロー | |
外部API接続 | GoogleカレンダーAPIやLINE WORKS APIとの接続 | 高 | カレンダー同期のフロー | ||
ChatGPT API連携 | 問い合わせ応答にChatGPTを活用 | 高 | 問い合わせ応答のフロー | ||
スケジュールバッチ処理 | 定期的に通知やデータ更新を実行 | 中 | 定時通知のフロー | ||
その他 | システムステータス通知 | システム障害やメンテナンス情報を通知 | 低 | 個人利用の場合は省略可 | エラーハンドリング全体フロー |
バージョン情報表示 | システムのバージョンや更新履歴を表示 | 低 | 設定変更フロー |
システム構成図
graph TD
Client["クライアント<br>LINE WORKS"] -->|1.リクエスト送信| Gateway["AWS API Gateway"]
Gateway -->|2.リクエスト転送| Lambda["AWS Lambda<br>ビジネスロジック"]
Lambda -->|3.データ取得/保存| DB[(AWS DynamoDB)]
Lambda -->|4.カレンダー同期| Calendar["GoogleカレンダーAPI"]
Lambda -->|5.問い合わせ応答| ChatGPT["ChatGPT API"]
Lambda -->|6.シークレット取得| Secrets["AWS Secrets Manager"]
Lambda -->|7.応答返信| Gateway
Gateway -->|8.結果通知| Client
style Client fill:#ffeb3b,stroke:#333,stroke-width:2px
style Gateway fill:#8bc34a,stroke:#333,stroke-width:2px
style Lambda fill:#03a9f4,stroke:#333,stroke-width:2px
style DB fill:#e91e63,stroke:#333,stroke-width:2px
style Calendar fill:#ffc107,stroke:#333,stroke-width:2px
style ChatGPT fill:#ff9,stroke:#333,stroke-width:2px
style Secrets fill:#9e9e9e,stroke:#333,stroke-width:2px
graph TD
A[LINE WORKS<br>クライアント] -->|リクエスト送信| Gateway["AWS API Gateway"]
Gateway -->|リクエスト転送| Lambda["AWS Lambda"]
subgraph Lambda内部処理
L1[シークレット取得リクエスト]
L2[シークレット取得レスポンス]
L3[ビジネスロジック実行]
end
Lambda -->|リクエスト: シークレット取得| Secrets["AWS Secrets Manager"]
Secrets -->|レスポンス: シークレット情報| L1
L2 --> L3
Lambda -->|応答| Gateway
Gateway -->|結果通知| A
style Secrets fill:#9e9e9e,stroke:#333,stroke-width:2px
ユーザーから問い合わせや通知リクエストを送信。
リクエストを受け取り、適切なLambda関数に振り分ける。
ロジックを実行し、外部API(ChatGPT、Googleカレンダー)やデータベースと連携。
必要な情報を取得または応答を生成。
必要に応じてデータを読み書き。
LINE WORKSに結果を通知。
定時通知のAPIフロー
graph TD
A[AWS EventBridge<br>定時トリガー発生] -->|1.トリガー発生| B[AWS Lambda]
subgraph AWS Lambda
direction TB
B1["通知先情報を取得"]
B2["メッセージ生成"]
B3["エラー処理"]
end
B -->|2.通知先情報取得| C[(AWS DynamoDB<br>通知先情報)]
C -->|3.レスポンス: 通知先情報| B1
B1 -->|4.メッセージ生成| B2
B2 -->|5.通知送信| D["LINE WORKS API<br>通知送信"]
D -->|6.通知成功| E["ユーザーに通知表示<br>LINE WORKS"]
D -->|6.通知失敗| B3
B3 -->|7.エラーログ記録| F[(CloudWatch<br>エラーログ)]
B3 -->|8.再試行| B2
%% ノードのスタイル
style A fill:#ffeb3b,stroke:#333,stroke-width:2px
style B fill:#8bc34a,stroke:#333,stroke-width:2px
style C fill:#e91e63,stroke:#333,stroke-width:2px,shape:circle
style D fill:#ffc107,stroke:#333,stroke-width:2px
style E fill:#e91e63,stroke:#333,stroke-width:2px
style F fill:#9e9e9e,stroke:#333,stroke-width:2px,shape:circle
イベント変更通知API
graph TD
A[GoogleカレンダーAPI<br>イベント変更検知] -->|1.変更イベント取得| B[AWS Lambda]
subgraph AWS Lambda
direction TB
B1[通知先情報を取得<br>(AWS DynamoDB)]
B2[変更内容に基づくメッセージ生成]
B3[エラー処理]
end
B -->|2.通知先情報取得| C[(AWS DynamoDB<br>通知先情報)]
C -->|3.レスポンス: 通知先情報| B1
B1 -->|4.変更内容をもとにメッセージ生成| B2
B2 -->|5.通知送信| D[LINE WORKS API<br>通知送信]
D -->|6.通知成功| E[ユーザーに通知表示<br>LINE WORKS]
D -->|6.通知失敗| B3
B3 -->|7.エラーログ記録| F[(CloudWatch<br>エラーログ)]
B3 -->|8.再試行| B2
%% ノードのスタイル
style A fill:#ffeb3b,stroke:#333,stroke-width:2px
style B fill:#8bc34a,stroke:#333,stroke-width:2px
style C fill:#e91e63,stroke:#333,stroke-width:2px,shape:circle
style D fill:#ffc107,stroke:#333,stroke-width:2px
style E fill:#e91e63,stroke:#333,stroke-width:2px
style F fill:#9e9e9e,stroke:#333,stroke-width:2px,shape:circle
リマインダー通知フロー
graph TD
A[AWS EventBridge<br>5分ごとにトリガー発生] -->|1.トリガー発生| B[AWS Lambda]
subgraph AWS Lambda
direction TB
B1[現在時刻を取得]
B2[近いイベントを検索<br>(GoogleカレンダーAPI)]
B3[リマインダーメッセージ生成]
B4[エラー処理]
end
B -->|2.現在時刻に基づいてイベント検索| C["GoogleカレンダーAPI<br>イベント取得"]
C -->|3.イベント情報レスポンス| B2
B2 -->|4.リマインダーメッセージ生成| B3
B3 -->|5.通知送信| D[LINE WORKS API<br>通知送信]
D -->|6.通知成功| E[ユーザーに通知表示<br>LINE WORKS]
D -->|6.通知失敗| B4
B4 -->|7.エラーログ記録| F[(CloudWatch<br>エラーログ)]
B4 -->|8.再試行| B3
%% ノードのスタイル
style A fill:#ffeb3b,stroke:#333,stroke-width:2px
style B fill:#8bc34a,stroke:#333,stroke-width:2px
style C fill:#03a9f4,stroke:#333,stroke-width:2px
style D fill:#ffc107,stroke:#333,stroke-width:2px
style E fill:#e91e63,stroke:#333,stroke-width:2px
style F fill:#9e9e9e,stroke:#333,stroke-width:2px,shape:circle
問い合わせ応答フロー
graph TD
A[LINE WORKS<br>問い合わせメッセージ受信] -->|1.メッセージ送信| B[AWS API Gateway]
B -->|2.リクエスト転送| C[AWS Lambda<br>問い合わせ処理]
subgraph AWS Lambda
direction TB
C1[問い合わせ内容解析]
C2[FAQデータベース検索<br>(DynamoDB)]
C3[ChatGPT API呼び出し]
C4[応答メッセージ生成]
C5[エラー処理]
end
C -->|3.問い合わせ内容を解析| C1
C1 -->|4.FAQ検索| C2
C2 -->|5.FAQが見つかれば応答| C4
C2 -->|FAQが見つからない| C3
C3 -->|6.ChatGPTで応答生成| C4
C4 -->|7.応答を送信| D[LINE WORKS API<br>応答メッセージ送信]
D -->|8.応答が表示される| E[ユーザー]
D -->|通知が失敗| C5
C5 -->|9.エラーログ記録| F[(CloudWatch<br>エラーログ)]
C5 -->|10.再試行| C4
%% ノードのスタイル
style A fill:#ffeb3b,stroke:#333,stroke-width:2px
style B fill:#8bc34a,stroke:#333,stroke-width:2px
style C fill:#03a9f4,stroke:#333,stroke-width:2px
style C2 fill:#e91e63,stroke:#333,stroke-width:2px,shape:circle
style C3 fill:#ffc107,stroke:#333,stroke-width:2px
style C4 fill:#8bc34a,stroke:#333,stroke-width:2px
style D fill:#e91e63,stroke:#333,stroke-width:2px
style E fill:#ffc107,stroke:#333,stroke-width:2px
style F fill:#9e9e9e,stroke:#333,stroke-width:2px,shape:circle
カレンダー同期フロー
graph TD
A[LINE WORKS<br>同期リクエスト] -->|1.リクエスト送信| B[AWS API Gateway]
B -->|2.リクエスト転送| C[AWS Lambda<br>カレンダー同期処理]
subgraph AWS Lambda
direction TB
C1[ユーザー認証]
C2[GoogleカレンダーAPI呼び出し]
C3[同期データ保存]
C4[エラー処理]
end
C -->|3.認証処理| C1
C1 -->|4.カレンダーイベント取得| C2
C2 -->|5.同期データを保存| D[(AWS DynamoDB)]
D -->|6.同期成功応答| E[LINE WORKS<br>同期結果通知]
C2 -->|エラー発生| C4
C4 -->|7.エラーログ記録| F[(CloudWatch<br>エラーログ)]
style A fill:#ffeb3b,stroke:#333,stroke-width:2px
style B fill:#8bc34a,stroke:#333,stroke-width:2px
style C fill:#03a9f4,stroke:#333,stroke-width:2px
style D fill:#e91e63,stroke:#333,stroke-width:2px,shape:circle
style E fill:#ffc107,stroke:#333,stroke-width:2px
style F fill:#9e9e9e,stroke:#333,stroke-width:2px,shape:circle
データ更新フロー
graph TD
A[管理画面<br>データ更新リクエスト] -->|1.リクエスト送信| B[AWS API Gateway]
B -->|2.リクエスト転送| C[AWS Lambda<br>データ更新処理]
subgraph AWS Lambda
direction TB
C1[更新内容解析]
C2[DynamoDB更新]
C3[エラー処理]
end
C -->|3.更新内容を解析| C1
C1 -->|4.DynamoDB更新リクエスト| D[(AWS DynamoDB)]
D -->|5.更新成功応答| E[管理画面に更新結果を返す]
D -->|エラー発生| C3
C3 -->|6.エラーログ記録| F[(CloudWatch<br>エラーログ)]
style A fill:#ffeb3b,stroke:#333,stroke-width:2px
style B fill:#8bc34a,stroke:#333,stroke-width:2px
style C fill:#03a9f4,stroke:#333,stroke-width:2px
style D fill:#e91e63,stroke:#333,stroke-width:2px,shape:circle
style E fill:#ffc107,stroke:#333,stroke-width:2px
style F fill:#9e9e9e,stroke:#333,stroke-width:2px,shape:circle
設定変更フロー
graph TD
A[LINE WORKS<br>設定変更リクエスト] -->|1.リクエスト送信| B[AWS API Gateway]
B -->|2.リクエスト転送| C[AWS Lambda<br>設定変更処理]
subgraph AWS Lambda
direction TB
C1[設定内容解析]
C2[DynamoDB更新]
C3[エラー処理]
end
C -->|3.設定内容を解析| C1
C1 -->|4.DynamoDB更新リクエスト| D[(AWS DynamoDB)]
D -->|5.設定変更成功応答| E[LINE WORKS<br>設定変更結果通知]
D -->|エラー発生| C3
C3 -->|6.エラーログ記録| F[(CloudWatch<br>エラーログ)]
style A fill:#ffeb3b,stroke:#333,stroke-width:2px
style B fill:#8bc34a,stroke:#333,stroke-width:2px
style C fill:#03a9f4,stroke:#333,stroke-width:2px
style D fill:#e91e63,stroke:#333,stroke-width:2px,shape:circle
style E fill:#ffc107,stroke:#333,stroke-width:2px
style F fill:#9e9e9e,stroke:#333,stroke-width:2px,shape:circle
エラーハンドリング全体フロー
graph TD
A[処理の開始] -->|エラー発生| B[エラーハンドリング]
subgraph エラーハンドリング
direction TB
B1[(CloudWatch<br>エラーログ)]
B2[管理者への通知<br>(LINE WORKS API)]
B3[再試行処理<br>(AWS Lambda)]
end
B -->|1.エラーログ記録| B1
B -->|2.管理者通知| B2
B -->|3.再試行| B3
B3 -->|再試行失敗| B1
%% ノードのスタイル
style A fill:#ffeb3b,stroke:#333,stroke-width:2px
style B fill:#8bc34a,stroke:#333,stroke-width:2px
style B1 fill:#9e9e9e,stroke:#333,stroke-width:2px,shape:cylinder
style B2 fill:#ffc107,stroke:#333,stroke-width:2px
style B3 fill:#8bc34a,stroke:#333,stroke-width:2px
https://fluttering-socks-c19.notion.site/AI-14ecf9d5b14e80baacc3cfa8bde2f5bc