Skip to content

nishlumi/vrmviewmeister-gdrive-extension

Repository files navigation

vrmviewmeister-gdrive-extension

Google Drive loader for VRMViewMeister

Version: 1.1

これは GoogleAppsScriptのソースです。

VRMViewMeisterからHTTP GET/POSTで呼び出して使います。 そのため、GoogleAppsScriptをウェブアプリとしてデプロイする必要があります。

VRMViewMeister側でやっていること

実際にGoogleAppsScriptかどうかを判定していません。あくまでHTTP GET/POSTの引数・Postデータ・戻り値が合致しているかどうかです。

動作確認しているのはGoogleAppsScript製のウェブアプリです。それ以外の作成のWebAPIを使った場合の動作は保証しません。

GoogleAppsScriptを使うメリット

なぜ一般的な方法であるアプリ内でGoogle APIを呼び出す方法ではないのか? 私は変わった試みをしてみました。

OAuth 2.0クライアント情報やシークレットトークンをアプリ側でそもそも意識しないので、隠蔽や漏洩などを心配しないで済む。
各ユーザーに実行環境や認証情報が紐づいているため、アプリ側で流出する情報はありません。 また、ユーザー側も基本的にウェブアプリのURLしか固有の情報を保持していません。そしてユーザーが動かすスクリプトなので、ユーザー自身で停止するすべがちゃんと備わっています。

オープンソースなので何をしているかがわかる

ユーザー自身の権限でウェブアプリを作るので自分自身を信じればいい
Google APIを使ったアプリは、アプリにアクセスしてログインや承認をすることで使えるようになります。しかし本当にそのアプリがなにをやっているのか、いくらGoogleから公式に確認されたとはいえわかりません。
そこでGoogleAppsScriptです。

本リポジトリでソースを公開しているので何をやっているか、コードが読めれば思えばすぐわかります。コードは他人(アプリ開発者)でもアクセス権限や実行情報はユーザーのものなので、使う際の安全性は確保できるのではと思います。

当然ですが、可能な限りわかりやすくなるようにシンプルなコードにしたつもりです。

実行の上限を独り占めできる
APIの種類によりますが、通常の使い方であれば気にするほどの上限ではありません。たとえばDrive APIなどは潤沢に使うことができます。
通常、GoogleAPIには上限や一定のタイミングで制限があります。特定のユーザーが使いすぎると、APIの上限に達した場合に時間を置くまでその機能が利用できない可能性があります。

アプリ開発者としても、あまり頻繁に使われすぎて課金が発生してしまうとヒヤヒヤしてしまうかもしれません。

ユーザー一人ひとりで見てみると、他のユーザーのことなど気にせず使いまくりたいと思うでしょう。
そこでGoogleAppsScriptです。

APIほど上限は多くありませんが、そのスクリプトではあくまでも自分のGoogleアカウント内の制限だけになります。

結論

  • スクリプトの内容は他人のものでも、ユーザー自身がアプリのデプロイをおこなう。そのためGoogleからのアクセスのリクエストでは自分を信じればよい。
  • なおかつVRMViewMeisterで使うか否かをいつでも自分の判断で決めることができる。

GoogleAppsScriptを使うデメリット

ユーザー自身に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 でアクセスすれば再び最新のインデックスファイルが作成されるので、本アプリからファイル一覧の高速な取得を期待できます。

CSVの内容

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などのデータを呼び出し元に戻せませんでした。

代わりに GETmode=confirmlast を直後に同じファイル名で呼び出して、戻り値の代わりとしています。

ファイルを保存する

[URL]?mode=save

メソッド: POST

  • パラメータ・Post bodyは mode=saveas と同様です。

About

Google Drive loader extension for VRMViewMeister

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published