課題
物件のパノラマ画像は、これまで特定メーカーの360度カメラ専用サービスに依存していました。けれども現場で実際に使われている機材は、すでにばらばらです。
- メーカー製以外のカメラで撮った画像が、そのままでは表示できない。Insta360、GoPro MAX、他社製の全天球カメラ、スマートフォンのパノラマ。撮る人はもう、1社の機材だけを使ってはいません
- 対応機材を増やすたびに、表示のしくみを作り直すことになる。機材ごとに表示ロジックを足していけば、いずれ手が付けられなくなります
- すでに公開されている表示URLが、約140万件ある。載せ替えの間、物件ページからパノラマが消えることは許されません
設計したこと
① 機材の違いを、入口で吸収する。撮影機材ごとの差は取り込み口で正規化し、表示は360度/180度の2種類に統一しました。機材が増えても、表示側を作り直さずに済む形です。
② 冪等な連携API。基幹システムから画像を受け取り、変換し、表示URLを返す。同じ画像を二度渡されても結果が壊れないことを前提に設計しています。
③ 無停止移行。約140万件の旧URLを新URLへ移し替えます。変換処理を並列に動かして所要時間を詰め、移行中もパノラマが非表示にならないことを要件として明記しました。
④ 想定規模から、先に構成を決める。月間約60万PV、同時接続 約300台、月間約2.5万件の変換、初期データ量 約15TB・年間約3.6TB増。この数字を先に置いたうえで、配信・防御・スケールアウトの構成を決めています。
規模と構成
| 移行対象 | 既存の表示URL 約140万件(無停止で移行) |
| 想定トラフィック | 月間 約60万PV / 同時接続 約300台 |
| 変換件数 | 月間 約2.5万件 |
| データ量 | 初期 約15TB / 年間増加 約3.6TB(削除なし・永久保存) |
| 対応機材 | 全天球カメラ各社(360度表示)/ スマートフォン・その他機種(180度表示) |
| 技術構成 | React・TypeScript / Node.js・TypeScript / AWS(オブジェクトストレージ・サーバーレス画像処理・コンテナ実行基盤・NoSQLデータベース・CDN・WAF)/ FTP経由の一括取り込み |
| 成果物 | 要求要件書、基本設計書(システム構成・機能一覧・画面遷移図・画面レイアウト・アクティビティ図・シーケンス図・テーブル一覧・ER図・データ移行方式) |
この案件で、いちばん時間を使ったところ
変換アルゴリズムではありません。「今、どう動いているか」を確認する作業でした。基本設計書の最後には、お客様への確認事項が6件残っています。既存システムの受付API仕様。現行のFTP取り込み手順。旧サービスからデータを書き出せるのか。誰がどの機能を使うのか。
ここを詰めないまま作ると、動くけれど載せ替えられないシステムができあがります。確認事項は、設計書に残したうえでお渡しします。