アップロードしたい(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 scriptsのpushとpullを設定シタサンプルです。
$ npm run push
$ npm run pull
それぞれnpm run pushとnpm 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モード
pullとpushを使って、ローカルとリモートのプロジェクトをやりとりします。
バージョン管理したい(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周りのツールのほうが使い慣れているためです。
commitizen、pre-commit、mkdocsなどを使っています。