アップロードしたい(clasp)
$ clasp push # ローカル -> GAS
$ clasp pull # GAS -> ローカル
claspは、Google Apps Scriptをローカル環境で管理できるコマンドです。
clasp pushでローカルからGAS環境にアップロードできます。
反対にclasp pullでGAS環境からローカルにダウンロードできます。
これによりGitによるバージョン管理と組み合わせることが
できるようになります。
TypeScriptで書いたコードをGASにアップロードする場合は、
tscで型チェックし、
rollupでバンドルしてからclasp pushする、
という3段階のワークフローになります。
本ページでは、そのワークフローの最後を担うclaspの使い方を説明します。
インストールしたい(clasp)
$ npm install -g @google/clasp
npmを使ってclaspをインストールします。
注釈
@google/claspは2022年9月の2.4.2の公開以降、開発が停滞していましたが、2025年1月から開発が再開されました。
2025年10月に3.1.0がリリースされ、使い勝手が大きく変わりました。
本ページは3.3.0(2026年時点の最新版)を基準にしています。
コマンド名が2系から大きく変わっているので、迷ったらclasp --helpで確認してください。
ヒント
3系ではコマンドに〇〇-scriptや〇〇-deploymentのような正式名と、
clasp createやclasp deployのような短いエイリアスの両方が用意されています。
本ページでは正式コマンド名で表記します。
エイリアスとの対応はページ末尾の「コマンド名の新旧対応表」を参照してください。
スクリプト設定したい(package.json)
{
"name": "...",
"scripts": {
"build": "tsc --noEmit",
"bundle": "rollup -c",
"bundle:watch": "rollup -c --watch",
"push": "clasp push",
"pull": "clasp pull",
"deploy": "npm run build && npm run bundle && npm run push",
"...": "..."
}
}
build(型チェック)→bundle(バンドル)→push(アップロード)という順番で、
tsc → rollup → claspのワークフローをそのままnpm scriptsに落とし込んでいます。
deployを実行すれば、この3段階を一度にまとめて実行できます。
$ npm run push
$ npm run pull
$ npm run deploy
プロジェクト設定したい(.clasp.json)
{
"scriptId": "スクリプトID",
"rootDir": "gas"
}
.clasp.jsonは、ローカルのディレクトリとGAS上のプロジェクトを結びつける設定ファイルです。
後述のclasp create-scriptやclasp clone-scriptを実行すると自動生成され、
以降のclasp push・clasp pull・clasp open-scriptなどはこのファイルを見て動作します。
scriptIdには対象のGASプロジェクトのスクリプトIDが、
rootDirにはclasp pushの対象にするディレクトリが記録されます。
基本的に1つのプロジェクトに1つの.clasp.jsonが対応します。
注意
.clasp.jsonにはスクリプトIDが含まれますが、認証情報そのものではありません。
とはいえ、プロジェクトごとに固有の情報なのでGitには含めず、
.gitignoreで管理するのが無難です。
rootDirには、rollupでバンドルしたあとのファイルを置くディレクトリを指定します。
具体的なディレクトリ構成は、後述の「Git管理したい」を参照してください。
ログインしたい(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 pull / clasp push)
// ウェブからプロジェクトを取得
$ clasp pull
$ clasp pull --versionNumber バージョン # バージョン指定
$ clasp pull -d # --deleteUnusedFiles: リモートにないローカルファイルを削除
// プロジェクトを更新
$ clasp push
$ clasp push -w # --watch: ファイル変更を監視して自動push
$ clasp push -f # --force: マニフェスト(appsscript.json)を強制上書き
pullとpushを使って、ローカルとリモートのプロジェクトをやりとりします。
clasp pull -d, --deleteUnusedFilesは、リモートに存在しないファイルをローカルからも削除するので注意して使ってください。
ヒント
clasp pushする前に、npm run build && npm run bundle(またはnpm run deploy)を実行して、
TypeScriptの変換を済ませておくのを忘れないようにしてください。
新規プロジェクトしたい(clasp create-script)
$ clasp create-script --title PROJECT_NAME --type standalone --rootDir gas
clasp create-scriptでプロジェクトを新規作成できます。
--titleでプロジェクトのタイトルを設定できます。
このオプションは、新しいディレクトリを作成するものではなく、ブラウザの編集ページのタイトルです。
また--typeでプロジェクトの種類を選択できます。
省略した場合はstandaloneになります。
注釈
GASのプロジェクトには、大きく分けて「スタンドアロンスクリプト」と「コンテナバインドスクリプト」の2種類があります。
スタンドアロンスクリプト(
standalone):どのアプリにも紐づかない独立したプロジェクト。script.google.comから新規作成した場合はこちら。コンテナバインドスクリプト:Google Sheet・Doc・Form・Slideなどに紐づいたプロジェクト。各アプリの「拡張機能」メニューから作成した場合はこちら。紐づいた親ファイル(コンテナー)の
SpreadsheetApp.getActiveSpreadsheet()のようなAPIを、認可なしで呼び出せるのが特徴です。
--typeにはstandaloneのほかにdocs・sheets・slides・formsなども指定できますが、
clasp create-scriptでコンテナバインドスクリプトを作るには--parentIdで親ファイルのIDを指定する必要があります。
既存のSheetなどに紐づけたい場合は、そのファイルの「拡張機能」→「Apps Script」から作成するほうが手軽です。
--rootDir(省略時は.)で指定したディレクトリに、前述の.clasp.jsonが生成されます。
$ clasp create-script --title PROJECT_NAME --rootDir .
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-script)
// ディレクトリを作成する
$ mkdir PROJECT_NAME
$ cd PROJECT_NAME
// 既存プロジェクトをクローンする
$ clasp clone-script スクリプトID
$ clasp clone-script スクリプトID --rootDir .
Cloning files...
Cloned 2 files.
$ ls -la
.clasp.json
appsscript.json
testDoGet.js # ウェブ上で作成済みのスクリプト
clasp clone-scriptでGAS上にある既存のプロジェクト(スクリプト)をローカルにクローンできます。
スクリプトIDはURLに含まれているランダムな文字列です。
注釈
スクリプトIDがよくわからない場合や、 URLからわざわざ抜き出すのがめんどくさい場合は、 コピペしたURLをそのまま貼り付けてもOKみたいです。
ブラウザで開きたい(clasp open-script)
// プロジェクト情報(.clasp.json)を参照
$ clasp open-script
// スクリプトIDを指定
$ clasp open-script スクリプトID
clasp open-scriptで、ブラウザでGASエディターを開くことができます。
.clasp.jsonがある場合はスクリプトIDが自動で補完されます。
バージョン管理したい(clasp create-version / clasp list-versions)
// バージョンを確認
$ clasp list-versions
~ 4 Versions ~
1 - v0.1.1
2 - v0.1.2
3 - v0.1.3
4 - v0.1.4
// アノテーションをつけてバージョン管理
$ clasp create-version "v0.1.5"
$ clasp list-versions
~ 5 Versions ~
1 - v0.1.1
2 - v0.1.2
3 - v0.1.3
4 - v0.1.4
5 - v0.1.5
clasp create-version "アノテーション"でバージョン管理できます。
GAS内のバージョン番号は自動でインクリメントされます。
あとで確認しやすいようにアノテーションにGitのタグ番号を含めておくとよさそうです。
clasp list-versionsで、これまでに作成したバージョンを確認できます。
一度作成したバージョンは削除できません。
デプロイ管理したい(clasp create-deployment / clasp list-deployments)
// デプロイIDを確認
$ clasp list-deployments
1 Deployments.
- AKfycb...9Qm8gE @HEAD
// 作成済みバージョン番号を指定してデプロイ
$ clasp create-deployment --versionNumber 1 --description "v0.1.1"
// デプロイIDを確認
$ clasp list-deployments
2 Deployments.
- AKfycb...9Qm8gE @HEAD
- AKfycb...LH8l3z @1 - v0.1.1
// デプロイを削除
$ clasp delete-deployment AKfycb...LH8l3z
// 既存のデプロイを新しいバージョンに更新
$ clasp update-deployment AKfycb...LH8l3z --versionNumber 2
clasp create-deploymentでデプロイするバージョンを管理できます。
-V, --versionNumberには、clasp create-versionで作成したバージョン番号を指定します。
-d, --descriptionでアノテーションを追加できます。
clasp list-deploymentsでデプロイIDを確認できます。
またバージョン管理と異なりclasp delete-deploymentでデプロイを削除できます。
-a, --allを付けるとすべてのデプロイを一括削除できます。
既存のデプロイをそのままに紐づくバージョンだけ差し替えたい場合は、
clasp update-deploymentが使えます。
注釈
--versionNumberによるバージョン指定を省略した場合は、
自動インクリメントされたバージョン番号が追加され、割り当てられます。
バージョンが追加されたことはclasp list-versionsで確認できます。
Git管理したい
リポジトリ名
|-- CHANGELOG.md
|-- README.md
|-- gas/ # clasp pushの対象ディレクトリ
| |-- .clasp.json # スクリプトID(Gitには含めない)
| |-- .claspignore
| |-- appsscript.json
| |-- code.bundle.js # rollupでバンドルしたファイル(.gitignoreに追加)
| |-- code.bundle.js.map
|-- 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/ # ドキュメント用(オプション)
tsc + rollup + claspを組み合わせたディレクトリ構成のサンプルです。
srcの中にTypeScriptファイルを作成し、
rollupでgas/code.bundle.jsにバンドルします。
.clasp.jsonはgas/の中に置き、
gasディレクトリでclasp pushを実行する構成にしています。
ヒント
複数のGASプロジェクト(例:本番用・開発用)を1つのリポジトリで管理したい場合は、
gas/のようなディレクトリをプロジェクトごとに分けて用意すると管理しやすくなります。
ヒント
ドキュメント関係のファイルはオプションです。
コード内にTSDoc形式でコメントしておくと、typedocでAPIドキュメントをMarkdown形式で出力できます。
注釈
pyproject.tomlがあるのは、
僕がPython周りのツールのほうが使い慣れているためです。
commitizen、pre-commit、mkdocsなどを使っています。
pushされるファイルを確認したい(clasp show-file-status)
$ clasp show-file-status
└─ appsscript.json
└─ code.bundle.js
clasp show-file-statusで、clasp pushの対象になっているファイル一覧を確認できます。
.claspignoreで除外したファイルは表示されないので、意図しないファイルが混ざっていないか事前にチェックできます。
ログを確認したい(clasp tail-logs)
// 直近のログを表示
$ clasp tail-logs
// Cloud Loggingへの出力を有効化
$ clasp setup-logs
clasp tail-logsで、GAS実行時のログ(Logger.logやconsole.logの出力)を確認できます。
初回はclasp setup-logsでCloud Loggingとの連携設定が必要な場合があります。
関数を実行したい(clasp run-function)
$ clasp run-function 関数名
clasp run-functionで、GASエディターを開かずにローカルから関数を実行できます。
初回実行時は--use-project-scopes付きでclasp loginをやり直し、プロジェクトに必要な権限を認可する必要がある場合があります。
コマンド名の新旧対応表
clasp 2系から3系でコマンド名が大きく変わりました。
2系の書き方が残っている記事も多いので、対応表としてまとめておきます。
2系 |
3系(正式名) |
3系(エイリアス) |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
|
|
|
|
|
|
|
(なし) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- |
|
|
- |
|
|
- |
|
|
- |
3系で追加された新しいコマンド
2系にはなかった、3系から追加されたコマンドです。
コマンド(正式名) |
エイリアス |
内容 |
|---|---|---|
|
- |
スクリプトのGCPプロジェクトの認証情報ページを開く |
|
- |
指定したAPIを有効化する |
|
- |
指定したAPIを無効化する |
|
|
有効化されているAPI一覧を表示する |
|
- |
GCPプロジェクトのAPIコンソールを開く |
|
- |
現在の認証状態を表示する |
|
- |
ブラウザでログ(開発者コンソール)を開く |
|
- |
Cloud Loggingとの連携を設定する |
|
- |
紐づいたアプリ(Sheetsなど)のGASエディターを開く |
|
- |
デプロイ済みのウェブアプリをブラウザで開く |
|
|
Apps Scriptプロジェクトの一覧を表示する |
|
|
Apps Script操作用のMCPサーバーを起動する |
注釈
これらはclasp --helpで確認できるコマンドの一部です。
今後もバージョンアップで追加・変更される可能性があるので、迷ったらclasp --helpで最新の一覧を確認してください。