コンテンツに移動
デベロッパー

Google Apps Script を使用したバッチ リクエストによる効率的なファイル管理

2022年10月13日
Google Cloud Japan Team

※この投稿は米国時間 2022 年 9 月 30 日に、Google Cloud blog に投稿されたものの抄訳です。

概要

小規模なファイル管理ジョブであれば Google ドライブだけで処理できますが、大量のファイルのバッチ処理を行う場合、ドライブの単純なスクリプトだけで管理するのは難しくなります。Google Apps Script を使えば、大規模なバッチ処理でも 6 分以内で実行できるため、企業は効率的なファイル管理によって金銭的および時間的な恩恵を受けることができます。このレポートでは、Google Apps Script によってバッチ リクエストのファイル管理がどのように改善するかを検証し、ベンチマークを測定してその有効性を判断します。

はじめに

Google Apps Script で少数のファイルを管理する必要がある場合は、Drive Service を活用してそのジョブを処理できます。とはいえ、ファイルの数が非常に多い場合は、Drive Service が作成するスクリプトのプロセスの負担が非常に大きくなることがあります。


公式の Drive API ドキュメントの「Batch requests(バッチ リクエスト)」セクションでは、バッチ処理は複数のリクエストを処理できると説明されています。実際に、非同期プロセスは 1 回の API 呼び出しで最大 100 件の Drive API リクエストを処理できます。そのため、ファイル管理にバッチ リクエストを使用すると、プロセスの負担を大幅に軽減することが可能になります。


問題となるのは、Google Apps Script の Drive Service を使用して実行される同期プロセスではバッチ リクエストを利用できないということです。このことは、ユーザーは Google Apps Script のバッチレビューのために Drive API を簡単に使用することはできず、アプリ開発プロセス期間中に効率的にファイルを管理することで得られるプロセスの負担に関する恩恵を受けられないということを意味しています。


バッチ処理によってどのくらいの違いが生まれるかを示すために、この記事では効率的なファイル管理に関連するベンチマークを測定します。私は以前にも Google Apps Script のさまざまなベンチマークをレポートしたことがありますが、ファイル管理に関連するベンチマークを測定したのは今回が初めてです。

Google Apps Script のバッチ リクエストを作成する

Google Apps Script のバッチ リクエストを作成するには、まずリクエスト本文を作成して、それを “multipart/mixed” として送信する必要があります。Drive API のバッチ リクエストに関する情報は公式ドキュメントにありますが、ここでもスクリプト例を紹介します。
読み込んでいます...

“object” の値の例は次のとおりです。

読み込んでいます...

このオブジェクトの例では、既存ファイルのファイル名は変更されます。Drive API v3 の場合、"batchPath" は "batch/drive/v3" になります。詳細については、Google API Discovery Service のドキュメントにある「batchPath」のエントリを参照してください。


Drive API とともにバッチ リクエストを使用する場合、1 つのバッチ リクエストに含められるリクエストの最大数が 100 であることにご注意ください。つまり、150 件のリクエストを行いたい場合は、この関数を 2 回実行する必要があります。

スクリプト例

このセクションでは、この関数で使用するバッチ リクエストのスクリプト例を紹介します。このレポートのスクリプト例では Drive API を使用していますので、再現するためには Google の拡張サービスで Drive API を有効にする必要があります。

状況例 1

この状況例では、特定のフォルダのファイル名(この例では Spreadsheet)は変更されます。ここでは、ファイル数を変更してプロセスの時間を測定しました。

スクリプト例 1 - 1

このスクリプト例では Google ドライブ サービスを使用します。

読み込んでいます...

スクリプト例 1 - 2

このスクリプト例では、Drive API をバッチ リクエストとともに使用します。

読み込んでいます...

状況例 2

この状況例では、特定のフォルダに対して複数の Google スプレッドシートを作成して、各シートにスターを付けて特定のユーザーと共有します。ここでは、ファイル数を変更してプロセスの時間を測定しました。

スクリプト例 2 - 1

このスクリプト例では Google ドライブ サービスと Google スプレッドシート サービスを使用します。

読み込んでいます...

スクリプト例 2 - 2

このスクリプト例では、Drive API をバッチ リクエストとともに使用します。

読み込んでいます...

結果と考察

上の 2 つの状況例の結果は次のとおりです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Kanshi_image_1.max-1000x1000.png

図 1. バッチ リクエストありの場合となしの場合のファイル名変更のプロセスの負担。青い線はバッチ リクエストあり、赤い線はバッチ リクエストなしを示している。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Kanshi_Image_2.max-1000x1000.png

図 2. バッチ リクエストありの場合となしの場合のスプレッドシートの作成と共有のプロセスの負担。青い線はバッチ リクエストあり、赤い線はバッチ リクエストなしを示している。

どちらの結果からも、Google ドライブでのファイルの管理にバッチ リクエストを使用すると、プロセスの負担が抑えられることがわかります。図 1 では、ファイルのメタデータだけが変更されているため、ファイル名変更のプロセスの負担が小さくなっています。図 2 では、スプレッドシートを作成するプロセスの負担が大きくなっています。このことから、図 2 のプロセスの負担が図 1 のプロセスの負担よりも大きいことがわかります。

まとめ

ベンチマークの結果から、Google ドライブでのファイルの管理にバッチ リクエストを使用すると、プロセスの負担を軽減できることがわかります。


バッチ リクエストは、Drive API だけでなく、Calendar APIGmail APIDirectory APICloud Storage などの他の API でも使用できます。たとえば、Calendar API とともにバッチ リクエストを使用すると、イベントの作成と更新のためのプロセスの負担を軽減できます。

- Google Cloud Innovator チャンピオン Kanshi Tanaike

投稿先