GAS

GASをローカルで開発するために clasp を使う

clasp

  • 2018年1月から使えるようになったGoogle公式のCLIツール
  • できること
    • プロジェクトの新規作成、クローン
    • GASファイルのアップロード/ダウンロード
    • バージョン一覧の取得
    • 新規バージョンを作成
    • デプロイ
    • デプロイ一覧の取得
    • スクリプトエディタを開く
  • GASがローカル開発できる
  • TypeScriptでかける
  • コードラボが用意されているのでこちらで学べる

https://codelabs.developers.google.com/codelabs/clasp/#0

インストール

NodebrewでNode.jsのバージョンを管理する でNodeを入れる

グローバルにインストールしても、ローカルにnpm initしてからインストールしてもよい。

$ npm i @google/clasp -g
$ clasp help

Google Apps Script APIを有効化

https://script.google.com/home/usersettings

ログイン

Web上のエディタにアップロードするにもダウンロードするにも認証が必要なので、以下コマンドでログインする

$ clasp login
🔑  Authorize clasp by visiting this url:
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&scope=https%3A%2F%...

ブラウザが開き、アカウントの選択と、APIの承認画面が表示されるので、承認する

ログイン情報は、$HOME/.clasprc.json に保存されている

既存のプロジェクトを編集したい場合

git clone と同じような感覚でローカルにダウンロードできる

$ clasp clone ${scriptId}

scriptIdは、スクリプトエディタで開いたときの以下の部分

  • 旧エディタ https://script.google.com/d/<scriptId>/edit
  • 新エディタ https://script.google.com/home/projects/<scriptId>/edit

※2020年の年末ごろにエディタが新しくなり、URLも変わった

  • GASのプロジェクトがダウンロードされる
    • .clasp.json
      • プロジェクト設定ファイル
      • scriptId (必須): https://script.google.com/d/<SCRIPT_ID>/edit のSCRIPT_ID部分
      • rootDir: プロジェクトを保存するディレクトリを指定
    • appsscript.json
      • マニフェストファイル
      • GAS実行時の設定など
    • 作成済みのスクリプトファイル
      • なお、.gsではなく.jsでダウンロードされる

新規作成の場合

$ clasp create --title <projectName> --rootDir <ソースファイルを置くディレクト>

プロジェクトタイプを聞かれる

  • standalone: スクリプト単体で作成される
  • docs,sheets,…: 選択したドキュメントと、それに紐づくスクリプトとして作成される

リモートの修正をローカルに反映する

$ clasp pull
  • ブラウザ上で修正したものがローカルに反映される
  • 強制的に上書きされるので注意が必要

ローカルの修正をリモートに反映する

$ clasp push
  • rootDirで指定したすべてのファイルがpushされる
  • 特にquestionもなく強制上書きになるので、Web上で編集している場合は注意する
  • Git関連のファイルなどは反映したくない

claspignore を作成

claspignore

カレントディレクトリに .claspignore ファイルを作成して、clasp管理外にするファイルを記載すると、push,pullから管理外になる

記法はgitignoreと同様

ディレクトリ構成

以下のようにディレクトリを分けることができる

./
├── appsscript.json
└── src
   └── Code.js
└── test
    └── Code.js
  • これを clasp push すると、 / 区切りでファイルが登録される
  • pull してもディレクトリは保持される

その他できること

プロジェクトを開く

ブラウザで開くには以下のコマンドを実行

$ clasp open

関数を実行

$ clasp run [functionName]

ログを見る

clasp logs 

事前にProjectIDを設定しておく

スクリプトエディタからリソース > Cloud Platform Projectを開いて、project-id-xxxxxxxxxxxxxxxxxxx をコピーして.clasp.jsonに貼り付ける

    {
      "scriptId":"<SCRIPT_ID>",
      "projectId": "project-id-xxxxxxxxxxxxxxxxxxx"
    }

バージョン管理

Gitのバージョン管理ではなくて、GASのバージョン管理

$ clasp version [バージョンの説明]
Created version x

するとスクリプトエディタ上でバージョンが作られているのを確認できる コマンドで確認する場合は clasp versions

Git管理

  • clasp でローカルにGASプロジェクトを作成できるようになったため、Gitで管理できる
  • gitignoreに、Node.gitignoreを書いておくとよい

他の人も git clone から開発できるようになる(スクリプトへのアクセス権限はもっている必要がある)

$ git clone [スクリプトのリポジトリ]
(ファイルに変更を加える)
$ clasp push
(Gitへもcommit, push する)

CIとの連携

  • Jenkinsにclasp を設定しておけば、例えば以下のようなことが可能 ローカルで開発 ↓ BitbucketにPush ↓ Jenkinsでgit clone ↓ テスト、静的解析 ↓ clasp push

  • 注意

    • リモートかローカルか決めたほうでのみ開発する
    • スクリプトエディタからであれば開発環境構築なしで作れるというメリットもあるので、どちらを取るかはそのときに合わせる

参考

詳解! Google Apps Script完全入門 ~Google Apps & G Suiteの最新プログラミングガイド~

リファレンス

Google Apps Scriptの新しい3つの機能 その① Dashboard Google Apps Scriptの新しい3つの機能 その② Apps Script API Google Apps Scriptの新しい3つの機能 その③ CLI Tool Clasp

https://codelabs.developers.google.com/codelabs/clasp/#0 Command Line Interface using clasp