Google Apps Script には、TypeScript で開発するための Clasp というとても便利なライブラリがあります。
Clasp を使用すると、コマンドラインからも Web アプリをデプロイできるのですが、デプロイするごとにデプロイ ID が変わるため、Web アプリの URL も変わってしまうのが困ったところです。
Google Apps Script の Web アプリの URL は以下のようになっているためです。
https://script.google.com/macros/s/<デプロイID>/exec
Clasp でデプロイするには、以下のように push 後にデプロイします。
$ npm run build $ clasp push $ clasp deploy
clasp deployments
でデプロイ内容を確認できます。
$ clasp deployments 3 Deployments. - aaa @HEAD - bbb @6 - ccc @13
aaa
などがデプロイ ID で、@ 以降の数値部分がバージョンになります。
とはいえ、さすがにこの仕様だと不便なため、デプロイ ID を固定する方法もあります。
先ほどのコマンド実行結果を見て、最新バージョンのデプロイ ID を使用して以下のようにデプロイします。
$ clasp deploy --deploymentId ccc
デプロイ後、もう一度 clasp deployments
を実行すると、バージョンが上がっているのに、デプロイ ID が変わっていないことが分かります。
$ clasp deployments 3 Deployments. - aaa @HEAD - bbb @6 - ccc @14
ただ、これで万事 OK とはいかないのですよね。
コマンドを打ち間違うと、デプロイ ID が変わってしまうので。。
そう思って悩んでいたら、GitHub で解決策を提示している方がいました。
https://github.com/google/clasp/issues/63#issuecomment-562645718
この内容を受けて、簡単ですが自動でリデプロイするシェル redeploy.sh
を作成しました。
1回目は通常通り、clasp deploy
を実行して2回目以降のデプロイを自動化できます。
#!/bin/sh # 2回目以降デプロイIDが更新されないようにするためのシェル。 # 1回目だけは、 clasp deploy を使用してデプロイする。 # build npm run build # push clasp push # get last deployment id LAST_DEPLOYMENT_ID=$( clasp deployments | pcregrep -o1 '\- ([A-Za-z0-9\-\_]+) @\d+ - web app meta-version' ) if [ -z "$LAST_DEPLOYMENT_ID" ];then LAST_DEPLOYMENT_ID=$( clasp deployments | tail -1 | pcregrep -o1 '\- ([A-Za-z0-9\-\_]+)' ) fi # deploy clasp deploy --deploymentId $LAST_DEPLOYMENT_ID
これで間違ってデプロイすることがなくなりますね。