- Web フレームワーク:React.js (ver18.2.0)
- 3D 対応ライブラリ:Three.js (ver0.158.0)
- Firebase Project
- Authentication
- Firestore Database
- Cloud Storage
- Cloud Function
※Firebase のプロジェクトの設定方法、ローカルでの環境構築方法、仕様方法については Firebase のドキュメントを参照してください。
データモデルを参考に、タンジブル駒(buildings、furnitures、specials)を登録しておきます。
- cors 設定で弾かれるため、cors.json を作成します
[
{
"origin": ["http://localhost:5173", "https://********.firebaseapp.com", "https://********.web.app"],
"method": ["GET"],
"maxAgeSeconds": 3600
}
]
- cors.json を作成したフォルダ(基本はプロジェクトのルート)にて、gsutl コマンドを実行してください
gsutil cors set cors.json gs://********.appspot.com
- 国土地理院の画像を生成するために Function 側で osm-static-maps というライブラリを利用していますが、このライブラリは puppeteer というライブラリを利用しています
この puppeteer は v19 以降でかなり破壊的な変更が加えられており、osm-static-maps の最新版では対応できていません
そのため、osm-static-maps のgithub ページからソースファイルを直接ダウンロードし、Function 内に直接追加しています(functions/third_party/osm/) - Puppeteer を Cloud function にて使用する方法はここやここが参考になります
.puppeteerrc.cjs
の追加
const {join} = require('path');
/**
* @type {import("puppeteer").Configuration}
*/
module.exports = {
// Changes the cache location for Puppeteer.
cacheDirectory: join(__dirname, '.cache', 'puppeteer'),
};
- puppeteer をすでにインストールしていれば一度アンインストールし、再度インストール
firebase.json.
に追記
{
"functions": [
{
"ignore": [
".cache", // これを追記
...
],
...
}
],
...
}
- デプロイ時に Chromium 本体をアプロードしないため。そうしないと「パッケージが大きすぎるためデプロイできません」等のエラーがでます
package.json
(function 側)に追記
{
"scripts": {
"postinstall": "node node_modules/puppeteer/install.js", // これを追記
...
},
...
}
- Cloud Functions ではデプロイ後の
npm install
時に Chromium が自動的にインストールされないので、postinstall でインストールスクリプトを実行してください。
- 予め 0 から 120 番までのマーカー画像を public/aruco に用意しています
Aruco マーカーについて、詳しくは、こちらのサイトを参照してください。
本アプリでは、地図上の範囲、使用するタンジブルユニット、使用するタンジブル駒を関連付けたまとまりを「ワークスペース」と呼んでいます。
ログインユーザーはワークスペースを作成したり、スナップショットを登録したりすることができます。ここでは、本アプリの主な操作であるワークスペースの作成方法とスナップショットの作成方法を解説します。
- ログイン後、「新規ワークスペース作成」ボタンを押して、ワークスペースを作成します。
以降の操作は、検討範囲ごとに繰り返します。
- 連携させるタンジブルユニットを指定します
- 地図上を指定して検討範囲を設定します
- 使用するタンジブル駒を指定します
- ワークスペースの画面から「VR モード」ボタンを押して、VR モードを起動します
- 「スナップショット作成」ボタンを押します
- タイトルとコメントを入力して「保存」して完了です。
アプリのデプロイに成功すると、API が使えるようになります。用意されている API の種類や仕様についてはAPI ドキュメントを参照してください。