LoginSignup
7
4

More than 5 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

7
4
0

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
  3. You can use dark theme
What you can do with signing up
7
4