claspでGoogle Apps Scriptをローカルで開発しデプロイする
gcpclaspはGASをローカルで開発するための公式のツール。
$ npm install -g @google/clasp
$ clasp --version
2.3.0
設定でGASのAPIを有効にしてログインし、必要な権限を許可する。
$ clasp login
$ cat ~/.clasprc.json
{"token":{"access_token":"...
clasp create
でプロジェクトを作成する。typeを指定するとドキュメントが作られ、スクリプトがそれに紐づく。
紐づいているスクリプトからはSpreadsheetApp.getActiveSpreadsheet()
のようにIDを指定することなくドキュメントを参照できる。
$ clasp create --type sheets --title "clasp test"
Created new Google Sheet: https://drive.google.com/open?id=*****
Created new Google Sheets Add-on script: https://script.google.com/d/*****/edit
Warning: files in subfolder are not accounted for unless you set a '.claspignore' file.
Cloned 1 file.
└─ appsscript.json
$ tree -a
.
├── .clasp.json
└── appsscript.json
$ cat .clasp.json
{"scriptId":"*****"}
$ cat appsscript.json
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}
$ clasp open
clasp pull
でスクリプトを持ってきてclasp push
で上書きする。
$ clasp pull
Warning: files in subfolder are not accounted for unless you set a '.claspignore' file.
Cloned 2 files.
└─ appsscript.json
└─ Code.js
$ clasp push
clasp run
で実行するためにはGCPのプロジェクトを作成し、OAuthアプリの設定とGAS管理のプロジェクトからGCPのプロジェクトへの変更を行う必要がある。
$ clasp setting projectId <GCP_PROJECT_ID>
$ open https://console.developers.google.com/apis/credentials/consent?project=<GCP_PROJECT_ID>
$ clasp open
OAuthアプリのクライアントID/シークレットを発行し、ダウンロードしたファイルでログインする。 テストユーザーに追加していないと失敗する。認証情報を公開しないように注意。
$ clasp open --creds
$ clasp login --creds creds.json
Authorization successful.
Local credentials saved to: ./.clasprc.json.
*Be sure to never commit this file!* It's basically a password.
$ cat .gitignore
creds.json
.clasprc.json
$ cat .claspignore
!*.js
!appsscript.json
appsscript.json
にexecutionApiの設定を追加した。
これがないとScript API executable not published/deployed.
のエラーが返る。
$ cat Code.js
function myFunction() {
return "HELLO"
}
$ cat appsscript.json
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"executionApi": {
"access": "ANYONE"
}
}
$ clasp push
$ clasp run myFunction
HELLO
clasp deploy
するとversionを切ってdeploymentが作成される。バージョンを指定してpullできる。
$ clasp deploy --description "version 1"
Created version 1.
$ clasp versions
~ 1 Version ~
1 - version 1
$ clasp pull --versionNumber 1
$ clasp deployments
2 Deployments.
- ***** @HEAD
- ***** @1 - version 1
これをトリガーに設定したりWebアプリケーションとして公開するのはWeb上で行う。