LoginSignup
4

More than 3 years have passed since last update.

claspでpush先を切り替えるコマンドを書いた

Posted at

初めに

claspはGoogleAppsScript(GAS)のプロジェクトを操作するCLIツールです。

GASプロジェクトに入ってるファイルを丸々ローカルに落として着たり、逆にローカルにあるファイルをまとめてGASプロジェクト内にアップロードする作業を自動でやってくれる優れものです(そのほかにもいろいろ機能はありますがここでは説明しません)。

何がやりたいか

プロジェクトAには開発中のコードが入っていて、動作確認ができたら本番用のプロジェクトBにプッシュしたい。
でも、claspのコマンドには、プッシュ先を指定してプッシュするコマンドはないようです...

プッシュ先を切り替えるコマンドを書いた

push.sh
#!/bin/bash -eu

RUNNING_MODE=$1
cd $(dirname $0)

if [[ $RUNNING_MODE = dev ]]; then
    SCRIPT_ID="xxx_dev_script_id_xxx"
elif [[ $RUNNING_MODE = stg ]]; then
    SCRIPT_ID="xxx_stg_script_id_xxx"
elif [[ $RUNNING_MODE = prd ]]; then
    SCRIPT_ID="xxx_prd_script_id_xxx"
else
    echo 'usage: ./push.sh <dev|stg|prd>'
    exit 1
fi

echo '{"scriptId":"'$SCRIPT_ID'"}' > .clasp.json
echo 'var RUNNING_MODE = '\'$RUNNING_MODE\'\; > RUNNING_MODE.js
clasp push

./push.sh dev コマンドで、 xxx_dev_script_id_xxx の箇所にあらかじめ入力しておいたスクリプトIDのプロジェクトへプッシュされます。 ./push.sh stg./push.sh prd に関しても同様です。(開発、ステージング、本番のそれぞれの環境へプッシュ先を切り替える想定です。)

動作の仕組み

clasp clone したプロジェクトのスクリプトIDは、クローン先直下の .clasp.json ファイル内に次のように保存されます。

.clasp.json
{"scriptId":"プロジェクトのスクリプトID"}

なので、上に示した push.sh

echo '{"scriptId":"'$SCRIPT_ID'"}' > .clasp.json

の部分で無理やり上書きしています。単純。

claspには、 .clasp.json 内のパラメータを上書きするコマンド clasp setting があるのでこの部分は、

clasp setting scriptId $SCRIPT_ID

と書くこともできます。ただしこの場合 .clasp.json が元から存在し、キーとして scriptId を持っている必要があります。

ついでなので、どこにプッシュしたかをスクリプト側で取得するために、

echo 'var RUNNING_MODE = '\'$RUNNING_MODE\'\; > RUNNING_MODE.js

の部分で変数 RUNNING_MODE を埋め込んでおきます。

デモ

demo.js
function checkRunningMode() {
    Logger.log(RUNNING_MODE);
}

このコードを作成しdevモードでpushしてみます。

$ ./push.sh dev
└─ RUNNING_MODE.js
└─ appsscript.json
└─ demo.js
Pushed 3 files.

GASプロジェクトで、checkRunningMode() を実行してみます。
image.png

まとめ

claspのプッシュ先を切り替えるコマンドを作成しました。
作成したコードはこちらに置いておきます。
https://github.com/ttk1/clasptool

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4