Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

初めに

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

ttk1
IT技術者。 面白いことだけを考えて生きていきたい。
https://ttk1.net
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした