Google スプレッドシートは、リアルタイムでの共同編集が可能な、データの可視化、処理、通信のためのツールを提供するクラウドベースのスプレッドシート ソリューションです。
このチュートリアルでは、コールバック エンドポイント(Webhook)を作成して、Google スプレッドシートにコールバック URL を保存し、実行を一時停止して、スプレッドシートの人間による承認を待機し、ワークフローを再起動するワークフローを作成してデプロイする方法を説明します。詳しくは、コールバックの使用方法をご覧ください。
目標
このチュートリアルの内容は次のとおりです。
- Google ドライブに新しいフォルダを作成します。このフォルダは、スプレッドシートの保存に使用されます。これにより、ワークフローによるスプレッドシートへの書き込みが可能になります。
- Google スプレッドシートを作成して承認を取得し、ワークフローに対するコールバックを開始します。
- クラウドベースの JavaScript プラットフォームである Google Apps Script を使用して、Google Workspace プロダクトをプログラムで作成、読み取り、編集し、一時停止したワークフローの再開をスプレッドシートの更新を通してリクエストが承認されるたびにワークフローをトリガーします。
- Google Sheets API コネクタを呼び出してデータをスプレッドシートに追加するワークフローを作成してデプロイします。ワークフローが実行され、一時停止し、スプレッドシートでコールバックが承認されると再開します。Workflows コネクタの詳細を確認する。
- プロセス全体をテストして、ワークフローが想定どおりに進行することを確認します。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このチュートリアルでは、Google Workspace も使用します。Google の無料の一般ユーザー向けアプリに含まれていないビジネス レベルのサービスは、課金対象になります。
始める前に
Google Cloud コンソールで次のコマンドを実行するか、ターミナルまたは Cloud Shell で Google Cloud CLI を使用できます。
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。
コンソール
Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクトを選択または作成します。
Google Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
Compute Engine、Google スプレッドシート、Workflows API を有効にします。
Compute Engine のデフォルトのサービス アカウントをメモしておいてください。テスト目的で、このチュートリアルのワークフローに関連付けるためです。Compute Engine API が有効になっている新しいプロジェクトには、IAM 基本編集者ロールや、以下のメール形式を持つサービス アカウントが作成されます。
PROJECT_NUMBER-compute@developer.gserviceaccount.com
プロジェクト番号は、Google Cloud コンソールの [ようこそ] ページで確認できます。
本番環境では、新しいサービス アカウントを作成して、必要最小限のアクセス許可を含む、最小権限の原則に従った 1 つ以上の IAM ロールを付与することを強くおすすめします。
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Google Cloud プロジェクトの課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
Compute Engine、Google スプレッドシート、Workflows API を有効にします。
gcloud services enable \ compute.googleapis.com \ sheets.googleapis.com \ workflows.googleapis.com
Compute Engine のデフォルトのサービス アカウントをメモしておいてください。テスト目的で、このチュートリアルのワークフローに関連付けるためです。Compute Engine API が有効になっている新しいプロジェクトには、IAM 基本編集者ロールや、以下のメール形式を持つサービス アカウントが作成されます。
PROJECT_NUMBER-compute@developer.gserviceaccount.com
プロジェクト番号を取得します。
gcloud projects describe PROJECT_ID
本番環境では、新しいサービス アカウントを作成して、必要最小限のアクセス許可を含む、最小権限の原則に従った 1 つ以上の IAM ロールを付与することを強くおすすめします。
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 コネクタを使用してスプレッドシートに書き込みます。
Console
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
エンドツーエンドのフローをテストする
ワークフローを実行して、エンドツーエンドのフローをテストします。ワークフローを実行すると、そのワークフローに関連付けられた現在のワークフロー定義が実行されます。
Console
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
になります。
クリーンアップ
このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。
プロジェクトを削除する
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.