初心者でもわかるGoogle Apps Script活用のススメ

【コピペで使える】GASでGoogleドライブにファイルを作成する

今回はGASでGoogleドライブに新規ファイルを作成するcreateFileというメソッドをご紹介します。
Googleドライブにファイルを保存するというのは日常的によくある場面かと思いますので、使用頻度は高いのではないかなと思います。

例えば、受信メールの添付ファイルやスクレイピングした画像データを的にGoogleドライブに保存したりといった使い方が思い浮かびます。
そういった場合に利用するのが今回ご紹介するcreateFileというメソッドになります。

スポンサーリンク

Googleドライブにファイルを作成する— createFile()

コピペで使えるサンプルコードを参照したい方はこちらをクリックすればサンプルコードまでジャンプできますので、手っ取り早くコードを確認したい方はクリックしてください。

さて、こちらのメソッドは読んで字のごとくファイルを新規作成するメソッドとなります。
こちらのメソッドではGoogleドライブに保存されている既存のファイルの新バージョンをアップロードしたりすることはできません。

本記事では一番ページの一番最後にファイルの新しいバージョンをアップロードする方法もサンプルコード付きで紹介しています。
すぐにそのサンプルコードを確認したい方はこちらをクリックしてください。
バージョン管理をするために利用するのはAdvanced Google ServiceのDrive APIを使う必要がありますので、使い方が少し違うということを頭に入れておいてもらえればと思います。

今回のメソッドですが、実はDriveAppクラスのメソッドとFolderクラスのメソッドとして同じcreateFileがあります。2つの違いはファイルの作成される場所にあります。

DriveAppクラスの場合は、マイドライブ直下にファイルが作成されます。
そのため、DriveAppクラスを使う場合で、任意のフォルダにファイルを作成したい場合はmoveToメソッドと併用する必要があります。

一方で、FolderクラスのメソッドとしてcreateFileを使う場合は事前に取得したフォルダに対してファイルが作成されます。
この違いは覚えておいたほうが良いと思います。

createFile以外でも同じような挙動をするメソッドにGoogleドライブにフォルダを作成するcreateFolderやgetFiles/getFoldersなどというメソッドがあります。
これらもDriveAppクラスとFolderクラスどちらにも用意されているメソッドですが、違いは作成先のフォルダがどこになるのかという違いで2つのメソッドが用意されているのです。

    1. createFile(blob)
    2. createFile(name, content)
    3. createFile(name, content, mimeType)

『 引数に入れる値 』

『 関連するメソッド 』

合わせて覚えたいフォルダやファイル操作に関するメソッド

createFile(blob)サンプルコード

Googleドライブに新規ファイルを作成するサンプルコード①
//マイドライブに新規ファイルを作成するコード
function sampleCodeForCreateFileInMyDrive1() {
  var url = "https://for-dummies.net/gas-noobs/wp-content/uploads/2019/12/DriveApp_createFile.png";
  var response = UrlFetchApp.fetch(url);
  var blob = response.getBlob();
  var file = DriveApp.createFile(blob);
  file.setName("初心者でもわかるGoogle Apps Script活用のススメのサンプル画像.png"); //任意の名前をつけるときはファイル作成後にsetNameで設定します
  //var fileId = file.getId(); //新規ファイルのIDを取得する
}

//任意のフォルダに新規ファイルを作成するコード
function sampleCodeForCreateFileInASpecificFolder1() {
  var url = "https://for-dummies.net/gas-noobs/wp-content/uploads/2019/12/DriveApp_createFile.png";
  var response = UrlFetchApp.fetch(url);
  var blob = response.getBlob();
  var folder = DriveApp.createFolder("【GAS】サンプル画像保存フォルダ");
  var file = folder.createFile(blob);
  file.setName("初心者でもわかるGoogle Apps Script活用のススメのサンプル画像.png"); //任意の名前をつけるときはファイル作成後にsetNameで設定します
  //var fileId = file.getId(); //新規ファイルのIDを取得する
}

『 変数の説明 』

url = Blobデータを取得するサンプル画像保存先URL(当ブログの画像URL)
response = URLにリクエストを送った際のレスポンス
blob = レスポンスデータをBlobデータに変換
file = Blobデータをドライブに保存したファイル
folder = マイドライブに新規作成したフォルダ

DriveApp.createFolder(blob)のサンプルコード』に上記サンプルスクリプトを記載したスクリプトがありますので、アクセスして関数名を選択後にボタンをクリックしてプログラムを実行してみましょう。
プログラムの実行が完了したらマイドライブフォルダを覗いてみましょう。

関数名sampleCodeForCreateFileInMyDrive1を選択して実行をすると、当ブログの画像が『初心者でもわかるGoogle Apps Script活用のススメのサンプル画像.png』という名前でマイドライブに保存されているのが確認できると思います。

