AI活用型データ分析ポータルサイトの開発
01.概要
鉄道業界のクライアント向けAI活用型ポータルサイトの開発プロジェクトに、コンサルタントとして参画。乗降データの分析・可視化を支援するサービスで、クライアントとの打ち合わせ準備・進行から設計・開発まで一人で担当した。主な機能は、日本語の質問からAIがSQLを自動生成してデータを返す自然言語データ分析チャット、マニュアルやFAQをAIが検索・回答するRAGベースナレッジ検索チャット、分析結果をもとにグラフ付きレポートを自動生成するAIレポート機能、そして複数の鉄道会社のデータを物理的に分離するマルチテナント対応の4つ。
02.背景・動機
鉄道会社向けのデータ分析サービスを提供しているクライアントから、サービスの顧客・事業拡大を見据えた生成AI導入の相談があり、プロジェクトが始動。初期はPoCによる効果検証が中心で既存サービスの補助的な位置付けだったが、成果物の品質が評価され、プロジェクト開始から5か月という短期間で独立したサービスとして本番環境への移行を実現した。
03.技術スタック
Next.js (App Router) / TypeScript
フロントエンドUIとAPIプロキシを担当。App RouterのServer Actionsでバックエンドとの通信を簡潔に実装
Python / FastAPI
LLMエージェントやデータ分析処理のバックエンドAPIを構築。Pythonエコシステムとの親和性を活かしBedrock SDKを活用
Amazon Bedrock(Claude / Agent / Knowledge Base)
Text-to-SQL・RAG・レポート生成のAIコア機能を実現。エージェント機能で複数ツールを連携した処理フローを構築
Amazon Athena / Glue Data Catalog
乗降データへの自然言語クエリを支えるサーバーレスなデータ分析基盤として採用
AWS Lake Formation
行レベルセキュリティによるマルチテナントのデータ分離を実現。アプリケーション層だけに依存しない多層防御の一角を担う
Amazon ECS(Fargate)
サーバー管理不要でコンテナをスケーラブルに実行できるため採用。CodePipelineと組み合わせてCI/CDを構築
04.工夫した点・苦労した点
<Highlights />
- マルチテナントの多層防御設計: アプリケーション層(プロンプトへの企業ID注入・SQLバリデーション)、AWSサービス層(IAMロール分離・Lake Formation行レベルフィルタ・Athena WorkGroup出力分離)、ナレッジベース(企業別Knowledge Baseで物理分離)の3段階でデータ漏洩を防ぐ設計を構築
- ドキュメント前処理パイプラインの開発: PDFをAIで解析・テキスト化 → メタデータ付与 → S3配置 → ナレッジベース同期まで一貫した自動化を実現。マルチテナント対応のメタデータ設計により企業ごとの分離と共通ドキュメントの共有を両立
- クイックサイクルによる短期本番移行: プロジェクト開始1週間でAI生成レポートをクライアントに共有してフィードバックを受け、翌週には改善版を提供するサイクルを徹底。5か月でPoC開始から本番リリースまでを完遂
<Challenges />
- 複数レイヤーにまたがるタイムアウト設計: AIレポート生成(データ取得 → LLM分析 → グラフ生成 → S3保存)の長時間処理に対し、CDN・ALB・フロントエンドAPIプロキシ・バックエンド・クエリエンジンの各層でタイムアウトの整合性を取る必要があった。特にNode.js内部のHTTPクライアントのデフォルトタイムアウトが暗黙的に効いており、本番環境でのみ再現する問題として顕在化した
- インフラのテンプレート化対応: PoCとして開発スピードを優先していたため、本番環境移行に向けたインフラのテンプレート化(IaC化)の際に手直しが必要な箇所が複数発生し、想定以上の時間を要した。初期段階から本番移行を見据えた構成管理の重要性を実感した
05.成果・学び
- AWSを活用したサービス構築: 初めてAWSを本格活用し、インフラ設計・開発・デプロイの一連を経験
- LLMエージェントの実運用: Text-to-SQLやRAGの精度はプロンプト設計とメタデータ品質に大きく依存することを実感
- クラウド層でのマルチテナント設計: Lake Formationの行レベルセキュリティやナレッジベース物理分離など、クラウドサービス層での多層防御を実践
- フルスタック + クラウドの一人開発: フロントエンド・バックエンド・AWSインフラを横断する設計・実装・運用を単独で担当