アップロードしたい(clasp

$ clasp push    # ローカル -> GAS
$ clasp pull    # GAS -> ローカル

claspは、Google Apps Scriptをローカル環境で管理できるコマンドです。 clasp pushでローカルからGAS環境にアップロードできます。 反対にclasp pullでGAS環境からローカルにダウンロードできます。 これによりGitによるバージョン管理と組み合わせることが できるようになります。

インストールしたい(clasp

$ npm install -g @google/clasp

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

注釈

@google/claspは2022年9月の2.4.2の公開以降、開発が停滞していましたが、2025年1月から開発が再開されたようです。 2025年10月に3.1.0がリリースされ、使い勝手が大きく変わりました。 コマンド名も大きく変わっているようなので、clasp --helpで確認してください。

スクリプト設定したい(package.json

{
    "name": "...",
    "...": "...",
    "scripts": {
        "push": "clasp push",
        "pull": "clasp pull",
        "...": "..."
    }
}

npm scriptspushpullを設定シタサンプルです。

$ npm run push
$ npm run pull

それぞれnpm run pushnpm run pullで実行できます。

ログインしたい(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に保存されます。

注釈

.clasprc.jsonは認証トークンが含まれるため、Gitなどに含めてはいけません。

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

$ clasp create --title PROJECCT_NAME --type standalone --rootDir dist

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

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

注釈

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

--rootDirでGASにアップロードするファイルのパスを設定できます。 デフォルトは、.です。

注釈

clasp 3系では、TypeScriptからJavaScriptへ自動変換(トランスパイル)されなくなりました。 代わりにrollupなどのバンドラーツールを併用する必要があります。 バンドルされたファイルはdistに生成するのが慣例となっているようなので、 --rootDir distを指定しています。

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

$ 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

注意

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-script

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

// v2
$ clasp open

clasp open-scriptで、ブラウザでGASエディターを開くことができます。 .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 create-deployment / clasp list-deployments

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

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

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

// デプロイを削除
$ clasp delete-deployment AKfycb...LH8l3z    # v2: clasp undeploy

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

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

注釈

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

Git管理したい

リポジトリ名
|-- CHANGELOG.md
|-- README.md
|-- dist/           # .gitignoreに追加
|   |-- appsscript.json
|   |-- code.js     # rollupでバンドルしたファイル
|-- node_modules/   # .gitignoreに追加
|-- package.json
|-- rollup.config.js    # rollupの設定
|-- tsconfig.json       # tscの設定
|-- src/            # TypeScriptファイル
|   |-- index.ts    # 自作モジュールのエントリーポイント
|   |-- config.ts   # 自作モジュールの設定用モジュール
|   |-- ...
|
|-- pyproject.toml  # commitizen, mkdocs など
|-- mkdocs.yml
|-- docs/           # ドキュメント用(オプション)

ディレクトリ構成のサンプルです。 srcの中にTypeScriptファイルを作成し、 rollupでバンドルしてdist/code.jsに出力します。 clasp pushされるのはdist/にあるファイルです。

ヒント

ドキュメント関係のファイルはオプションです。 コード内にTSDoc形式でコメントしておくと、typedocでAPIドキュメントをMarkdown形式で出力できます。

注釈

pyproject.tomlがあるのは、 僕がPython周りのツールのほうが使い慣れているためです。 commitizenpre-commitmkdocsなどを使っています。

リファレンス