📌

GoogleAppsScriptをgitで管理したい

2024/05/27に公開

TL;DR

  • GoogleAppsScriptは便利だけど開発したサービスの管理が大変
  • なのでGoogleAppsScriptをgitで管理するための開発環境テンプレートを作ったよ
  • とはいえローコードゆえの課題はたくさんあるので中~大規模のシステムはGoogleAppsScript避けたい

挨拶

株式会社ジンズ ITデジタル部エンジニアリンググループ所属、バックエンドエンジニア 兼 開発環境保全活動家の中島です。
普段はバックエンド開発を進める傍ら、半分ライフワークとして 保守性の高い開発環境を広める活動 を行っています。

今回はこの活動の一つ、 GoogleAppsScriptのコード管理環境 についての記事を書きます。

動機

この記事を公開する2日前、2024年5月25日の午前にGoogleAppsScriptのサーバー障害が発生していました。
幸い障害の影響箇所はエディタ等フロント側のみで、定期実行スクリプトは問題なく動いていたようですが、業務でGoogleAppsScriptを利用されている方は肝を冷やしたことでしょう。

…といったこともあり、(打算的な話をすると閲覧件数が増えそうなので!)私が現在取り組んでいるGoogleAppsScriptまわりの保守性向上活動を紹介するのにちょうどいいタイミング と考えた次第です。

GoogleAppsScriptとは

GoogleAppsScriptとは、Googleが提供するサーバレスのスクリプト実行環境です。

javascriptをベースとしたプログラム言語を用いて、GoogleChromeブラウザ上のエディタにコードを書くだけで実行できる手軽さが売りです。
またGoogleが提供しているサービスであることから、GoogleSpreadSheetやGoogleDrive等、非ITエンジニアにもなじみ深いサービスとの連携が簡単に行えるという大きな強みもあります。

導入ハードルが低くユーザーフレンドリーなサービスと簡単に連携可能、社内システムを開発する人から見ればこれほど魅力的なサービスもありません。

この記事を読んでくださっている方の身の回りでもGoogleAppsScriptのサービスが作られている、作られてしまっているのではないでしょうか。

GoogleAppsScriptの課題

GoogleAppsScriptに限らずGoogleWorkspaceにあるサービスの多くは、googleアカウントに紐づく形で作成されます。すなわちGoogleのサービスに習熟した開発者でもない限り、作ったものは開発者個人に依存します。

GoogleDrive上のファイルを共有してもらったけど権限がなくて見られない、なんて話は誰しも経験があるのではないでしょうか。これと同様のことがスクリプトで起こります。
何か不具合が起きた時、あるいは急に動かす必要が出てきた時、その鍵は開発者の手元にしかありません。そしてその開発者本人がすでに退職しているなんてことも。恐ろしいですね。

GoogleAppsScriptの開発環境テンプレート

上記の課題に対する一つの解として、一般的なチーム開発と同様gitを利用した開発フローを用いるというものがあります。ソースコードをローカル上で開発したのちgitで管理し、関係者の誰でも中身を見れて、編集でき、いざとなれば実行できる状態を維持しようという考えです。

そのテンプレートがこちら
https://github.com/nakashimn/gas_template

GoogleAppsScriptをgitで管理したい、という要望はやはり多いらしく、有名なライブラリにclaspがあります。
上記環境は、claspを利用するための環境をDockerで構築して、細々した設定ファイルを詰め込んだものです。狙いは、"開発開始の時点でコードを管理する心理的抵抗・準備の手間を減らす" こと。

GAS+git+clasp作業フロー図

  • Docker+VSCode(+DevContainer拡張機能)で開発環境コンテナを立ち上げ
  • コンテナの中でコードを書いて
  • gitのリモートリポジトリとGoogleAppsScriptにpushする

という用法を想定しています。
GoogleAppsScriptでサービスを開発しているけどgitで管理したい という方がいればぜひ転用いただければ。
※なおclaspを利用するための最低限の範囲しか押さえていないので、色々改善すべき箇所があるはずです。

残っている課題

今回紹介した取り組みでGoogleAppsScriptが保守性高く安全に利用できる、かと思いきや致命的な課題が残っています。
それは自動実行用のトリガーが個人アカウントに紐づいていること、すなわち動くタイミングと止める手段が個人に依存しているということ。アクセルとブレーキはいまだ開発者の足元にのみあります。
これに対する取り組みも別途行っているのですが、それはまた後日紹介ということで…。

まぁそれはそれとして、ローコード開発/ノーコード開発を中~大規模なシステムで行うのは保守運用の面でハードルが高いのでできるだけ避けたほうがいいです。

最後に

我々株式会社ジンズITデジタル部、社内では比較的若い部署ではありますが、少しずつ需要も規模も拡大していっています。そのため新たなエンジニアを随時募集しています。

  • 大局を見ながらプロジェクトを運営してビジネスを動かしたい!という方
  • 実際に動くシステムをバリバリ実装しながらベンダーさんと殴り合いたい!という方

どちらの志向でも活躍できる土壌があります。
興味ある方はぜひ、下記募集ページをご覧ください!
https://hrmos.co/pages/jins/jobs/1829091030515531842

JINSテックブログ

Discussion