関数名sampleCodeForCreateFileInASpecificFolder1を選択して実行をすると、マイドライブ直下に『【GAS】サンプル画像保存フォルダ』というフォルダが生成され、その中に『初心者でもわかるGoogle Apps Script活用のススメのサンプル画像.png』というファイル名の画像ファイルが保存されていると思います。

このように、BlobデータをGoogleドライブに保存する方法がcreateFile(blob)の使い方になります。

ちなみに、作成するファイルの名前に拡張子をつけなくてもGoogleドライブではファイルが認識されるので、必ずしも付ける必要はないのですが、もしクライアントアプリでパソコンのローカルディスクにファイルを同期している場合、拡張子が設定されていない場合はファイルが認識できない場合がありますので、つけておいたほうが良いですよ。

createFile(name, content)サンプルコード

Googleドライブに新規ファイルを作成するサンプルコード②
//マイドライブに新規ファイルを作成するコード
function sampleCodeForCreateFileInMyDrive2() {
  var name = "createFile(name, content)サンプルテキスト.txt";
  var content = "Hello, World!";
  var file = DriveApp.createFile(name, content);
  //var fileId = file.getId(); 新規ファイルのIDを取得する
}

//任意のフォルダに新規ファイルを作成するコード
function sampleCodeForCreateFileInASpecificFolder2() {
  var folder = DriveApp.createFolder("【GAS】createFile(name, content)サンプルテキスト保存フォルダ");
  var name = "createFile(name, content)サンプルテキスト.txt";
  var content = "Hello, World!";
  var file = folder.createFile(name, content);
  //var fileId = file.getId(); 新規ファイルのIDを取得する
}

『 変数の説明 』

name = ファイル名を指定
content = ファイルの内容を指定
file = ドライブに作成した新規ファイル
folder = マイドライブに新規作成したフォルダ

DriveApp.createFolder(name, content)のサンプルコード』に上記サンプルスクリプトを記載したスクリプトがありますので、アクセスして関数名を選択後にボタンをクリックしてプログラムを実行してみましょう。
プログラムの実行が完了したらマイドライブフォルダを覗いてみましょう。

関数名sampleCodeForCreateFileInMyDrive2を選択して実行をすると、『createFile(name, content)サンプルテキスト.txt』というファイル名でマイドライブにテキストデータが保存されているのが確認できると思います。

関数名sampleCodeForCreateFileInASpecificFolder2を選択して実行をすると、マイドライブ直下に『【GAS】createFile(name, content)サンプルテキスト保存フォルダ』というフォルダが生成され、その中に『createFile(name, content)サンプルテキスト.txt』というファイル名の画像ファイルが保存されていると思います。

最初に紹介したBlobデータと違い、テキストベースでファイルを作成する方法がcreateFile(name, content)の使い方になります。

createFile(name, content, mimeType)サンプルコード

Googleドライブに新規ファイルを作成するサンプルコード③
//マイドライブに新規ファイルを作成するコード
function sampleCodeForCreateFileInMyDrive3() {
  var name = "createFile(name, content, mimeType)サンプルファイル.html";
  var content = "Hello, World!";
  var mimeType = MimeType.HTML;
  var file = DriveApp.createFile(name, content, mimeType);
  //var fileId = file.getId(); 新規ファイルのIDを取得する
}

//任意のフォルダに新規ファイルを作成するコード
function sampleCodeForCreateFileInASpecificFolder3() {
  var folder = DriveApp.createFolder("【GAS】createFile(name, content, mimeType)サンプルHTMLフォルダ");
  var name = "createFile(name, content, mimeType)サンプルテキスト.html";
  var content = "Hello, World!";
  var mimeType = MimeType.HTML;
  var file = folder.createFile(name, content, mimeType);
  //var fileId = file.getId(); 新規ファイルのIDを取得する
}

『 変数の説明 』

name = ファイル名を指定
content = ファイルの内容を指定
mimeType = MIMEタイプを指定
file = ドライブに作成した新規ファイル
folder = マイドライブに新規作成したフォルダ

DriveApp.createFolder(name, content, mimeType)のサンプルコード』に上記サンプルスクリプトを記載したスクリプトがありますので、アクセスして関数名を選択後にボタンをクリックしてプログラムを実行してみましょう。
プログラムの実行が完了したらマイドライブフォルダを覗いてみましょう。

関数名sampleCodeForCreateFileInMyDrive3を選択して実行をすると、『createFile(name, content, mimeType)サンプルファイル.html』という名前でマイドライブにHTMLファイルが保存されているのが確認できると思います。

関数名sampleCodeForCreateFileInASpecificFolder3を選択して実行をすると、マイドライブ直下に『【GAS】createFile(name, content, mimeType)サンプルHTMLフォルダ』というフォルダが生成され、その中に『createFile(name, content, mimeType)サンプルファイル.html』というファイル名の画像ファイルが保存されていると思います。

