長崎大学 瀬戸崎研究室 ・ ソフトバンク株式会社 共同研究
AI エージェントを活用した VR 防災避難訓練コンテンツ — LLMeta(長崎大学 瀬戸崎研究室 2025年度卒業研究)をフォークし、防災(水害)教育向けにチューニングした Web アプリケーションです。長崎大学文教キャンパスが浸水した状況を 3D で再現し、専属の AI エージェントと相談しながら避難を体験できます。
LLMeta(LLM + Metaverse)は、AI エージェントがメタバース内でのユーザー体験を支援するプラットフォームです。防災 Edition では、VR 技術と AI を組み合わせた実践的な防災学習コンテンツを提供します。
詳細は docs/concept.md を参照してください。
フォーク元: ut42tech/llmeta-app — オリジナルの LLMeta(AI メタバースコミュニケーションプラットフォーム、2025年度卒業研究)
- 3D メタバース — 長崎大学文教キャンパスの水害シナリオ(大雨、洪水水面、暗い曇り空)を React Three Fiber で再現
- AI エージェント — 各ユーザーに専属の AI エージェントが避難経路・防災グッズの相談に応答
- VRM アバター — @pixiv/three-vrm による 3D キャラクターモデル
- リアルタイム音声チャット — LiveKit による WebRTC ベースの音声通信
- 音声文字起こし — Deepgram によるリアルタイム音声認識
- 暗号化 3D モデル — キャンパスモデルの暗号化配信とプリロード
- 多言語対応 — 英語・日本語の切り替え
| カテゴリ | 技術 |
|---|---|
| コア | Next.js 16 (App Router), React 19, TypeScript |
| 3D/VR | Three.js, React Three Fiber, @react-three/xr, @pixiv/three-vrm |
| リアルタイム | LiveKit, Deepgram |
| AI | Vercel AI SDK, OpenAI |
| 認証 | Supabase Auth (@supabase/ssr) |
| UI | shadcn/ui, Tailwind CSS v4, Motion, Lucide Icons |
| 状態管理 | Zustand |
| 多言語 | next-intl |
| テスト | Vitest, Testing Library, Playwright, Storybook 10 |
| リンター | Biome |
- Node.js 18+
- pnpm
# リポジトリをクローン
git clone https://github.com/SetozakiLab/llmeta-bousai.git
cd llmeta-bousai
# 依存関係をインストール
pnpm install.env.example を .env.local にコピーして設定してください。
cp .env.example .env.local| 変数 | 説明 |
|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Supabase プロジェクト URL |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY |
Supabase 公開キー(anon key) |
LIVEKIT_API_KEY |
LiveKit API キー |
LIVEKIT_API_SECRET |
LiveKit API シークレット |
LIVEKIT_URL |
LiveKit WebSocket URL |
DEEPGRAM_PROJECT_ID |
Deepgram プロジェクト ID |
DEEPGRAM_API_KEY |
Deepgram API キー |
OPENAI_API_KEY |
OpenAI API キー |
BLOB_READ_WRITE_TOKEN |
Vercel Blob トークン |
MODEL_ENCRYPTION_KEY |
3D モデル暗号化キー |
MODEL_ENCRYPTION_IV |
3D モデル暗号化 IV |
MODEL_BLOB_URL |
暗号化モデルの Blob URL |
pnpm devhttp://localhost:3000 をブラウザで開いてください。
src/
├── app/ # Next.js App Router ページ
│ ├── (auth)/ # 認証ページ(ログイン、サインアップ)
│ ├── (hub)/ # メインダッシュボード(サイドバー付き)
│ │ ├── instance/ # インスタンスロビー
│ │ ├── settings/ # ユーザー設定
│ │ └── world/ # ワールド詳細
│ ├── actions/ # Server Actions
│ ├── api/ # API ルート
│ │ ├── ai/ # AI エンドポイント(チャット、会話管理)
│ │ ├── auth/ # 認証エンドポイント
│ │ ├── blob/ # Blob ストレージ
│ │ ├── deepgram/ # 音声文字起こし
│ │ ├── livekit/ # LiveKit トークン
│ │ └── messages/ # メッセージ
│ └── experience/ # フルスクリーン 3D 体験
├── components/
│ ├── ai-elements/ # AI エージェント UI
│ ├── character/ # VRM キャラクター・プレイヤー
│ ├── common/ # 共有ユーティリティ
│ ├── hud/ # HUD オーバーレイ
│ │ ├── ai-chat/ # AI チャットサイドバー
│ │ ├── caption/ # キャプションウィンドウ
│ │ ├── chat/ # テキストチャット
│ │ ├── dock/ # コントロールボタン
│ │ └── status-bar/ # 接続・プレイヤー状態
│ ├── layout/ # レイアウト
│ ├── providers/ # コンテキストプロバイダー
│ ├── scene/ # 3D シーン(FloodWater, Rain, DefaultMap 等)
│ ├── ui/ # shadcn/ui コンポーネント
│ └── world/ # ワールドカード・インスタンスカード
├── constants/ # 定数(アニメーション、アバター、ワールド)
├── hooks/ # カスタム React Hooks
├── i18n/ # 国際化(en, ja)
├── lib/ # ユーティリティライブラリ
│ └── supabase/ # Supabase クライアント
├── stores/ # Zustand 状態ストア
├── types/ # TypeScript 型定義
└── utils/ # ユーティリティ関数
| コマンド | 説明 |
|---|---|
pnpm dev |
開発サーバーを起動 |
pnpm build |
プロダクションビルド |
pnpm start |
プロダクションサーバーを起動 |
pnpm lint |
Biome リンター実行 |
pnpm format |
Biome フォーマッター実行 |
pnpm typecheck |
TypeScript 型チェック |
pnpm test |
Vitest ユニットテスト実行 |
pnpm test:e2e |
Playwright E2E テスト実行 |
pnpm test:all |
全テスト実行(ユニット + E2E) |
pnpm storybook |
Storybook 開発サーバーを起動 |
pnpm build-storybook |
Storybook をビルド |
| ファイル | 内容 |
|---|---|
| docs/concept.md | コンセプト — 背景・目的・AIエージェントの役割 |
| docs/usage.md | 使い方ガイド — 操作方法・機能説明 |
| docs/evaluation.md | 評価プロトコル — 実施手順・準備事項 |
| docs/questionnaire.md | アンケート — 事後評価の質問項目 |
Copyright (c) 2026 Takuya UEHARA. All Rights Reserved.
本プロジェクトは長崎大学 瀬戸崎研究室とソフトバンク株式会社の共同研究の一環として開発されました。ソースコードは レビューおよび研究目的でのみ 提供されています。
再利用に関するライセンスはありません: 著者の明示的な書面による許可なく、本ソフトウェアのコピー、修正、マージ、公開、配布、サブライセンス、販売を行うことはできません。