Google スプレッドシートは、リアルタイムでの共同編集が可能な、データの可視化、処理、通信のためのツールを提供するクラウドベースのスプレッドシート ソリューションです。
このチュートリアルでは、コールバック エンドポイント(Webhook)を作成して、Google スプレッドシートにコールバック URL を保存し、実行を一時停止して、スプレッドシートの人間による承認を待機し、ワークフローを再起動するワークフローを作成してデプロイする方法を説明します。詳しくは、コールバックの使用方法をご覧ください。
Google ドライブで新しいフォルダを作成する
Google ドライブに新しいフォルダを作成します。このフォルダはスプレッドシートの保存に使用されます。共有フォルダの権限を設定することで、ワークフローによるスプレッドシートへの書き込みができるようになります。
- drive.google.com にアクセスする。
- [新規] > [新しいフォルダ] をクリックします。
- フォルダ名を入力します。
- [作成] をクリックします。
- 新しいフォルダを右クリックし、[共有] を選択します。
Compute Engine のデフォルト サービス アカウントのメールアドレスを追加します。
これにより、サービス アカウントにフォルダへのアクセスが許可されます。サービス アカウントをワークフローに関連付けると、そのワークフローにはフォルダ内の任意のファイルに対する編集権限が付与されます。ファイル、フォルダ、ドライブの共有の詳細。
編集者のロールを選択します。
[通知] チェックボックスをオフにします。
[共有] をクリックします。
Google スプレッドシートを使用してスプレッドシートを作成する
Google スプレッドシートを使用して作成したスプレッドシートは、Google ドライブに保存されます。デフォルトでは、スプレッドシートはドライブのルートフォルダに保存されます。Google Sheets API を使用して、指定したフォルダ内に直接スプレッドシートを作成するオプションはありません。ただし、この例で示すように、スプレッドシートを作成した後に特定のフォルダに移動するなどの方法もあります。詳細については、Google ドライブ フォルダを操作するをご覧ください。
sheets.google.com にアクセスします。
[新規] をクリックします。
新しいスプレッドシートが作成され、開きます。各スプレッドシートには一意の
spreadsheetId値があり、これには文字、数字、ハイフン、アンダースコアが含まれます。スプレッドシート ID は Google スプレッドシートの URL で確認できます。https://docs.google.com/spreadsheets/d/spreadsheetId/edit#gid=0この ID はワークフローの作成時に必要になるため、メモしておいてください。
次の例と一致するように列見出しを追加します。

