FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

GAS SDKを使ってGoogle Driveのファイルをファイルストアに一括アップロードする

f:id:mbaasdevrel:20190222161342p:plain

mBaaSのファイルストアを使えばアプリで利用するリソース(画像や音楽、その他ファイル)を保存しておけます。多くの場合、管理画面を使ってアップロードを行うと思います。

しかしファイルが大量にある場合、管理画面で一つずつアップロードするのは不便です。そこでGoogle Apps Script用のSDKを使って、Google Driveの特定フォルダにあるファイルを一括アップロードしてみます。

GAS用SDKの利用について

GAS用SDKは 1yWnb7GfYsBCR-MZvi6r-TOYv_y-AV4le5P7kaG5B3iZ5VNnSk9Q55pSJ で公開しています。最新版を使うようにしてください。なお、こちらのライブラリは v8 に対応していませんのでご注意ください。

GAS用SDKの初期化

mBaaSのアプリケーションキー、クライアントキーを使って初期化します。

var applicationKey = '53e...fff';
var clientKey = '3ba...bbf';
var ncmb = NCMB.init(applicationKey, clientKey);

フォルダの中にある画像を取得する

Google Driveで特定のディレクトリ以下のファイルを取得するには以下のように行います。 DIR_ID はGoogle DriveのフォルダIDです。 https://drive.google.com/drive/u/0/folders/abcdefg といったURLである時の abcdefg がフォルダIDです。

var id_dir = DriveApp.getFolderById('DIR_ID');
var files = id_dir.getFiles();
for(var i = 0; files.hasNext(); i++) {
  // 一つ一つのファイルに対する処理
}

ファイルをアップロードする

ファイルをファイルストアへアップロードするには、以下のように書きます。ACLを使う場合には ncmb.File.upload の3つ目の引数で指定してください。

var file = files.next();
ncmb.File.upload(file.getName(), file.getBlob());

全体のコード

全体のコードは以下のようになります。詳細はコメントを参考にしてください。

function update() {
  // NCMB SDKの初期化
  var applicationKey = '53e...fff';
  var clientKey = '3ba...bbf';
  var ncmb = NCMB.init(applicationKey, clientKey);
  
  // Google Driveのファイルを取得
  var id_dir = DriveApp.getFolderById('DIR_ID');
  var files = id_dir.getFiles();
  
  // ファイルを一つずつ処理
  for(var i = 0; files.hasNext(); i++) {
    // 処理対象のファイルを取得
    var file = files.next();
    // ファイルストアにアップロード
    ncmb.File.upload(file.getName(), file.getBlob());
  }
}

まとめ

Google Driveを経由することで、クラウドストレージを使ってファイルを管理できるようになります。遠隔地のデザイナーと協業したりする際にも簡単です。ぜひGoogle Driveを使っている際には試してみてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。