CLASPしたい

$ clasp pull
$ clasp run 関数名
$ clasp push

claspは、Google Apps Scriptをローカル環境で管理できるコマンドです。 また、clasp runでコマンドラインからGASを操作できます。

ブラウザ上で編集していたGASのソースコードを ローカルに持ってくることができるため、 Gitによるバージョン管理と組み合わせることも できるようになります。

インストールしたい(clasp

$ npm install -g @google/clasp

npmを使ってclaspをインストールします。

注釈

@google/claspは2022年9月26日の2.4.2の公開以降、開発が停滞しているようです。

ログインしたい(clasp login

$ clasp login
Logging in globally...
Authorize clasp by visiting this url:
// => ブラウザが起動する
// => ログインするGoogleアカウントを選択する
// => claspによるアクセス権限を選択する
// => (すべて)を選択して「続行」

Authorization successful.
Default credentials saved to: ~/.clasprc.json

GASを操作するために、Googleアカウントへのログインが必要です。 clasp loginでブラウザが起動したら、 ログインするGoogleアカウントの選択と、 claspに与えるアクセス権限を選択します。 認証に成功すると、認証トークンが~/.clasprc.jsonに保存されます。

新規プロジェクトしたい(clasp create

$ clasp create --title PROJECT_NAME --rootDir .
? Create which script?
❯ standalone
  docs
  sheets
  slides
  forms
  webapp
  api
Creating new script: PROJECT_NAME
Created new standalone script: https://script.google.com/d/スクリプトID/edit/
Cloned 1 file.

$ ls -la
.clasp.json
appsscript.json

clasp createでプロジェクトを新規作成できます。 --titleでプロジェクトのタイトルを設定できます。 このオプションは、新しいディレクトリを作成するものではなく、ブラウザの編集ページのタイトルです。

--rootDirでプロジェクトのパスを設定できます。 デフォルトは、カレントディレクトリまでの絶対パスになってしまうので、.を指定するとよいと思います。

また--typeでプロジェクトの種類を選択できます。 省略するとプロンプトが表示されるので矢印キーで選択します。

.clasp.jsonにスクリプトID(プロジェクトID)と、 rootDirの情報が保存されます。 基本的に1つのプロジェクトに1つの.clasp.jsonが対応します。

注釈

GASには、Google Sheetなどのアプリに紐づいた状態のものと、どのアプリとも紐づいていないstandaloneのものがあります。(それぞれ呼び方があった気がするので、あとで確認する)

注意

1つの.clasp.jsonに複数のプロジェクトを追加することはできないみたいです。

既存プロジェクトしたい(clasp clone

// ディレクトリを作成する
$ mkdir PROJECT_NAME
$ cd PROJECT_NAME

// 既存プロジェクトをクローンする
$ clasp clone スクリプトID
$ clasp clone スクリプトID --rootDir .
Cloning files...
Cloned 2 files.

$ ls -la
.clasp.json
appsscript.json
testDoGet.js     # ウェブ上で作成済みのスクリプト

clasp cloneでGAS上にある既存のプロジェクト(スクリプト)をローカルにクローンできます。 スクリプトIDはURLに含まれているランダムな文字列です。

注釈

スクリプトIDがよくわからない、もしくは、 URLからわざわざ抜き出すのがめんどくさい、という場合は、 コピペしたURLをそのまま貼り付けてもOKみたいです。

ブラウザで開きたい(clasp open

// プロジェクト情報(.clasp.json)を参照
$ clasp open

// スクリプトID
$ clasp open スクリプトID

clasp openでブラウザが起動します。 .clasp.jsonに保存されているスクリプトIDの編集ページを開くことができます。

プロジェクトを更新したい(clasp pull / clasp push

// ウェブからプロジェクトを取得
$ clasp pull
$ clasp pull --versionNumber バージョン  # バージョン指定

// プロジェクトを更新
$ clasp push
$ clasp push -w    # --watchモード

pullpushを使って、ローカルとリモートのプロジェクトをやりとりします。

バージョン管理したい(clasp version / clasp versions

// バージョンを確認
$ clasp versions
~ 4 Versions ~
1 - v0.1.1
2 - v0.1.2
3 - v0.1.3
4 - v0.1.4

// アノテーションをつけてバージョン管理
$ clasp version "v0.1.5"

$ clasp versions
~ 5 Versions ~
1 - v0.1.1
2 - v0.1.2
3 - v0.1.3
4 - v0.1.4
5 - v0.1.5

clasp version "アノテーション"でバージョン管理できます。 GAS内のバージョン番号は自動でインクリメントされます。 あとで確認しやすいようにアノテーションにGitのタグ番号を含めておくとよさそうです。

clasp versionsで、これまでに作成したバージョンを確認できます。 一度作成したバージョンは削除できません。

デプロイ管理したい(clasp deploy / clasp deployments

// デプロイIDを確認
$ clasp deployments
1 Deployments.
- AKfycb...9Qm8gE @HEAD

// 作成済みバージョン番号を指定してデプロイ
$ clasp deploy --version 1 --description "v0.1.1"

// デプロイIDを確認
$ clasp deployments
2 Deployments.
- AKfycb...9Qm8gE @HEAD
- AKfycb...LH8l3z @1 - v0.1.1

// デプロイを削除
$ clasp undeploy AKfycb...LH8l3z

clasp deployでデプロイするバージョンを管理できます。 --versionには、clasp versionで作成したバージョン番号を指定します。 --descriptionでアノテーションを追加できます。

clasp deploymentsでデプロイIDを確認できます。 またバージョン管理と異なりclasp undeployでデプロイを削除できます。

注釈

--versionによるバージョン指定を省略した場合は、 自動インクリメントされたバージョン番号が追加され、割り当てられます。 バージョンが追加されたことはclasp versionsで確認できます。

Git管理したい

  • ディレクトリ構成

リポジトリ名
|-- プロジェクト名
|    |-- main.js
|    |-- module1.js
|    |-- module2.js
|-- .git/
|-- node_modules/
|-- package.json

リポジトリの中にGASプロジェクト用のディレクトリを作成すると、 リポジトリ内を散らけずに管理できます。 また、関連するGASプロジェクトが増えた場合も、簡単に追加できます。

  • ワークフロー

//////////////////////////////////////////////////
// 初回の準備
//////////////////////////////////////////////////

// ディレクトリを作成する
$ mkdir リポジトリ名
$ mkdir リポジトリ名/プロジェクト名

// claspをローカルに追加
$ cd リポジトリ名
$ npm install @google/clasp
// --> package.jsonやnode_modulesが作成される

// Gitする
$ git init
$ touch .gitignore
// node_modules などを追加する

// 既存プロジェクトをクローンする
$ cd プロジェクト名
$ clasp clone スクリプトID --rootDir .
$ ls -la
.clasp.json
appsscript.json
既存スクリプト.js

// スクリプトをGitに追加する
$ git add appsscript.json
$ git add 既存スクリプト.js

// プロジェクト情報は場合によりけり
$ git add .clasp.json

//////////////////////////////////////////////////
// 編集
// - 普段どおり開発しGit管理する
// - 編集したファイルの同期を忘れないようにする
//////////////////////////////////////////////////

// ブラウザで編集した内容を取り込む
$ clasp pull

// ローカルで編集した内容を反映させる
$ clasp push

//////////////////////////////////////////////////
// バージョン管理
// - Gitでタグ管理する
// - GASのバージョン(のアノテーション)はGitタグを基準にする
// - GASのデプロイはオプションでもよい
//////////////////////////////////////////////////

// タグを作成
$ git tag "0.1.2"
$ git push origin --tags
$ git tag -l
0.1.1
0.1.2

// GASのバージョン管理
$ clasp version "v0.1.2"
$ clasp versions
~ 2 Versions ~
1 - v0.1.1
2 - v0.1.2

// (オプション)GASのデプロイ管理
$ clasp deploy --version 2 --description "v0.1.2"
$ clasp deployments
3 Deployments.
- AKfycb...9Qm8gE @HEAD
- AKfycb...LH8l3z @1 - v0.1.1
- AKfycb...itf33M @2 - v0.1.2

既存のGASプロジェクトをGitで管理するためのセットアップ手順を整理しました。

ポイントとして、 リポジトリの中にGASプロジェクトごとのサブディレクトリ(PROJECT_NAME)を作成し、 その中でclasp clone --rootDir .しています。

こうすることで、1つの.clasp.jsonとプロジェクトの対応をキープすることができ、関連するプロジェクトが複数個に増加した場合にも対応できます。

リファレンス