GAS開発をしていてGASのバージョン管理の概念の理解に困ったので備忘録的に残します。
versionとは
ソースコードのセーブポイントを作成/管理する機能です。日本語では「版」と訳されています。

ファイル > 版を管理... でversionの一覧を確認できます。
適当にgsファイルを編集した後にsave new version でversionを作成しましょう。
説明文(description)にはバージョンを判別するための情報を入れておきます。
そうすると以下のように新しいversionが作成されるのが確認できるかと思います。(ここでは説明のため2つのversionを作成しました)
gitで言えばcommitのような機能ですね。
versionにはHEADと名前がつけられた特別なversionがあり、これはGASのエディタ上で確認できる最新のソースコードをさしています。
下の写真のようにトリガーを作成する際に、デプロイを選択する箇所でHeadと出ているのはGASエディタ上の最新のソースコードを実行するという設定になるわけです。
ただ、実際に運用されているシステムにおいては、ソースコードは変更したいが実行されるソースコードのversionは固定したいことの方が多いですよね。実行するデプロイがHeadを参照しているとこれができません。
これを解決するためにdeploymentを使用します。
deploymentとは
GASエディタのマニフェストから配置 で確認できるものがdeploymentの一覧になります。
デフォルトでは写真にあるようにHEADを参照しているdeploymentが一つ存在しています。
deploymentはstagingやproductionなどの環境に近い概念で、デフォルトで作成されるLatest Versionという環境は最新のソースコード(HEAD)を参照しています。
デフォルトのdeploymenは編集ができないのでcreateから新しいdeploymentを作成しましょう。
ここでversionを指定することができますね。このversion1を指定してsaveしましょう。
これでversionが固定されたdeploymentが作成できましたね。
早速、トリガーに設定してみましょう。
これはなぜだかわからないのですが、トリガー作成の際にリストに出てくるのはdeploymentの名前 ではなく deploymentが参照しているversionです。ここでは新しく作成したバージョン1を参照しているdeploymentを指定してトリガーを作成します。
トリガーの一覧に作成したトリガーが表示されていますか?
作成したトリガーの導入(おそらくdeploymentの訳)が指定したdeploymentの参照しているversionをさしています。
このトリガーではバージョン1を参照しているdeploymentを実行するようになります。
これでHEADがどんな状態であろうが、このトリガーはバージョン1を実行してくれます。
バージョンを変更したいときは
ここまでくれば、バージョン変更は簡単です。インシデントのが起きて元のバージョンに戻すとき、新機能をリリースするときもdeploymentが参照するversionを変更するだけです。
再び、GASのエディタで公開 > マニフェストから配置でdeploymentを編集しましょう。ここではversionを2に指定しています。
保存が終了したら、トリガーの設定を確認しましょう。
トリガーの導入がバージョン2になってますよね?これで次回以降トリガーが実行される際はバージョン2で実行されます。
画面ポチポチするのは面倒くさい
そんなことを考えている人はclaspを使いましょう。
導入の方法などは他の記事にお任せしますが、この記事で紹介した作業がコマンドで実行できるようになります。
// 手元のソースコードをHEADに適応する
$ clasp push
// HEADで新しいversionを作成する
$ clasp version
// deploymentsの一覧を取得
$ clasp deployments
// versionの一覧を取得
clasp versions
// deploymentが参照するversionを変更する
$ clasp deploy -i {deploymentId} -V {versionNo}