claspでGoogle Apps Scriptをローカルで開発しデプロイする
gcpclasp は Google Workspace との連携や拡張、ウェブアプリを公開したりすることができる GAS をローカルで開発しデプロイするための公式のツール。
$ npm install -g @google/clasp
$ clasp --version
2.3.0
設定から GAS の API を有効にして Google アカウントでログインし、コードを置く Google Drive などの権限を許可する。
$ clasp login
$ cat ~/.clasprc.json
{"token":{"access_token":"...
clasp create でプロジェクトを作成する。type を指定するとドキュメントが作られスクリプトがそれに紐づく。紐づいているスクリプトからは SpreadsheetApp.getActiveSpreadsheet() のようにIDを指定することなくそのドキュメントを参照できるが、スタンドアロンスクリプトからも 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 open
必須ではないが clasp run で実行したりエラーレポートを表示するには App Script が自動的に作成するデフォルトの GCP プロジェクトから自前のプロジェクトに変更する必要がある。
GAS のプロジェクト設定から GCP の プロジェクト番号を入れて、OAuth アプリを設定しクライアントID をデスクトップアプリで作成して、その認証ファイルでログインする。
$ clasp setting projectId <GCP_PROJECT_ID>
$ open https://console.developers.google.com/apis/credentials/consent?project=<GCP_PROJECT_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 の設定を追加する。
$ 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
定期実行などのトリガーは WebUI かスクリプトで設定することができ、作成したユーザーのアカウントで実行される。
ScriptApp.newTrigger(functionName)
.timeBased()
.everyMinutes(1)
.create();