claspを使ったGAS開発フローまとめ

claspとTypeScript使ってのGoogle App Scripts(以後、GAS)開発を試した件についてメモ書き(作成したサンプルコード)。

ローカルでコードを動かすために複数ステップ踏む必要があり、認証関連を理解しておく必要があった。

GAS, claspによる開発フローのイメージ

GAS, claspおよび関連するサービスの操作イメージ

claspはnpmによりグローバルインストール済みの想定。環境構築はZenn, Qiita等にすでに記事があるので省略。

開発は概ね以下のフローになる。

  1. clasp loginにより、clasp CLIが自身のGoogleアカウントに紐づく形でGASにアクセスできるようにする。これにより、スクリプトのデプロイやプロジェクトの作成・更新、スクリプトのpull/pushができるようになる。

  2. GASプロジェクトを新規作成する(clasp create)か、すでにあるプロジェクトを取得(clone)する

  3. ローカルでスクリプトを動かせるようにする

  1. スクリプトを開発する。
  1. コードがFIXした段階でコードをpush、deployする。

  2. git等でバージョン管理している場合、適宜スクリプトをcommitする。ただし、.crasprc.jsonおよびcreds.jsonは機密情報なので.gitignoreで除外しておくこと。

※ 最新のスクリプトを実行したい場合、スクリプトをpushしておく必要がある。また、スクリプトエディタで実行可能APIに設定する必要がある。

認証関連のメモ

グローバルな.clasprc.json(claspの認証)とローカルな.clasprc.json(GASプロジェクトの認証)の違いは?

項目 claspの認証 GASプロジェクトの認証
区分 claspのGoogleアカウントへのアクセストークン GASアプリのGoogleアカウントへのアクセストークン
役割 clasp CLIがGoogle Drive上にあるGASプロジェクトに対し作成・操作できるようにする アプリをローカルで実行できるようにする。アプリが使うAPI(例えばSheets API)へのアクセス権限も取り持つ
適用範囲 どのGASプロジェクトにも適用される 特定のGASプロジェクトのみ適用される
ユーザ変更後の再認証 必要 必要
スコープ変更後の再認証 - 必要

再ログインが必要なタイミングは?

以下の2ケース。

  1. 別のGoogleアカウントで別のGASプロジェクトを開発したいとき
  2. スコープを変更するとき

1. 別のGoogleアカウントで別のGASプロジェクトを開発したいとき

GASプロジェクトの認証とともに、claspの再認証が必要(Googleアカウントが変わるため)。

1
clasp login
1
clasp login --creds creds.json

の両方を行う。

2. スコープを変更するとき

appsscript.jsonを書き換えた上で、./.clasprc.jsonを再認証する必要がある。

  1. appsscript.jsonのoauthScopesのアイテムを追加、削除する(スコープの一覧はこちら)。

  2. clasp login --creds creds.jsonにより、GASプロジェクトを再認証する。例えば、oauthScopeでformsとカレンダーのfeedsを追加した場合、それぞれのアクセス要求が表示される(下図)。

  3. スコープ変更に対応したスクリプトを書き、pushする。

appsscript.json oauthScopesにformsとカレンダーのfeeds追加

認証許可時に、oauthScopesで追加した項目が追加表示される

.clasprc.jsonについて、expiry_dateが指定されているが、都度再認証が必要か?

不要。

確かにアクセストークンは1時間で期限切れになるものの、同時にrefresh_tokenが指定されている。refresh_tokenにより、トークンが切れたら期限が更新されたアクセストークンに更新されるようになっている。

以上