3D UPGRADE GUIDE — VIRTUAL COMPANY × REACT-THREE-FIBER
CSSで作った2.5D版(virtual-company.jsx)を、react-three-fiber による本物の3D空間に進化させる構成ガイドです。 Agent Office(ブラック製作所)で培った react-three-fiber の資産がそのまま流用できるため、 ゼロからではなく「見た目の載せ替え」として設計します。 鍵は、シミュレーション(状態)と描画(3D)を最初から分離しておくことです。
一気に作り込まず、動くものを保ったまま段階的に載せ替えます。各段階で「デモに使える状態」を維持するのがポイントです。
「データ層」「状態層」「描画層」の3層構成にします。2.5D→3Dの載せ替えで交換するのは描画層だけ。これがS1の資産を無駄にしない設計です。
FIG. 1 — 3D バーチャル製作所 全体構成
この構成の要:3Dキャラは状態を持ちません。Zustandストアの agents[id].anim("idle" | "typing" | "walk" | "jump")を見て再生するだけ。だからシナリオエンジンとGitHub実データを、描画コードを1行も変えずに切り替えられます。
R3F化の勘所は3つ:「状態→アニメの写像」「lerpによる移動」「Htmlによる吹き出し」。それぞれ最小の骨格を示します。
注記:Claude.aiのアーティファクト上で試す場合は、react-three-fiberが使えないためthree.js(r128)を直接useEffectで組む形になります。本命はローカルのVSCode+Claude環境でR3F構成を組むこと。Agent Officeのプロジェクト構成が最良の参考実装です。
これが「監視カメラ化」の設計図。デモモードでもGitHubライブモードでも、同じイベントが同じ演出を起こします。
| イベント(共通形式) | GitHubライブモードでの発生源 | 3D空間での演出 |
|---|---|---|
| task.assigned | Issueにラベル・担当者が付与 | PMの机から担当者の机へ書類メッシュが放物線で飛ぶ+カメラが担当者へパン |
| agent.working | claude.yml のワークフロー実行が in_progress | キャラのanimが typing に。PC画面のエミッシブ発光が明滅、頭上に「考え中…」 |
| deliverable.created | コミットで docs/ にファイル追加 / Artifactアップロード | 机から成果物モニターへ📄が飛び、チップがポップイン+効果音(任意) |
| review.requested | PRが opened / review_requested | レビュー担当の机にスポットライト点灯、animが typing に |
| review.approved | PRが approved → merged | 担当キャラが jump、ボードの該当タスクが完了色に遷移 |
| watch.report | 週次レポートIssueの起票(P5) | 巡回担当が各机を歩いて回るパトロールアニメ → ボードにレポート掲示 |
| day.completed | その日の全ワークフロー完了 | 紙吹雪パーティクル → 全員が出口へ歩いて退勤 → ライトが夜モードへ減光 |
| escalation(needs-human) | needs-human ラベル付与(SHEET 8 P2) | 赤い回転灯が点灯し、社長の机に「稟議書」が飛ぶ。あなたへの通知と連動 |
GitHubアダプタの実装:Cloud Run(またはミニPC)上の小さなFastAPIが、GitHub REST APIを30〜60秒間隔でポーリング(workflow runs / issues / PRs)し、差分を上記イベント形式に変換してWebSocket/SSEでフロントへ配信。認証トークンをブラウザに出さないための中継役も兼ねます。
| ライブラリ | 役割 | 採用理由・メモ |
|---|---|---|
| react-three-fiber | 3D描画のReact統合 | three.jsをJSXで宣言的に書ける。Agent Officeで習熟済み=最大の資産 |
| @react-three/drei | 便利部品集 | Html(吹き出し)/ OrbitControls / useGLTF / ContactShadows が主力 |
| zustand | 状態層 | Canvas内外(3DとHTMLパネル)から同じストアを購読できるのが決定打 |
| glTFモデル + Mixamo | S3のキャラと動作 | 低ポリキャラにMixamoで idle/typing/walk のクリップを付与し useAnimations で切替アセットはライセンス(CC0等)を必ず確認 |
| FastAPI + SSE | GitHubアダプタ | ポーリング→イベント変換→配信。Cloud Runでスケールtoゼロ運用(SHEET 3) |
Claude Codeへの依頼のコツ:この構成図とイベント対応表をそのままコンテキストに渡し、「①だけ」「②だけ」とコマ単位で依頼すると精度が上がります。まさに自分の商品(SHEET 8)で自分が顧客になる実践です。
パフォーマンス予算を最初に決めるキャラ5体+小物なら余裕ですが、影・ポストエフェクトを盛ると急に重くなります。目標60fps・ドローコール100以下を先に決め、影はContactShadowsで済ませるのが低コストです。
3Dアセットのライセンス確認glTFモデル・アニメーションは商用デモに使う前提でCC0またはロイヤリティフリーを選び、出典を記録しておきます。MixamoはAdobeの利用規約の範囲で使用可能ですが、規約は変わり得るので採用時に確認を。
「動く3D」より「意味が伝わる3D」商品デモとしての価値は、クライアントが「AIが働いている様子が分かる」こと。演出を足すたびに「これは状態の理解を助けるか?」で判定し、装飾だけの動きは削る勇気を持つこと(needs-humanの赤色灯のような"意味のある演出"を優先)。