Googleではさまざまなサービスでファイルやドキュメントを作成したり保存したりできますが、そうした「Googleサービスのファイル類をまとめて扱う」ために用意されたのが「
Googleドライブ」です。現時点では、Googleドキュメントなどの従来からあるGoogle Appsのオフィス関連ファイルが中心ですが、Googleでは各種サービスのデータ類についてGoogleドライブへの統合を進めており、近い将来、すべてのGoogle関連のデータ類をすべてGoogleドライブで一括管理することになるでしょう。
となれば、このGoogleドライブのファイル操作をGoogle App Scriptでできれば、Googleのあらゆるデータ管理を自動化できるようになるわけです。今のうちから、Googleドライブ操作の基本ぐらいは覚えておきたいですね。
Googleドライブのための機能は、「
Google Drive API」として提供されています。これは「
DriveApp」というオブジェクトの形で用意されています。この中のメソッドを呼び出すことで、Googleドライブ内のファイルやフォルダなどを取得することができます。まずは、それらのメソッドを整理しておきましょう。
●全ファイルの取得変数 = DriveApp.getFiles();
●全フォルダの取得変数 = DriveApp.getFolders();
これらのメソッドで、すべてのファイル/フォルダを得ることができます。返値は配列などではなく、「
FileIterator」「
FolderIterator」といったオブジェクトになっています。これは「
イテレーター」と呼ばれる機能を提供するオブジェクトです。イテレーターというのは、配列のようにたくさんのオブジェクトをまとめ、そこから1つずつ順番に値を取り出していくための仕組みです。
これらのオブジェクトには、以下のようなメソッドが要されており、これらを使って順にオブジェクトを取り出していくことができます。
●ファイル/フォルダを取り出す変数 = 《イテレーター》.next();
●ファイル/フォルダが残っているか調べる
変数 = 《イテレーター》.hasNext();
「
next」は、ファイルを順番に取り出していくためのものです。最初に
nextを呼び出すと最初のオブジェクトが返され、もう一度呼び出すと2番目のオブジェクトが、更に呼びだすと3番めが……というように、
nextを呼び出す度に順番にオブジェクトが取り出されていきます。すべて取り出し終えた後、更に
nextを呼ぶと
nullになります。
「
hasNext」は、まだ
nextで取り出せるオブジェクトが残っているかどうかを調べます。返値が
trueならば残っており、
falseならばすべて取り出し終えたことを示します。
実際の利用例として、簡単なスクリプトを下に掲載しておきます。
getFilesと
getFoldersを使い、すべてのファイルとフォルダを取得して順番に
Logger.logで出力していきます。なお、実行する際には、Googleドライブへのアクセスを許可するための
アクセス権の承認アラートが表示されますので、アクセスを許可してください。
実行後、ログの内容をチェックしてみてください。ファイル名とフォルダ名が一覧で表示されるでしょう。
実際にこれらを実行するとわかるのですが、
getFiles/
geFoldersで得られるのは、Googleドライブの「ルートにある項目」ではなく、
全項目です。
Googleドライブは、MacやWindowsで普通のディスクボリュームと同じ感覚で扱えるようになったため、殆どの人は「Googleドライブの中も、またハードディスクと同じようにフォルダで階層的に整理されているのだ」と思っていますが、これらのメソッドで扱う場合、ファイルやフォルダは階層的な構造ではなく、ただの「一覧リスト」になっていることに注意する必要があるでしょう。