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 をインストール
npm
で node-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 コンソールを表示]ボタンをクリックします。
Google Drive API を有効にする
左上のハンバーガーメニューから[API とサービス]→[ライブラリ]を開き,[G Suite]のカテゴリにある[Google Drive API]を選択して[有効にする]ボタンをクリックします。
OAuth 2.0 クライアント ID を作成する
左上のハンバーガーメニューから[API とサービス]→[認証情報]を開き,[認証情報]タブの[認証情報を作成]ボタンをクリックして,[OAuth クライアント ID]を選択します。
[アプリケーションの種類]は[その他]を選び,名前を適当に入力して[作成]ボタンをクリックします。
gapps の認証
シークレットをダウンロードする
OAuth 2.0 クライアント ID の一覧で右側のダウンロードアイコンをクリックし,JSON ファイルとして保存します。
ファイル名は 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 init
→ git init
→ git remote add
)を繰り返してもよいですし,あるいは単にクローン後に gapps.config.json
をコピーしてくるだけでも大丈夫なようです。