Git
GoogleAppsScript

gapps + git で Google Apps Script をローカルで開発してバージョン管理する

gapps(node-google-apps-script)を利用して Google Apps Script をローカルで開発する方法のメモです。好みのエディタで開発できるようになることに加え,ローカルのプロジェクトディレクトリを Git で管理することによりバージョン管理ができるようになります。

gapps の導入

Node.js をインストール

gapps には Node.js v0.12.x 以降が必要とのことです。公式サイトのインストーラーを使ってもいいですが,Windows では Chocolatey でもインストールできます。

PS> choco install nodejs.install

node-google-apps-script をインストール

npmnode-google-apps-script をインストールします。これで gapps コマンドが使えるようになります。

$ npm install -g node-google-apps-script
$ gapps --version
1.1.15

Google Drive Credentials の取得

Google Drive API を有効にして,OAuth 2.0 クライアント ID を取得して認証します。README には 2 通りの方法が書かれていますが,要は Google Developers Console に適当なプロジェクトを用意して,そのプロジェクトで設定を行えばよいということのようです。

Cloud Platform プロジェクト

Google Developers Console で新規プロジェクトを作成するか,Google Apps Script に関連づけられたプロジェクトを開きます。

Google Apps Script に関連づけられたプロジェクトを開くには,メニューから[リソース]→[Cloud Platform プロジェクト...]を開き,表示されたダイアログの[API コンソールを表示]ボタンをクリックします。

001.png

002.png

Google Drive API を有効にする

左上のハンバーガーメニューから[API とサービス]→[ライブラリ]を開き,[G Suite]のカテゴリにある[Google Drive API]を選択して[有効にする]ボタンをクリックします。

003.png

004.png

005.png

OAuth 2.0 クライアント ID を作成する

左上のハンバーガーメニューから[API とサービス]→[認証情報]を開き,[認証情報]タブの[認証情報を作成]ボタンをクリックして,[OAuth クライアント ID]を選択します。

006.png

007.png

[アプリケーションの種類]は[その他]を選び,名前を適当に入力して[作成]ボタンをクリックします。

008.png

gapps の認証

シークレットをダウンロードする

OAuth 2.0 クライアント ID の一覧で右側のダウンロードアイコンをクリックし,JSON ファイルとして保存します。

009.png

ファイル名は client_secret_xxxxxxxx.apps.googleusercontent.com.json のようになっています。

gapps で認証コマンドを実行する

コマンドを実行すると,認証用の URL が表示されます。

$ gapps auth /path/to/credential.json

Please visit the following url in your browser (you'll only have to do this once): ...

ブラウザでアクセスして許可を与えると,以下のようなメッセージが表示されます。

You've been authenticated with Google Drive! You may close this page.

Mac や Linux では $HOME を,Windows では %USERPROFILE% を確認して .gapps ファイルが出来ていれば認証完了です。どうやら Windows 環境では %HOME% 環境変数を設定していても参照してくれないようです。

ローカルで開発する流れ

スクリプトのファイル ID をコピー

ローカルで開発したいスクリプトを Google Drive で開き,URL に含まれているファイル ID をコピーします。以下の xxxxxxxx の部分です。

https://script.google.com/d/xxxxxxxx/edit

ダウンロード

プロジェクトを管理するディレクトリへ移動し,先ほどコピーしたファイル ID を引数に渡して gapps init を実行します。

$ cd /path/to/project
$ gapps init xxxxxxxx

gapps.config.json という設定ファイルと src ディレクトリが作成されます。

$ tree
.
├── gapps.config.json
└── src
    └── コード.js

1 directory, 2 files

gapps.config.json にはソースが格納されているディレクトリとファイル ID が保存されています。ファイル ID が含まれているので,プロジェクトを Git で管理する場合は .gitignore に追加しておいた方がよさそうです。

なお,Git で管理する場合,新しい PC でクローンした後は,このファイルをコピーしてくれば gapps init を実行しなくても Google Drive へのアップロードができるようになります(もちろん gapps の導入と認証は必要ですが)。

$ cat gapps.config.json
{
  "path": "src",
  "fileId": "xxxxxxxx"
}

アップロード

ローカルでの変更を Google Drive に反映させるには gapps upload を実行します。

$ gapps upload
Pushing back up to Google Drive...
The latest files were successfully uploaded to your Apps Script project.

Git でバージョン管理

ローカルリポジトリを初期化して,リモートリポジトリを追加します。

$ cd /path/to/project
$ git init
$ git remote add origin git@github.com:username/project.git

gapps.config.json にはファイル ID が含まれているので .gitignore に追加しておきます。

$ echo gapps.config.json > .gitignore

あとは普通に開発するだけです。

$ git add .
$ git commit -m "Initial commit"
$ git push origin master

2 台目以降で開発する場合は,まず gapps の導入と認証を済ませます。その後は,上記と同じ手順(gapps initgit initgit remote add)を繰り返してもよいですし,あるいは単にクローン後に gapps.config.json をコピーしてくるだけでも大丈夫なようです。

参考