Version: | 1.1 |
---|
これは GoogleAppsScriptのソースです。
VRMViewMeisterからHTTP GET/POSTで呼び出して使います。 そのため、GoogleAppsScriptをウェブアプリとしてデプロイする必要があります。
実際にGoogleAppsScriptかどうかを判定していません。あくまでHTTP GET/POSTの引数・Postデータ・戻り値が合致しているかどうかです。
動作確認しているのはGoogleAppsScript製のウェブアプリです。それ以外の作成のWebAPIを使った場合の動作は保証しません。
なぜ一般的な方法であるアプリ内でGoogle APIを呼び出す方法ではないのか? 私は変わった試みをしてみました。
- OAuth 2.0クライアント情報やシークレットトークンをアプリ側でそもそも意識しないので、隠蔽や漏洩などを心配しないで済む。
- 各ユーザーに実行環境や認証情報が紐づいているため、アプリ側で流出する情報はありません。 また、ユーザー側も基本的にウェブアプリのURLしか固有の情報を保持していません。そしてユーザーが動かすスクリプトなので、ユーザー自身で停止するすべがちゃんと備わっています。
オープンソースなので何をしているかがわかる
- ユーザー自身の権限でウェブアプリを作るので自分自身を信じればいい
- Google APIを使ったアプリは、アプリにアクセスしてログインや承認をすることで使えるようになります。しかし本当にそのアプリがなにをやっているのか、いくらGoogleから公式に確認されたとはいえわかりません。そこでGoogleAppsScriptです。
本リポジトリでソースを公開しているので何をやっているか、コードが読めれば思えばすぐわかります。コードは他人(アプリ開発者)でもアクセス権限や実行情報はユーザーのものなので、使う際の安全性は確保できるのではと思います。
当然ですが、可能な限りわかりやすくなるようにシンプルなコードにしたつもりです。
- 実行の上限を独り占めできる
- APIの種類によりますが、通常の使い方であれば気にするほどの上限ではありません。たとえばDrive APIなどは潤沢に使うことができます。通常、GoogleAPIには上限や一定のタイミングで制限があります。特定のユーザーが使いすぎると、APIの上限に達した場合に時間を置くまでその機能が利用できない可能性があります。
アプリ開発者としても、あまり頻繁に使われすぎて課金が発生してしまうとヒヤヒヤしてしまうかもしれません。
ユーザー一人ひとりで見てみると、他のユーザーのことなど気にせず使いまくりたいと思うでしょう。そこでGoogleAppsScriptです。APIほど上限は多くありませんが、そのスクリプトではあくまでも自分のGoogleアカウント内の制限だけになります。
結論
- スクリプトの内容は他人のものでも、ユーザー自身がアプリのデプロイをおこなう。そのためGoogleからのアクセスのリクエストでは自分を信じればよい。
- なおかつVRMViewMeisterで使うか否かをいつでも自分の判断で決めることができる。
- ユーザー自身にGoogleAppsScriptをウェブアプリとしてデプロイしていただく手間が発生してしまう
第一はこれにつきると思います。Google APIであれば、各アプリを使う上で任意のタイミングでGoogleからのアクセスリクエストに許可をすれば済みます。
本スクリプトだと、まずGoogleドライブにてGoogleAppsScriptを操作して準備してもらう必要があります。 この点についてはGoogleAppsScriptのプロジェクトをドライブ上でコピーしていただくようにもします。
さらに、デプロイという、スクリプトをウェブアプリとして公開する操作も必要になります。
そしてさらに、Google APIと同じくGoogleからのアクセスのリクエストの操作も必要になります。
最後に、VRMViewMeisterでウェブアプリのURLを設定していただくことになります。
ver 1.1より、ファイル一覧の読み込み高速化のため、インデックスファイルを作成するようにしました。 対応するファイルの種類とインデックスファイル名は次の通りです。
ファイルの種類 | インデックスファイル名 |
モーション | VVM_VVMMOT_INDEX.csv |
ポーズ | VVM_VVMPOSE_INDEX.csv |
プロジェクト | VVM_VVMPROJ_INDEX.csv |
VRM | VVM_VRM_INDEX.csv |
3Dモデル | VVM_3DMODEL_INDEX.csv |
画像 | VVM_IMAGE_INDEX.csv |
VRMAnimation | VVM_VRMANIMATION_INDEX.csv |
mode=enumdir
実行時にドライブ上にこれらのファイルが存在しない場合、対応する拡張子のファイルを走査して新しくファイル一覧を生成してCSV形式のインデックスファイルを作成します。
2回目以降は上記インデックスファイルを参照します。
VRMViewMeisterから保存可能とするモーション・ポーズ・プロジェクトファイルは、Googleドライブに保存する前にファイルの一覧を開いてインデックスファイルを生成するようにしてください。
上記仕様のため、誤ってインデックスファイルを削除しても mode=enumdir
でアクセスすれば再び最新のインデックスファイルが作成されるので、本アプリからファイル一覧の高速な取得を期待できます。
列 | 値 |
1 | ファイル名 |
2 | ファイルの種類(mime type) |
3 | ファイルID |
4 | ファイルサイズ |
5 | 作成日(Javascriptの Date.valueOf()) |
6 | 更新日(Javascriptの Date.valueOf()) |
7 | 親フォルダID |
8 | 親フォルダ名 |
9 | データ(vvmpose, vvmmotのみ JSON.stringifyの内容) |
9列目のデータは、vvmposeの場合はサムネイル、vvmmotの場合はフレーム数やオブジェクトの大きさなどの基本的な情報を格納します。それ以外は空欄です。
構成 | 次のユーザーとして実行 | アクセスできるユーザー |
---|---|---|
ウェブアプリ | 自分 | 全員 |
これにより、Googleにログインしていない端末・機器でも、自分のドライブを参照してVRMViewMeisterで参照することができます。
Warning
- 発行したURLを絶対に他人に教えないでください。
- GoogleAppsScriptでデプロイした後のURLはバージョンごとに異なります。
Hint
セキュリティ対策
スクリプトプロパティに APIKEY
を設定してください。万が一ウェブアプリのURLが流出しても実行されないよう、必ず自分で値を決めてください。
[URL]?mode=enumdir
メソッド: GET
パラメータ(必須)
項目名 型 説明 mode String モード名 apikey String 本機能を実行するためのキー name String 検索するファイル名 extension String 検索する拡張子 withdata String ファイルの内容も合わせて読み込む(値は何でも良い)
パラメータ(任意)
項目名 型 説明 dirid String 検索するフォルダID dirname String 検索するフォルダ名 enumetype String オブジェクトの種類 (vvmpose, vvmmot, vvmproj, vrm, 3dmodel, image)
戻り値
JSON形式で次の内容です。
項目名 型 説明 cd Number 0=正常終了, 1=エラー msg String エラーメッセージ data Object 下記オブジェクト内容
項目名 型 説明 name String ファイル名 mimeType String MIMEタイプ id String ファイルID size Number ファイルサイズ createDate Date 作成日 updatedDate Date 更新日 dir.id String 存在するフォルダID dir.name String 存在するフォルダ名
[URL]?mode=load
メソッド: GET
パラメータ
項目名 型 説明 mode String モード名 apikey String 本機能を実行するためのキー fileid String ドライブのファイルID extension String ファイルの拡張子
戻り値
JSON形式で次の内容です。
項目名 型 説明 cd Number 0=正常終了, 1=エラー msg String エラーメッセージ name String ファイル名 size Number ファイルサイズ mimeType String MIMEタイプ data Any ファイルデータ [1] [2]
[1] | バイナリファイルの場合、 Byte[] |
[2] | json,vvmproj,vvmmot,vvmposeいずれかの拡張子のファイルの場合、 string |
[URL]?mode=confirmlast
メソッド: GET
パラメータ
項目名 型 説明 mode String モード名 apikey String 本機能を実行するためのキー fileid String ドライブのファイルID extension String ファイルの拡張子
戻り値
JSON形式で次の内容です。
項目名 型 説明 cd Number 0=正常終了, 1=エラー msg String エラーメッセージ data Array 下記オブジェクト内容
項目名 型 説明 name String ファイル名 id String ファイルID size Number ファイルサイズ mimeType String MIMEタイプ
[URL]?mode=saveas
メソッド: POST
VRMViewMeister用のため、対象ファイル形式は vvmproj,vvmmot,vvmpose
いずれかの拡張子のファイルとします。
パラメータ
項目名 型 説明 mode String モード名 apikey String 本機能を実行するためのキー nameoverwrite Any ファイル名で上書きするかどうか(1=上書きする) extension String ファイルの拡張子
Post body
Content-Type は application/json です。
項目名 型 説明 name String ファイル名 id String 上書き保存する際のファイルID destination String 保存先のフォルダID data Any ファイルの内容
- 戻り値
GoogleAppsScript製のウェブアプリをfetch関数などで呼び出す場合、戻り値にすべきJSONなどのデータを呼び出し元に戻せませんでした。
代わりに
GET
のmode=confirmlast
を直後に同じファイル名で呼び出して、戻り値の代わりとしています。
[URL]?mode=save
メソッド: POST
- パラメータ・Post bodyは
mode=saveas
と同様です。