列 [G]、[Approved?] の値は、ワークフローでコールバックを開始するために使用されます。
前に作成した Google ドライブ フォルダにスプレッドシートを移動します。
- スプレッドシートで、[ファイル] > [移動] を選択します。
- 作成したフォルダに移動します。
- [移動] をクリックします。
また、Google Sheets API コネクタを使用してスプレッドシートを作成することもできます。コネクタを使用する場合、spreadsheetId は resp の結果から取得できます。次に例を示します。
- create_spreadsheet:
call: googleapis.sheets.v4.spreadsheets.create
args:
body:
connector_params:
scopes: ${driveScope}
result: resp
- assign_sheet_id:
assign:
- sheetId: ${resp.spreadsheetId}
Apps Script を使用して Google スプレッドシートを拡張する
Apps Script を使用すると、Google スプレッドシートの作成、読み取り、編集をプログラムで行うことができます。Google スプレッドシート用に設計されたほとんどのスクリプトでは、配列を操作してスプレッドシート内のセル、行、列を操作することができます。Google スプレッドシートで Apps Script を使用する方法については、カスタム関数のクイックスタートをご覧ください。
Google スプレッドシートから Apps Script プロジェクトを作成する:
- Google スプレッドシートを開きます。
- [拡張機能] > [Apps Script] を選択します。
- スクリプト エディタで、[無題のプロジェクト] をクリックします。
- プロジェクトに名前を付けて、[名前を変更する] をクリックします。
これで、スクリプトがスプレッドシートにバインドされます。これにより、スクリプトでユーザー インターフェースを変更したり、スプレッドシートを開いたときに応答したりできます。
スクリプト プロジェクトは、Apps Script のファイルとリソースのコレクションを表します。スクリプト プロジェクトのコードファイルの拡張子は
.gsです。Apps Script を使用すると、組み込み関数のように Google スプレッドシートで使用できるカスタム関数を作成できます。カスタム関数は、標準の JavaScript を使用して作成されます。関数を作成する
- Apps Script プロジェクトを開きます。
- [編集者] をクリックします。
- スクリプト ファイルは、
Code.gsという名前のプロジェクト ファイルとして表示されます。ファイルを編集するには、そのファイルを選択します。 スクリプト エディタのコードを次のコードに置き換えます。このコードは、スプレッドシート内のデータを読み取り、ワークフロー実行への入力として渡します。
[保存] をクリックします。
Apps Script のインストール可能なトリガーを使用すると、スプレッドシートを開いたり編集したりしたときなど、特定の条件が満たされたときに、スクリプト プロジェクトが指定された関数を実行できるようになります。トリガーを作成する
- Apps Script プロジェクトを開きます。
- [トリガー] をクリックします。
- [トリガーを追加] をクリックします。
- [YOUR_PROJECT_NAME のトリガーを追加] ダイアログで、トリガーを構成します。
- [実行する関数を選択] リストで、[handleEdit] を選択します。
- [実行するデプロイを選択] リストで、[Head] を選択します。
- [イベントソースを選択] リストで、[スプレッドシートから] を選択します。
- [イベントタイプを選択] リストで、[編集時] を選択します。
- [障害通知設定] リストで、[毎日通知] を選択します。
- [保存] をクリックします。
Google アカウントを選択するように求められたら、適切なアカウントを選択して [許可] をクリックします。
これにより、Apps Script プロジェクトが Google スプレッドシートのシートを表示、編集、作成、削除し、外部サービスに接続できるようになります。
Apps Script プロジェクトのマニフェスト ファイルは、Apps Script がスクリプトを正常に実行するために必要な基本的なプロジェクト情報を指定する JSON ファイルです。Apps Script エディタでは、Apps Script プロジェクト設定を保護するため、デフォルトでマニフェスト ファイルが非表示になります。マニフェスト ファイルを編集します。
- Apps Script プロジェクトを開きます。
- [プロジェクトの設定] をクリックします。
- [「appsscript.json」マニフェスト ファイルをエディタで表示する] チェックボックスをオンにします。
- [編集者] をクリックします。
- マニフェスト ファイルは、
appsscript.jsonという名前のプロジェクト ファイルとして表示されます。ファイルを編集するには、そのファイルを選択します。 oauthScopesフィールドは、文字列の配列を指定します。プロジェクトで使用する認証スコープを設定するには、サポートするスコープを含む配列を追加します。次に例を示します。{ "timeZone": "America/Toronto", "dependencies": { }, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8", "oauthScopes": [ "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/spreadsheets" ] }
これにより、明示的なスコープが次のように設定されます。
- 外部サービスへの接続
- Google Cloud データの表示、編集、設定、削除、および Google アカウントのメールアドレスの表示
- Google スプレッドシートのすべてのスプレッドシートの参照、編集、作成、削除
[保存] をクリックします。
スプレッドシートに書き込み、コールバックを使用するワークフローをデプロイする
実行され、一時停止し、スプレッドシートでコールバックが承認されると再開するワークフローをデプロイします。ワークフローは、Google Sheets API コネクタを使用してスプレッドシートに書き込みます。
コンソール
Google Cloud コンソールで、[ワークフロー] ページに移動します。
[ 作成] をクリックします。
新しいフィールドの名前を入力します:
workflows-awaits-callback-sheets。[リージョン] リストで [us-central1 (Iowa)] を選択します。
[サービス アカウント] で、Compute Engine のデフォルトのサービス アカウント(
PROJECT_NUMBER-compute@developer.gserviceaccount.com)を選択します。[次へ] をクリックします。
ワークフロー エディタで、次のワークフローの定義を入力します。
プレースホルダ
sheetId値はspreadsheetIdに置き換えてください。[デプロイ] をクリックします。
gcloud
ワークフローのソースコード ファイルを作成します。
touch workflows-awaits-callback-sheets.yamlテキスト エディタで、次のワークフローをソースコード ファイルにコピーします。
プレースホルダ
sheetId値はspreadsheetIdに置き換えてください。次のコマンドを入力してワークフローをデプロイします。
gcloud workflows deploy workflows-awaits-callback-sheets \ --source=workflows-awaits-callback-sheets.yaml \ --location=us-central1 \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBERは、使用する Google Cloudプロジェクト番号に置き換えます。プロジェクト番号を取得します。gcloud projects describe PROJECT_ID
エンドツーエンドのフローをテストする
ワークフローを実行して、エンドツーエンドのフローをテストします。ワークフローを実行すると、そのワークフローに関連付けられた現在のワークフロー定義が実行されます。
コンソール
Google Cloud コンソールで、[ワークフロー] ページに移動します。
[Workflows] ページで、[workflows-awaits-callback-sheets] ワークフローを選択して詳細ページに移動します。
[ワークフローの詳細] ページで [play_arrow 実行] を選択します。
もう一度 [Execute] をクリックします。
ワークフローが開始され、実行状態が [実行中] になります。ログには、ワークフローが一時停止して待機していることも示されます。
Execute steps here before waiting for callback from sheets ... Started waiting for callback from sheet 1JlNFFnqs760M_KDqeeeDc_qtrABZDxoalyCmRE39dpM
ワークフローによって、スプレッドシートの行にコールバックの詳細が書き込まれていることを確認します。
たとえば、ワークフローの実行 ID は実行 ID 列、コールバック エンドポイントはコールバック URL 列、FALSE は承認済みですか?列に表示されます。
スプレッドシートで、FALSE を TRUE に変更します。
1~2 分後に実行が再開され、実行ステータスが [Succeeded] になり完了します。
gcloud
ターミナルを開きます。
ワークフローを実行します。
gcloud workflows run workflows-awaits-callback-sheets
ワークフローが開始され、ワークフローが一時停止して待機していることが出力に表示されます。
Waiting for execution [a8361789-90e0-467f-8bd7-ea1c81977820] to complete...working.
ワークフローによって、スプレッドシートの行にコールバックの詳細が書き込まれていることを確認します。
たとえば、ワークフローの実行 ID は実行 ID 列、コールバック エンドポイントはコールバック URL 列、FALSE は承認済みですか?列に表示されます。
スプレッドシートで、FALSE を TRUE に変更します。
1~2 分後に実行が再開され、実行ステータスが
SUCCEEDEDになります。