GAS(GoogleAppsScript)を用いてツールを作成したい!となったときに考えられる選択肢を自分なりにまとめてみました。
そもそもGASを使いたくなる場面とは
GASとは、GoogleAppsScriptの略で、Googleが開発し提供しているプログラミング言語です。
Google製品との連携が容易で、スプレッドシートやドキュメントを用いたツールを作成したり、それらからデータを取得できたりします。特に、スプシやドキュメントからデータを取得したい場合はGAS一択と言ってもいいのではないでしょうか。
参考:【GoogleAppsScript】活用事例集・一覧
https://eguweb.jp/gas-casestudy/
そんなこんなでGASを使いたくなったときに、どのように実装するかで悩んだのでここに書き残しておきます。
選択肢1 スプシやドキュメントをそのまま使う
最も一般的な選択肢です。もちろんこれで済むのであれば問題ないのですが、少し複雑な実装を試みるとすぐに頭打ちになってしまいます。
例えば、スプレッドシートのセルにはクリックイベントを設定することができません。一応、図形を配置してそれにスクリプトを設定することでクリックイベントを擬似的に実現することはできます。しかし、例えば取得データを一覧画面に表示し、行をクリックすると詳細が表示されるような動的なクリックイベントの設定はできません。
- メリット:最も一般的で簡単
- デメリット:複雑な機能は実装できない
参考:【GAS】スプレッドシートにボタンを追加する方法【Google Apps Script】
https://prtn-life.com/blog/gas-button
選択肢2 GAS+HTMLでWebアプリを作成しデプロイする
ではHTMLを書いて複雑な機能もつけたい!となったときに、GASのデプロイ機能を用いてWebアプリを作成するという方法があります。この方法ならGASでデータを取得しつつHTMLベースのアプリを作れてとても便利です。なので、基本的には複雑な機能が必要な場合この方法でいいんじゃないかと思います。
参考:Google Apps Script で Web アプリを作る
https://www2.kobe-u.ac.jp/~tnishida/programming/GAS-02.html
一見良さそうですが、この方法にも1つ落とし穴があります。この方法でデプロイしたアプリは、デフォルトでconsole.logが効きません。ちょっと調べてみるとGCP(GoogleCloudPlatform)と連携させないとログが出ない仕様になっているそうです。
もちろん長期的に開発をしていくつもりならやれよという話ですが、簡易的なものをササっと作りたいだけなら少し億劫な気もします。
- メリット:GASを用いてHTMLベースのWebアプリが簡単に作れるので、選択肢1よりも複雑な機能が実装できる
- デメリット:GCPと連携させる必要があり環境構築がちょっと面倒
参考:Google Apps Script (webapp) でログを記録する
https://mallowlabs.hatenablog.com/entry/2020/05/07/200000
選択肢3 スプシやドキュメントのカスタムダイヤログを使う
ササっとGAS+HTMLでツールを作りたい!というわがままに応えられそうな選択肢がこちらです。方法としては、スプシやドキュメントに"カスタムダイヤログ"という機能があり、HTMLでカスタマイズできるので、じゃあスプシとかはそっちのけでダイヤログをメイン画面にしてしまおうというものです。
この方法なら面倒な環境構築をせずにHTMLベースの複雑な挙動を実装でき、なおかつログも見られるので、意外とアリな選択肢だと思いました。
- メリット:簡単にGAS+HTMLのツールを作成できる
- デメリット:スプシ(ドキュメント)である必要性はない、ダイヤログの幅が固定されてしまう
参考:GASで最も簡単なHTMLサービスによるダイヤログを作成する方法
https://tonari-it.com/gas-html-show-dialog/
最後に
GASでツールを作成するにあたって、意外と色々な選択肢があるよということを伝えたかったので記事を書きました。ざっくり書くと以下のような使い分けになるでしょうか。
- HTMLを使わなくてもできそう→選択肢1
- HTMLを使用したい、かつ面倒でも良い環境を構築したい→選択肢2
- HTMLを使用したい、かつ手っ取り早く実装したい→選択肢3
ちなみに私は、業務で1人日くらいでツールを作成しようとなったときに選択肢2を試し、面倒そうだったので止めて選択肢3を採用しました。ですが、後々機能が増えてきたことを考えてやっぱり2に戻そうかなという感じでフラフラしています。後々はclaspを用いてVSCode上で編集できるようにしたいです(これも色々模索中)。
参考:claspを使ってGoogle Apps Scriptの開発環境を構築してみた
https://dev.classmethod.jp/articles/vscode-clasp-setting/