libro
www.tuyano.com
初心者のためのGoogle Apps Scriptプログラミング入門

Google Drive APIによるファイル管理 (1/5)

作成:2013-05-26 10:42
更新:2013-05-26 10:42

■ファイル/フォルダの一覧を取得する

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ならばすべて取り出し終えたことを示します。

実際の利用例として、簡単なスクリプトを下に掲載しておきます。getFilesgetFoldersを使い、すべてのファイルとフォルダを取得して順番にLogger.logで出力していきます。なお、実行する際には、Googleドライブへのアクセスを許可するためのアクセス権の承認アラートが表示されますので、アクセスを許可してください。

実行後、ログの内容をチェックしてみてください。ファイル名とフォルダ名が一覧で表示されるでしょう。

実際にこれらを実行するとわかるのですが、getFiles/geFoldersで得られるのは、Googleドライブの「ルートにある項目」ではなく、全項目です。

Googleドライブは、MacやWindowsで普通のディスクボリュームと同じ感覚で扱えるようになったため、殆どの人は「Googleドライブの中も、またハードディスクと同じようにフォルダで階層的に整理されているのだ」と思っていますが、これらのメソッドで扱う場合、ファイルやフォルダは階層的な構造ではなく、ただの「一覧リスト」になっていることに注意する必要があるでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

function myFunction() {
  var files = DriveApp.getFiles();
  Logger.log("***files***");
  while(files.hasNext()){
    Logger.log(files.next());
  }
  var folders = DriveApp.getFolders();
  Logger.log("***folders***");
  while(folders.hasNext()){
    Logger.log(folders.next());
  }  
}

※関連コンテンツ

「初心者のためのGoogle Apps Scriptプログラミング入門」に戻る