🦹
doGetで複数のWebアプリを一つのGASで管理する方法
はじめに
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