GAS-Terminal: Google Apps Scriptをスマートに実行できる環境
※この記事は「GAS-Terminal: Environment for smart execution of Google Apps Script」を翻訳したものです。
GASを動かすのは面倒
Google Apps Script(GAS)は好きですか?私もです! 👍
私はこれまで、システムの処理やデータの管理を行うために、たくさんのGASを書いてきました。ほとんどの場合、様々なトリガーによって自動的に実行されますが、時々、手でスクリプトを実行する必要があります。その時に、”GASの実行は面倒だ!”と思います。なぜ?その理由は、実行して結果を確認するスマートな方法がないからです😓。
いつもどのように実行していますか?
1. スクリプトエディタ
もっとも身近な方法かもしれません。コードを書いて、実行ボタンをクリックする。それだけです。しかし、いちいちスクリプトエディタを開くのは面倒ですし、関数のパラメータを変更したいときはコードを変更しなければなりません。
2. シートに配置したボタン
もう一つの方法は、スプレッドシートにボタンを配置し、そのボタンに関数を関連付けることです。この記事では、その方法を説明します。この方法は、スクリプトエディタを開いて関数を実行するよりも少し簡単です。しかし、関数の数が増えるとボタンの数も増え、整理しにくくなる傾向があります。また、関数のパラメータを変更できないという問題も残っています。さらに、スクリプトの実行結果を知りたい場合は、シートへの出力を実装していない限り、スクリプトエディタを開く必要があります。
GAS-Terminalの登場です!
そこで、私はGASの管理や運用を簡単にするためのツールを作りました。その名も「GAS-Terminal」です(Terminalという名前は、様々なコマンド(つまり関数)をTerminalのように切り替えて実行できるから)。このツールはGoogle Sheetsに実装されていて、このシートに関連付けられたスクリプトの関数を実行することができます。
使い方を知りたい方は、GitHub リポジトリをご覧ください !
以下は実行例です。
どのように実現しているか?
コマンド定義シートの読み込みや、コマンド切り替え時の処理など、細かい点はありますが、単純にeval関数を使ってコマンドを実行しています。
以下に実行ロジックをご紹介します。
// Clears the log.
TerminalSheet.instance.clearLog(); // Sets the TerminalSheet as logger.
LogUtils.logger = TerminalSheet.instance; // Gets the command definition.
let commandDef:CommandDefinition = CommandsSheet.instance.findCommand(commandName); // Makes the parameter string.
let params:string[] = TerminalSheet.instance.getParams();
let paramsStr:string = "";
if( params.length > 0 ){
paramsStr = '"' + params.join('","') + '"';
} // Make the function call string.
let callStr:string = commandDef.funcName + "(" + paramsStr + ")"; // Executes
eval(callStr);
結論
私はこのツールを使って、システムのメンテナンスのために13のコマンドを実行しています。皆さんはいつもどのようにGASを実行していますか?このツールが皆様のお役に立てれば幸いです。
私はこのツールを改良し続けます。今のところの次の目標は、長時間実行への対応を取り入れることです。
何か良いアイデアがあれば、ぜひ教えてくださいね。😃