こちらもテキストベースでファイルを作成する方法ではありますが、ファイルの種類を指定することができる点で、2つ目のメソッドとは異なります。

【小ネタ】既存のファイルに新バージョンをアップロードする方法

先程までは、Googleドライブに新規ファイルを保存する方法をご紹介しました。DriveAppには新バージョンをアップロードするためのメソッドが用意されているとは思っている方も少なくないと思います。

しかしながら、実はそのようなメソッドは用意されていないのが現状で、DriveAppでファイルの更新をするためには一度ファイルを削除して新しいファイルを作成するというオペレーションをせざるを得ません。

このやり方では、見え方はファイルが更新されたように見えるのですが、ファイルを削除しているため、バージョン管理を行うことができず過去バージョンを復元することもできません。
(厳密にはゴミ箱に30日間残っているので、復元はできるのですが、バージョン管理という意味ではあまり使えません)

また、ファイルが削除されてしまうということはファイルのIDも変わってしまうことになるため、IDを利用したシステムや一覧表などを作成している場合は毎回IDの変更をする必要があります。

正直、そんなのめんどくせぇ!

と思うのは私だけではないはず。皆さんバージョン管理したいですよね。そう思ってGASでのバージョン管理実行方法をこれから紹介します。

新バージョンをアップロードするサンプルコード

Googleドライブにファイルの新しいバージョンをアップロードするサンプルコード
//マイドライブに新規ファイルを作成するコード
function createSampleFile() {
  var name = "GASでファイルのバージョン管理をする.html";
  var content = "Hello, World!";
  var mimeType = MimeType.HTML;
  var file = DriveApp.createFile(name, content, mimeType);
  var fileId = file.getId();
  var properties = PropertiesService.getUserProperties();
  properties.setProperty("id", fileId);
}

//作成したファイルに対して新しいバージョンをアップロードするコード
function sampleCodeForMakingRevisionHistoryManagement() {
  var properties = PropertiesService.getUserProperties();
  var fileId = properties.getProperty("id");
  var file = DriveApp.getFileById(fileId);
  var content = "Content Updated!!";
  var mimeType = MimeType.HTML;
  var blob = Utilities.newBlob(content, mimeType);
  var resource = {
    title: file.getName(),
    mimeType: file.getMimeType()
  }
  Drive.Files.update(resource, fileId, blob);
}

『 変数の説明 』

name = ファイル名を指定
content = ファイルの内容を指定
mimeType = MIMEタイプを指定
file = ドライブに作成した新規ファイル
fileId = 作成したファイルIDを格納
properties = ユーザーごとのカスタムプロパティを格納
blob = 新バージョンのBlobデータを格納
resource = 新バージョンのファイル設定を指定

バージョン管理をするためには、Google Apps ScriptのAdvanced Google Servicesの一つであるDrive API(公式ドキュメント)を活用します。その中のFiles.updateというメソッドで新バージョンのアップロードを実現できます。

上記のサンプルコードは『新バージョンをアップロードするサンプルコード』から実行することができます。

実行の手順ですが、まずは『createSampleFile』を実行してマイドライブ直下に『GASでファイルのバージョン管理をする.html』を作成します。
新バージョンをアップロードするためには、ファイルIDが必要となりますので、サンプルコードでは、IDを再利用するためにユーザーカスタムプロパティにIDを格納しています。

次に、『sampleCodeForMakingRevisionHistoryManagement』を実行することで、新バージョンのアップロードすることができます。
サンプルでは、ファイル名等は同じで、ファイルの内容データだけ変更した形でアップロードしていますが、必ずしも同じにする必要はありません。
実行が完了したあとに、処理が成功下かどうかを確認するためには、ファイルを右クリックして『版を管理』をクリックします。

下記のようなダイヤログが表示され、バージョン管理ができていることが確認できれば処理は正常に完了していると言えます。

バージョン管理をするこのファイル更新であれば、ファイルIDが変更されることは無いので、他のシステムやファイルの共有等をしている場合でもURLが変わるなどの影響がなく扱いやすいと思います。
また、バージョン履歴を100個まで持つことができますので、過去のファイルを確認したい場合でもさかのぼって確認することができます。

まとめ

今回はGoogle Apps Scriptを使ってGoogleドライブに新しいファイルを作成する方法をご紹介しました。
使い方はシンプルですので少し使ってみれば簡単に使い方を身につけることができると思います。
ただし、DriveAppのメソッドだけでは、バージョン管理を含めたシステム構築をすることができませんので、必要に応じてDrive APIを活用して機能を拡張する必要があることは頭に入れておいたほうが良いかもしれません。

Exit mobile version