GASをGit管理するならGithubアシスタントとclaspどっちを使うか?
はじめに
Google Apps Script(GAS)をGit管理できると知って調べたところ、Google Apps Script Githubアシスタントとclaspという2ツールが有名なようだったので、それぞれ試した感想や遭遇したハプニングなどをまとめてみました。
この記事が参考になるかもしれない人
これからGASをGit管理しようと思っている人
試したツール
各ツールの説明や導入方法は割愛します。
Google Apps Script Githubアシスタント
Chrome拡張なので導入は一瞬、Github連携もすんなりOKでした。使い方は簡単で、GASエディタ上でリモートリポジトリを選んでブランチを指定してPush,Pullするだけです。GASエディタ上で操作が行えるのは手軽で良さそうです。
ここで、Githubアシスタントを試しているときに遭遇したハプニングを紹介します。
Githubアシスタントを使ってみて遭遇したハプニング
作業ブランチにpushするつもりがmainにpushしていた
ブランチの選択リストにあるcreate new branchから作業ブランチを作成し、そちらに向けてpushしたつもりがmainにpushしてました。

実行ログでは確かに Successfully create new branch: branch1と出ていますが、選択しているブランチはmainのままだったのが原因でした。
create new branchはgitコマンドの git branch(ブランチを作成するが、ブランチの切り替えは行わない)だったのかと思ったのですが、その後何度か試してみると git checkout -b (ブランチを作成して切り替え)の場合もありました。
create new branchしたときはGASエディタ上のブランチ名が切り替わっているか確認しておけば、このようなハプニングは避けられそうですが、チーム開発時やGithub Actionsでmainブランチの変更をトリガーとしていた場合はかなり焦ります。
pushしたくないファイルをpushしてしまう
Git管理したくないファイルは config sync options で指定すればいいのですが、Git管理はしたいけれど今回のpush対象から外したいという場合があります。
公式ドキュメントに You can choose files to operate with in the diff dialog. と書いてあるとおり、push画面でDiffが確認できるのでpushしたくないファイルはチェックを外せば良いようです。

と思ったのですが、Githubを確認してみるとチェックを外したファイルもpushされていました。

もちろん、チェックしたファイルだけがpushされる場合もあります。
ブランチを作成しなおしたり、pushするファイルの種類を変えてみたり、いろいろ試してみたのですが原因はわかりませんでした。
clasp
こちらも特に問題なく環境構築を済ませられました。Git操作については普段どおりなので、Githubアシスタントのようなトラブルは発生していません。
claspコマンドでGASプロジェクトを新規作成するのはもちろん、既存のプロジェクトもcloneできます。clasp openでGASエディタが開くのは便利。
Githubアシスタントは最近メンテが止まっているようですが、claspは現在もメンテされている点も安心ポイントです。
claspの注意点を挙げるとすれば
TypeScriptで開発する場合は clasp pullを使わない
オンライン上のGASソースコードをローカル環境に持ってくるコマンドが clasp pullなのですが、TypeScriptで開発している場合 clasp pullすると .ts以外に .jsがローカルに作成されます。.tsが上書きされるわけではないのですが、このまま clasp pushすると GaxiosError: A file with this name already exists in the current project: **** というエラーになりました。
GASをチーム開発している場合はもちろん、一人で開発する場合もTypeScriptを使うのであればGASエディタでスクリプトを編集しないというルールにしておいたほうが良さそうです。
GASプロジェクトごとにpackage.jsonが必要
一つのリポジトリで複数のGASプロジェクトを管理したい場合、GASプロジェクトごとにpackage.jsonを作成する必要があるようです。うっかりpackage.jsonを作り忘れると、clasp pushするときに ENOENT: no such file or directory, open 'package.json' と怒られるので、空({})のpackage.jsonを作成してください。
./
|--GASプロジェクト1
| |--.clasp.json
| |--appscript.json
| |--code.ts
| |--package.json ←空のjsonを作る
|
|--GASプロジェクト2
| |--.clasp.json
| |--appscript.json
| |--code.ts
| |--package.json ←空のjsonを作る
|
|--node_modules
|--.gitignore
|--package-lock.json
|--package.json ←ちゃんと記述する
チームで開発するならclasp、Git連携する目的によってはGithubアシスタントもあり
claspはGithub Actionを使って自動デプロイなどもできるようなので、使い慣れたエディタで普段のアプリケーション開発と同じような感覚でGAS開発ができそうです。普段アプリケーション開発をやっている人であればclaspの方が使いやすいと思います。
一方、ソースコードのバックアップ目的でGit連携したい場合はGithubアシスタントも捨てがたいです。個人開発の単純なスクリプトだったらGithubアシスタントでさくっとGithubにpushするかも。claspだと基本コマンド操作になるので、コマンドが怖い人もGithubアシスタントがおすすめです。
まとめ
これまでに作ったGASプロジェクトをGit連携して、ソースコードが突然消えたり、何かの変更によってGASが動かなくなって元に戻せないといった恐怖から解放されたい思います。
Discussion