Develop GAS on local | iii threetreeslight

May 29, 2018

Develop GAS on local

業務改善のためにGAS (Google Apps Script) は書かせません

ただ、script editorを使ってweb上でデバッグするのは少し効率の悪い作業です。 また、テストを記述することもできません。

そのため、localで如何にgoogle apps scriptを開発するべきか考えをまとめました。

manage and deploy google apps script by clasp

Collaborating with Other Developers は必読。

localでgoogle apps scriptを管理するために google/clasp を利用します。

Claspはgasをgitのようにgasのversioning、push/pullなどをサポートします。

Prepare to use clasp

Then enable Apps Script API: script.google.com/home/usersettings

install clasp

sudo npm i @google/clasp -g

OAuth loginする。このとき、以下の通りownkey optionをつけて手元に持ってくる必要がある

https://github.com/google/clasp/blob/4bc1e32d742e686532d4d51633b59e7c091dba53/index.ts#L766 * Note: to use this command, you must have used clasp login --ownkey

clasp login --ownkey

既存projectを管理するための準備をする

mkdir -p project_name/src
cd project_name

File > Project properties > info よりscript idを手に入れコードをcloneする。

echo "{
  "scriptId": "<script_id>",
  "rootDir": "src"
}" > .clasp.json

gasで利用しないコードがgasにpushされてしまうと困るので、src というdirectoryを切って管理します。また、必要に応じて .claspignore を作成してpushしたくないコードが含まれないようにすることも可能です。

コードを持ってきます。

clasp pull

これでgit管理する準備が整いました。

google apps script editor上にuploadするには以下のようにpushすることで実現できます。

clasp push

How to quick debug?

さて、コードは持ってきたものの、実行環境がlocalに無いことはとても不便です。

この問題を解決するためには以下の2つの方法が考えられます。

  1. 頑張ってmockを書いて、reuqireで必要なコードを読み込みlocalのnode環境で動くようにする
  2. pushないしdeployしたコードをlocalから実行し、そのログをAPI経由で取得する

spreadsheetの操作を行って確認することや、gasのmockを書く労力、なによりもruntimeの違いを鑑みると2の方法が良さそうです。

今回は spreadsheet に付帯する gas project を実行する準備について記述します。

以下のようなscriptであることをサンプルコードとして書いておきます。

function myFunction() {
  Logger.log("called myFunction");
  console.info('Timing the %s function (%d arguments)', 'myFunction', 1);
}

Debug on web console

web consoleからdebugする設定をする方法は以下のとおりです。

File > Project properties > scope より OAuthで利用する権限の確認しておく。

必要に応じて特別に権限を設定しておく必要があるため。

Publish > Deploy as API Executable より自分を対象に公開する。

clasp deploy でも :ok_women:

Resources > Cloud Platform Project より google cloud consoleへ移動し、以下のサービスをenableにする

  1. Google Sheets API
  2. Apps Script API

OAuthで当該権限が使えるようOAuthに利用するclient idを取得します

https://developers.google.com をOAuthで利用できるようにする

Google Sheets API の管理画面にある Try this API より script.scripts.run をより試します。

client_idを設定

必要項目を設定し実行

200 OK!

stack driver上にもlogが現れていることを確認します。

Debug on terminal

最新のコードをデプロイ

clasp deploy

deployした設定を引っ張る。初回だけ実施。このあとはdeployするだけで :ok_women:

clasp pull

指定したfunctionを走らせてlogをみる。

clasp run myFunction
clasp logs