🤖

AppSheet から GAS を呼び出して、処理結果を AppSheet で受け取る

2024/09/11に公開

はじめに

本記事では AppSheet で Google Apps Script(GAS) と連携する方法について紹介します。

  • AppSheet から GAS を呼び出して処理を実行する
  • GAS の処理結果を AppSheet で受け取る

サンプルアプリも公開しているので、参考にしてください。

AppSheet から GAS を呼び出して処理を実行する

AppSheet で GAS を呼び出すには、次のような設定が必要です。

  1. GAS のファイルを用意する
    実行したい処理を関数として記述します。
  2. AppSheet の Automation を構成する
    あるイベント(レコード追加)に反応して、プロセス(GAS 呼び出し)を実施するような Automation を構成します。
  3. レコード追加を行うための画面を用意する
    レコード追加を行うことで、Automation をトリガーできるようにします。

このような設定を行うことで、アプリユーザ目線では、ボタンを押すことで GAS を呼び出すといった挙動を実現できます。

GAS のファイルを用意する

GAS のファイルを作成する

GAS のファイルは 2通りの方法で作成することができます。

  1. Google Drive から作成する(スタンドアローン GAS)
  2. スプレッドシートやフォームと連携する GAS

今回は 1. Google Drive から作成する 方法で進めていきます。
Google Drive 上で GAS ファイルを作成するフォルダを決めて、そのフォルダを開きます。
左上の [+新規] → その他 → Google Apps Script とクリックすることで、 GAS のファイルが新規作成されます。

GAS のファイルを用意する
GAS のファイルを用意する

GAS のファイルに関数を記述する

作成した GAS ファイルに関数を記述します。
今回は以下のような 2 つの関数を用意しました。

GAS に記述する関数
/**
 * AppSheet から引数を受け取って、コメントに出力する関数
 * 引数あり、戻り値なし
 *
 * @param {string} text AppSheet から受け取る文字列
 */
function commentV1(text) {
  Logger.log("引数を受け取りました:" + text);
  return;
}

/**
 * AppSheet から引数を受け取って、コメントを AppSheet に返す関数
 * 引数あり、戻り値あり
 *
 * @param {string} text AppSheet から受け取る文字列 例:"あいうえお"
 * @return {string} 例: "引数を受け取りました:あいうえお"
 */
function commentV2(text) {
  const comment = "引数を受け取りました:" + text;
  return comment;
}


GAS のファイルに関数を記述する
GAS のファイルに関数を記述する

AppSheet の Automation を構成する

続いて、AppSheet の Automation を利用して GAS を呼び出す設定を行います。
Automation は Event と Process から構成されており、Event がトリガーされると、Process の処理を行うように設定しておくことができます。

今回は、テーブルにレコードが追加されたことを Event として検知して、 GAS を呼び出すという処理を Process として実行します。

Automation を作成する

AppSheet のアプリエディタへ移動し、ロボットアイコンをクリックして Automation の設定を開きます。
Create my first automation をクリックするとモーダルが表示されるので、Create a new bot をクリックして Automation を作成します。
Automation を作成する
Automation を作成する

Automation を編集する

Event を構成する

Configure event → Create a new event をクリックして Event を作成します。
Event name、Event source、Table、Data change type などを設定します。

今回は、Event source で App、Table で「GAS呼び出し履歴」テーブル、Data chage type で Adds のみにチェックをいれています。
これにより、「GAS呼び出し履歴」テーブルにレコードが 追加 されたときだけ、このイベントがトリガーされます。

Event を構成する
Event を構成する

Process を構成する

Add a step → Create a new step をクリックして、 Step を追加します。

作成された「New Step」をクリックして、設定を開きます。
ステップ名を「New Step」から「GAS 呼び出し」に変更しておきます。

タスクの種類で Call a script を選択します。
Apps Script Project で、青色のファイルアイコンをクリックします。
Google ドライブのエクスプローラーが開くので、先ほど作成した GAS ファイルを指定します。

GAS ファイルを指定すると、Function Name の項目が表示されます。
ここで GAS ファイルに設定された関数を指定することができます。
先ほど 2 つの関数を記述したので、2 つの関数から選択することができます。
まずは commentV1(text) 関数を選択します。

commentV1(text) 関数は text という引数(=関数の入力)を受け入れている関数なので、関数を選択すると Function Parameters の項目が表示されます。
text に [テキスト] 列の値を渡すように設定します。

ここまで設定したら、編集画面右上の「SAVE」から変更を保存しましょう。

Process を構成する
Process を構成する

レコード追加を行うための画面を用意する

Automation を起動するにはイベントをトリガーする必要があります。
今回はレコードが追加されることをトリガーとしているので、アプリ上からレコードが追加できるようにする必要があります。

イベントトリガーに設定されている「GAS呼び出し履歴」テーブルをソースとする View を新規に作成します。
View type は deck, table, gallery, card のいずれかであれば問題ありません。

また、 Action の設定から、「GAS呼び出し履歴」テーブルで「Add」アクションを利用できるようにしておきます。(「Add」アクションはテーブル読込時に自動で生成されます)

これで Automation をトリガーして GAS を呼び出す準備が整いました。

レコード追加画面を用意する
レコード追加画面を用意する

GAS を呼び出してみる

それでは実際に、レコードを追加することで Automatino を起動し、GAS を呼び出してみましょう。

レコードを追加する

レコード追加画面で Form 画面を呼び出し、レコードを追加します。
レコードが追加されると、自動で Automation が起動し、 GAS を呼び出します。

レコードを追加する
レコードを追加する

GAS が実行されたことを確認する

GAS が実行されたことを確認するためには、GAS のプロジェクトファイルから実行ログを確認します。

左側のサイドバーから「実行数」をクリックすると、ログ画面が表示されます。
commentV1 関数の実行ログが表示されていれば成功です。

実行ログをクリックすることで、詳細を確認することができます。
commentV1 関数の中では、AppSheet から text 引数として受け取った文字列(例: "あいうえおあいうえお") をログ出力しています。
これによって AppSheet から値を渡すことにも成功していることが分かります。

GAS が実行されたことを確認する
GAS が実行されたことを確認する

GAS の処理結果を AppSheet で受け取る

続いて、GAS の処理結果を AppSheet で受け取って、スプレッドシートを更新する方法を紹介します。

Automation を修正する

先ほど利用した commentV1 関数は、戻り値のない関数でした。今度は戻り値をもつ commentV2 関数を利用して、戻り値を利用してデータの更新を行います。

AppSheet のアプリエディタで Automation の設定を開きます。
先ほど作成した Automation の Step で、Function Name を commentV2(text) 関数に変更します。

Function Parameter がリセットされるので、再び [テキスト] と入力します。

戻り値の設定をするために、Return Value のトグルを ON にします。
Return value type を String、Specific type を Text にします。(変更不要です)

GAS で呼び出す関数を変更する
GAS で呼び出す関数を変更する

続いて、Automation に Step を追加して、戻り値を利用してデータ更新を行います。

Add a step からステップを追加します。
Step name は「データ更新」として、 Create a new step をクリックします。
ステップ中央部の Run a task をクリックすると、ドロップダウンが開くので、 Run a data action を選択します。
Set row values を選択して、「結果」列に以下の式がセットされるように設定します。

[GAS呼び出し].[Output]

これで、戻り値を利用してデータを更新する準備ができました。

戻り値でデータを更新する
戻り値でデータを更新する

GAS を呼び出してみる

それでは先ほどと同様に、レコードを追加して GAS を呼び出してみましょう。

GAS が実行されたことを確認する
GAS が実行されたことを確認する

「GAS 呼び出し履歴」テーブルの「結果」列の値を、GAS の戻り値で更新することができました。

おわりに

今回はデータ登録 → Automation 起動 → GAS 呼び出しという一連の流れを紹介しました。
Automation 起動のためにテーブルを用意するというのが、ポイントですね。

また、GAS の処理結果を受けて、AppSheet 側でデータを更新する方法も紹介しました。
ステップの名前が式に出てくるところが意外なところなので、覚えておきましょう。

GAS の呼び出し、さらに戻り値の利用ができると AppSheet 活用の幅が無限に近い広がりを見せます。ぜひ活用していきましょう!

吉積情報

Discussion