Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@ttk1

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

初めに

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?