🦹

doGetで複数のWebアプリを一つのGASで管理する方法

2024/09/02に公開

はじめに

Googleスプレッドシート上でGoogle Apps Script (GAS) を使い、複数のWebアプリとして機能する関数を定義することがあります。その際、関数ごとにdoGet関数を設置することでWebアプリを作ると、意図した動作が行われないことがあります。本記事では、この問題の対処方法を説明します。

doGet関数について

doGetは、GASでWebアプリを作成するときに呼び出される特別な関数で、Webアプリのエントリーポイントになります。しかし、doGetの名前は固定であり変更できないため、複数の関数を別々のWebアプリとして使用する場合、注意が必要です。

やりがちな間違い

例えば、関数A()と関数B()があり、それぞれをWebアプリAとWebアプリBとして利用したい場合、次のように設定してしまうことがあります。

  • GAS A
function doGet(){
  A()
}
function A(){
// 実行内容
}
  • GAS B
function doGet(){
  B()
}
function B(){
// 実行内容
}

GAS A, GAS Bについて、それぞれにWebアプリのurlを取得して、Web上では、

var AppA = 'https://script.google.com/macros/s/AAAAAAAA/exec';
var AppB = 'https://script.google.com/macros/s/BBBBBBBB/exec';

これらはそれぞれのWebアプリにURLを発行できますが、Aを実行するはずがBが実行されるといった不具合が生じることがあります。これは、GASがどちらの関数を実行すべきか判断できないためです。

正しい設定方法

この問題を解決するには、AとBを含む1つのGASにまとめ、1つのWebアプリとして設定します。以下のコードのように、doGet(e)関数を使ってクエリパラメータにより関数を分岐します。

  • A,B両方を包含するGAS
function doGet(e) {
  const action = e.parameter.action;
  switch (action) {
    case 'A':
      return A();
    case 'B':
      return B();
    default:
      return ContentService.createTextOutput('Invalid action');
  }
}

function A() {
  Logger.log('Function A is called');
}

function B() {
  Logger.log('Function B is called');
}

WebアプリのURLは次のように設定します。

var AppA = 'https://script.google.com/macros/s/XXXXXXXXXX/exec?action=A';
var AppB = 'https://script.google.com/macros/s/XXXXXXXXXX/exec?action=B';

終わりに

この方法で、意図した関数を正しく呼び出すことができ、複数のWebアプリを安全に管理できます。ぜひ試してみてください。

Discussion