Google Apps ScriptにはGoogle Driveを検索するDriveAppというクラスが存在しているのですが、このクラス実はGoogle Driveの全ての機能を網羅していません。その為、Google Driveで自分が行っている動作(例えば、相手に通知をしないでオーナー権限を変更する)といった動作をしたくても、DriveAppでは出来ません。

一方で、Google Apps ScriptはDrive API v2が使えるようになっており、こちらはGoogle Driveでの全ての動作に関してメソッドをサポートしています。しかしこの中には、表向き見えない機能についてのメソッドがあります。それが「カスタムプロパティ」。今回はこのカスタムプロパティについて調べてみました。

今回使用するファイル

カスタムプロパティとは?

概要

Google Cloud Next 2019での発表の中で「Google Driveのファイルに色々メタデータつけられるよ」という発表がありましたが、そもそも、Google Drive API v2からは、ファイルに対して自分で好きなタグというかプロパティを設定できる「カスタムプロパティ」という機能が備わっています。

この機能自体はかなり前から存在しているものの、Google Drive上からは見えない設定であるため、あまり知られていないようです・・・自分がこの機能に目をつけた事の発端は、「DriveAppのsearchFilesで日本語ファイル名で検索すると一部のファイルが検出されない」というバグに気がついて、なんとか指定のファイルをリストアップできないかな?と思って探したのがこの機能でした。

カスタムプロパティ自体はJSONのキーバリューのように{key : “kinoko”, value:”マツタケ”, visibility:”PUBLIC”}といったように付加が出来、また、それを元にsearchFilesのクエリで検索させる事ができるようになっています。メタデータとは違うようです。

また、Drive上では設定するUIが存在しないので、利用する場合には管理用のアプリケーションとスプレッドシートを作っておくと良いでしょう。

※前回の記事のスクリプトプロパティとは全く違う機能です。

制限

カスタムプロパティの付加には以下の制限があります。

  1. 1つのファイルに付けられるカスタムプロパティは100個まで
  2. 1つのファイルに設定できるPUBLICプロパティ30個まで
  3. 1つのアプリケーションから設定できるPRIVATEプロパティは30個まで
  4. UTF8エンコードでプロパティの最大文字列数は124バイトまで(keyとvalue合わせて)
  5. カスタムプロパティの設定はパフォーマンスに影響を及ぼします
  6. appProperties(単一のアプリケーションからだけに制限)とProperties(すべてのアプリケーションから見える)の2種類にわかれる

とのこと。パフォーマンスの下りがどれだけ影響するか?といっても日常使用レベルでは取り上げるまでもないレベルじゃないかなと思います。

事前準備

Google Apps Scriptから利用するためには、Cloud Consoleへの紐付け設定が必要になります。

  1. Google Cloud Consoleを開く
  2. 左上にある▼をクリックする
  3. ダイアログが出てくるので、新規プロジェクトを作るか?既存のプロジェクトを選択する。この時、G Suiteであれば選択元は「自分のドメイン」を選択する必要があります。
  4. プロジェクト情報パネルから「プロジェクト番号」をコピーする
  5. Drive APIが追加されていない状態ならば、Drive APIをAPIから探して追加しておきましょう。
  6. 対象のGoogle Apps Scriptのスクリプトエディタを開く
  7. 「リソース」⇒「Cloud Platform プロジェクト」を開く
  8. 4.で入手した番号をプロジェクトを変更のテキストボックスに入れて、プロジェクトを設定ボタンをクリックする
  9. 無事に移動が完了すればメッセージが表示されます。
  10. この時、元の自動作成されたプロジェクトはシャットダウンされて消えます。これで設定完了です。

また、以下の作業も必要です。

  1. スクリプトエディタのメニューより「リソース」⇒「Googleの拡張サービス
  2. Drive APIを見つけて、ONにする

図:Drive APIはDriveAppとは異なります。

コードと結果

ソースコード

  • addCustomProperty関数が、対象のファイル(ID)に対して、カスタムプロパティを追加する機能になります。
  • visibilityの設定は必ず付けましょう。
  • Drive.Properties.insertでプロパティをセットします。何度も行なうと何個も追加されます。
  • Drive.Properties.getで指定したファイル(ID)の指定したキーに対する値を拾ってきます。
  • searchDrive関数が、Drive APIにてGoogle Driveを検索するメソッドになります。
  • Drive.Files.listに検索クエリを追加し、itemsで拾えます。値はJSONで返ってきます。
  • 検索クエリでは、properties hasに続けて、キー、値、visibilityを必ず付けます。
  • argsに設定できるオプションは色々あります。

結果

今回は適当な公開ファイルに対して、カスタムプロパティをセットしてみました。Drive APIでのitemsの返り値は非常に多くの情報が返ってくるので、DriveAppとは異なり扱いやすいかもしれません。

  • 検索の結果、kinokoというキーにmatsutakeというカスタムプロパティがついているのが確認できました。
  • visibilityがPUBLICなので全てのアプリケーションから参照が可能になっています。

API Explorerでの検証方法

これらのカスタムプロパティについては、スクリプト上だけでなく、Drive REST APIのページからも検証が可能です。例えば、Drive.Files.listの場合はこちらのページから。

listの場合には、ファイルIDを入れてExecuteボタンを押すだけです。認証が発動しますので許可をして完了。下のほうに返り値として、JSON値が出てきます。ここにも以下のような形で値を確認できます。もちろん、Insertgetでも同様です。実際にタグが付いてしまうので、扱いは注意が必要です。

図:実際にAPIを実行してテストが可能

関連リンク

共有してみる: