あるSEのつぶやき・改

ITやシステム開発などの技術に関する話題を、SEとしての経験から取り上げたり解説したりしています。

Google Apps ScriptのClaspでWebアプリのURLを変えないでデプロイする方法

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

これで間違ってデプロイすることがなくなりますね。