LoginSignup
13
15

More than 5 years have passed since last update.

Google App ScriptへCI経由でデプロイする

Last updated at Posted at 2017-01-15

追記

この記事を踏まえて、より良い環境を構築した記事を書きました

Google Apps ScriptへCI経由でデプロイする (1年半後)


やりたいこと :checkered_flag:

  • Google App Scriptのソースコードをgit管理したい
  • それらのコードをCI経由でGoogle App Scriptにデプロイしたい

どうやったか :rocket:

node-google-apps-scriptを使うと手元のファイルをGoogle App Scriptにアップロードできるようになるので、同じことをCI上で行うようにします

CIは何でも良いですが、今回はbitbucket pipelinesを使いました

結果的にclient_secretなどをソースコードに含める必要があったため、publicなリポジトリのプロジェクトなどでは採用できない手法となってしまいました :cry:

1. node-google-apps-scriptをセットアップする :wrench:

こちらの記事が大変参考になりました

GoogleAppsScriptローカル開発用の公式CLI(node-google-apps-script)がついに登場したので試してみる
http://qiita.com/zaki-yama/items/9a301542137febd8876c

この記事の通りに準備すると、ローカルからファイルのアップロードができるようになります
まずはローカルからのアップロードができるまで準備します

2. ~/.gappsをリポジトリにコミットする :skull_crossbones:

この記事の肝はこの設定です

記事の通りにセットアップすると、~/.gappsというファイルが生成されます
gapps uploadの際にこのファイルを参照して認証をしているので、CIでも必要になります
なので、cp ~/.gapps path/to/repoなどでリポジトリに含めます

.gappsにはclient_secretrefresh_tokenといった情報が含まれているので、できればリポジトリには含めず環境変数などで制御したかったのですが、軽くソースコードを見た感じだとそのようなオプションは無いようでした :cry:

いつかプルリク出したいところです

3. CI上で~/.gappsを参照できるようにする :motorway:

bitbucket pipelinesの場合は下記のコードだけでOKでした

bitbucket-pipelines.yml
image: node:4.3.2

pipelines:
  default:
    - step:
        script:
          - npm install
          - npm run upload-from-ci

package.json
  "scripts": {
    "upload-from-ci": "cp .gapps ~/.gapps; gapps upload"
  },

リポジトリの.gappsをそのまま~/.gappsへコピーしています
CIはどれでも大丈夫と書きましたが、ホームディレクトリへの書き込み権限がないと無理ですね...

ここまでできればCI上からデプロイができます! :tada:

注意点

webアプリケーションとして公開しているGASアプリの場合、ソースコードのアップロードだけでは反映されません
アップロード後にプロジェクトバージョンを新しくする必要があります

これはAPIも用意されてないっぽいですね...

トリガーで発火しているコードに関しては、uploadするだけで問題なく更新されるようでした

感想

GASのおかげでサーバの準備不要でお手軽にスクリプトを動かせるは大変ありがたいですね! :grin:

今回はちょっとしたslack botをGASで動かしていたのですが、少しコードベースが大きくなってきたタイミングでgit管理がしたくなり、この方法を導入しました

やってみて、git管理やCI運用を導入したくなった時点で既にGASで動かすには不適切な規模感なのかなと感じました

お手軽にサクッとスクリプトを動かせるのが良い点だと思うので、その良さを活かせるような使い方を意識して使おうと思いました!

13
15
1

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
13
15