Google Apps Script を clasp でローカル開発する環境構築手順
はじめに
普段から clasp を使っていますが、新しい端末へ環境を作るたびに、
nvm での Node.js の入れ方や npm のバージョン、Apps Script API の
設定手順を確認しています。
そこで、自分が次回も同じ環境を再現できるように、macOS と Windows の
セットアップ手順を備忘録として残します。
Node.js と npm の準備から clasp の認証、既存の Google Apps Script(GAS)
プロジェクトへコードを反映するまでの記録です。
認証情報を 1Password で管理する方法も、任意の手順として書き添えました。
手順は macOS と Windows の両方でたどり、clasp push が通るところまで
確認しています。
事前に用意するもの
用意しておくのは、次の 2 つだけです。
- macOS または Windows の端末
- Google アカウント
nvm、Node.js、npm、clasp は、この記事の手順でインストールします。
macOS はコマンドラインツールの導入から、Windows はインストーラーの実行から
始めるため、初期状態の端末でもそのままたどれます。
すでに Node.js を入れている端末では、手順 1-1 で状態を確認してから進めます。
なお clasp 3.3.0 は、Node.js 20.0.0 以降を必要とします。[1]
この記事の読み方
環境構築手順
手順 1: nvm で Node.js と最新の npm を準備する
Node.js は、インストーラーではなく nvm(Node Version Manager)で入れます。
プロジェクトごとに要求されるバージョンが違っても、切り替えで対応できるためです。
macOS と Windows では、使うツール自体が異なります。
macOS は nvm-sh/nvm、Windows は別プロジェクトの nvm-windows を使います。[2][3]
別のソフトウェアですが、nvm install と nvm use の使い方はほぼ共通です。
導入方法だけが大きく異なるため、そこだけを OS ごとに分けて書きます。
1-1. 【共通】既存の Node.js を確認する
初期状態の端末に Node.js は入っていません。
買ったばかりの端末を使う方は、この 1-1 を読み飛ばして構いません。
インストーラーや Homebrew で入れた覚えがある場合だけ確認します。
which -a node
node --version
where.exe node
node --version
何も表示されなければ、そのまま次へ進みます。
パスが表示された場合は、nvm の管理外にある Node.js が残っています。
そのままでも nvm は入りますが、PATH の順序によっては古いほうが優先され、
nvm use で切り替えたつもりのバージョンと node --version が食い違います。
原因の切り分けに時間を取られるため、先に削除しておきます。
削除する前に、グローバルインストールしているパッケージを控えておきます。
npm ls --global --depth=0
Node.js を消すと、一覧に出たパッケージも一緒に消えます。
必要なものは、nvm で Node.js を入れ直したあとに再インストールします。
【macOS】既存の Node.js を削除する
公式インストーラー(.pkg)版には、アンインストーラーが用意されていません。
which -a node で表示されたパスを見ながら、関連ファイルを削除します。
sudo rm -rf /usr/local/bin/node /usr/local/bin/npm /usr/local/bin/npx
sudo rm -rf /usr/local/lib/node_modules
sudo rm -rf /usr/local/include/node
Homebrew で入れた場合は、Homebrew 側で削除します。
brew list --versions node
brew uninstall node
削除後にターミナルを開き直し、which -a node が何も返さないことを確認します。
【Windows】既存の Node.js を削除する
- 「設定」→「アプリ」→「インストールされているアプリ」で Node.js をアンインストールする
C:\Program Files\nodejsと%APPDATA%\npmが残っていれば、中身を確認して削除する- ユーザー環境変数とシステム環境変数の
PATHから、上記のパスを削除する - PowerShell を開き直し、
where.exe nodeが何も返さないことを確認する
1-2. 【macOS】nvm をインストールする
初期状態の macOS には、git などの開発用コマンドが入っていません。
先に Xcode Command Line Tools を導入します。
ターミナルは、Command + Space で Spotlight を開き、「ターミナル」と
入力すると起動できます。
xcode-select --install
確認のダイアログが表示されるので、画面に沿ってインストールします。
すでに導入済みの端末では、その旨のメッセージが表示されて終了します。
インストールが終わったら、git が使えることを確認します。
git --version
続いて nvm を入れます。
Homebrew で入れたくなるところですが、nvm は Homebrew 経由のインストールを
サポートしていません。
公式リポジトリでも、Homebrew で入れた nvm で問題が起きた場合は
brew uninstall してから入れ直すよう案内されています。[2:1]
そのため、公式のインストールスクリプトを使います。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.6/install.sh | bash
スクリプトは、シェルの設定ファイルへ nvm を読み込む次の 3 行を追記します。
macOS の既定シェルは zsh のため、追記先は ~/.zshrc になります。
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
追記を反映するため、ターミナルを開き直します。
開き直さずに済ませたい場合は、設定ファイルを読み込み直します。
source ~/.zshrc
nvm --version
$ nvm --version
0.40.6
nvm: command not found になる場合は、上の 3 行が設定ファイルに
入っているかを確認してください。入っていなければ、自分で追記します。
macOS で環境を作る場合は、Windows 向けの 1-3 を飛ばして 1-4 へ進みます。
1-3. 【Windows】nvm-windows をインストールする
nvm-windows のリリースページから nvm-setup.exe をダウンロードし、
実行してインストールします。
Releases · coreybutler/nvm-windows · GitHub
インストーラー版の Node.js が残っている場合は、1-1 の手順で先に削除します。
公式ドキュメントでも、nvm-windows を入れる前に既存の Node.js を
アンインストールするよう案内されています。[3:1]
インストーラーでは、nvm-windows 自体の配置先と、選択中の Node.js を指す
シンボリックリンクの場所を指定します。理由がなければ既定のまま進めます。
インストール後、スタートメニューから PowerShell を開き直します。
このあとの nvm use はシンボリックリンクを作り直すため、管理者として
実行してください。
nvm-windows のバージョンを確認します。
nvm version
1-4. 【共通】Node.js の LTS をインストールする
ここからは、両方の OS で同じ流れになります。
違いは、LTS を指定するオプションの書き方だけです。
nvm install --lts
nvm install lts
nvm use lts
nvm-windows の nvm install と nvm use は、どちらも lts を
バージョン指定として受け付けます。[3:2]
macOS では、最初にインストールしたバージョンがそのまま default に
なります。[2:2]
nvm-windows に default の指定はなく、nvm use で選んだバージョンが
シンボリックリンクとして残ります。
npm は Node.js に同梱されるため、この時点で一緒に入ります。
バージョンの更新は、次の 1-5 で行います。
【Windows】node が見つからない場合は、PowerShell を開き直します。
解消しないときは、nvm use が成功しているかを確認してください。
1-5. 【共通】npm を更新し、公開直後のパッケージを避ける
macOS のターミナル、Windows の PowerShell ともに、同じコマンドを使います。[4]
npm install --global npm@latest
更新後のバージョンを確認します。
$ node --version
v24.19.0
$ npm --version
12.0.2
【Windows】更新後も古い npm が表示される場合
実行されているファイルを確認します。
where.exe npm
npm config get prefix
複数の npm が表示された場合は、以前のインストーラー版が残っている可能性があります。
nvm-windows が管理するディレクトリが先に参照されるように、
ユーザー環境変数の PATH を確認してください。[4:1]
次に、公開直後のパッケージをインストール対象から外す設定を追加します。
npm config set min-release-age=1 --location=user
min-release-age の単位は日です。
1 を指定すると、公開から 1 日未満のパッケージが通常の解決対象から外れます。[5]
手順 2: clasp をインストールする
Google 公式の手順に沿って、clasp をグローバルインストールします。[1:1]
npm install --global @google/clasp
インストール後にバージョンを確認します。
$ clasp --version
3.3.0
今回の検証では、min-release-age=1 を設定した状態でも
@google/clasp 3.3.0 をインストールできました。
手順 3: Apps Script API を有効にする
clasp から GAS プロジェクトを操作するには、Apps Script API への
アクセスを許可します。
- Apps Script のユーザー設定を開く
Google Apps Script APIをオンにする
この設定は、スクリプトの作成や変更を行うアプリケーション全般に必要です。
アプリケーションごとの認証は、これとは別に求められます。[6]
手順 4: Google アカウントで clasp にログインする
次のコマンドを実行するとブラウザが開きます。
操作対象の GAS プロジェクトを編集できるアカウントで認証します。
clasp login
ログインすると、ユーザーのホームディレクトリに .clasprc.json が作成されます。
作成先は OS ごとに異なります。
- 【macOS】
~/.clasprc.json - 【Windows】
%USERPROFILE%\.clasprc.json
このファイルには、Google アカウントの OAuth トークンが入っています。
ホームディレクトリにあるため通常はリポジトリに含まれませんが、作業ディレクトリへ
コピーしないよう注意してください。
作業端末から認証情報を消したい場合は、次のコマンドでログアウトできます。
clasp logout
ここまでで、ローカルから GAS を操作する準備は整いました。
1Password を使わない方は、次の手順 5 を飛ばして手順 6 へ進んでください。
手順 5: 【任意】clasp の認証情報を 1Password で管理する
ホームディレクトリに OAuth トークンを平文で置いたままにするのが気になる方
向けの手順です。
.clasprc.json を 1Password に預け、clasp を実行する瞬間だけ取り出す形に
します。
私は 1Password を使っているため、コマンドラインからアイテムを読み書きできる
1Password CLI(op)と組み合わせました。
5-1. 1Password CLI を導入する
導入の流れは、1Password の公式ガイドに沿っています。[7]
macOS は Homebrew、Windows は winget でインストールします。
brew install 1password-cli
op --version
winget install 1password-cli
op --version
パッケージマネージャーを使わない場合は、公式サイトから配布されている
op.pkg(macOS)や op.exe(Windows)でも導入できます。
続いて、デスクトップアプリ側で CLI との連携をオンにします。
1Password を開き、「設定」→「開発者」から「1Password CLI と統合」を
選択します。
macOS は Touch ID、Windows は Windows Hello を有効にしておくと、op を
実行したときの認証が生体認証で済みます。
1Password のデータを扱うコマンドを最初に実行したときに、認証を求める
プロンプトが表示されます。
5-2. 保存先の Vault を確認する
認証情報を預ける Vault を、一覧から選びます。
op vault list
表示された一覧から、保存先にする Vault の ID か名前を控えます。
5-3. .clasprc.json を 1Password へ保存する
op document create で、ファイルをドキュメントとして登録します。[8]
op document create ~/.clasprc.json \
--title "clasp OAuth credentials" \
--file-name ".clasprc.json" \
--vault "<Vault>"
op document create "$HOME\.clasprc.json" `
--title "clasp OAuth credentials" `
--file-name ".clasprc.json" `
--vault "<Vault>"
<Vault> は、5-2 で控えた Vault の ID か名前に置き換えます。
--file-name にドットで始まる名前を指定しているのは、認証ファイルの名前が
ドットで始まることを clasp が求めるためです。[9]
5-4. ローカルの認証情報を削除する
1Password へ保存できたら、端末側の認証情報を削除します。
clasp logout
これで端末から認証情報が消えます。
clasp はそのままでは操作できなくなるため、続けて取り出す仕組みを用意します。
5-5. 実行時だけ取り出すシェル関数を用意する
clasp を呼ぶたびに 1Password から取り出し、終わったら消す関数を定義します。
書き込む先は、シェルの設定ファイルです。
| OS | 書き込むファイル |
|---|---|
| macOS(zsh) | ~/.zshrc |
| Windows(PowerShell) | $PROFILE が指すファイル |
【macOS】~/.zshrc に追記する
~/.zshrc は、ホームディレクトリ直下にある隠しファイルです。
Finder には表示されないため、ターミナルから開きます。
ls -la ~/.zshrc
open -e ~/.zshrc
ファイルがない場合は、touch ~/.zshrc で作成してから開きます。
開いたファイルの末尾に、次の関数を追記します。
clasp() {
local dir=$(mktemp -d)
op document get "clasp OAuth credentials" \
--vault "<Vault>" \
--out-file "$dir/.clasprc.json"
clasp_config_auth="$dir/.clasprc.json" command clasp "$@"
rm -rf "$dir"
}
保存したら、設定を読み込み直します。
source ~/.zshrc
以降は clasp を実行するたびに、1Password から認証情報を取り出します。
bash を使っている場合は、追記先が ~/.bashrc になります。
【Windows】PowerShell プロファイルに追記する
PowerShell の設定ファイルは、プロファイルと呼ばれます。
場所は変数 $PROFILE に入っているため、まずそこを確認します。
$PROFILE
Test-Path $PROFILE
既定では、次の場所になります。
- PowerShell 7:
C:\Users\<ユーザー名>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 - Windows PowerShell 5.1:
C:\Users\<ユーザー名>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Test-Path が False を返した場合は、ファイルを作ってから開きます。
New-Item -ItemType File -Path $PROFILE -Force
notepad $PROFILE
開いたファイルの末尾に、次の関数を追記します。
function clasp {
$dir = New-Item -ItemType Directory (Join-Path $env:TEMP ([guid]::NewGuid()))
op document get "clasp OAuth credentials" `
--vault "<Vault>" `
--out-file "$dir\.clasprc.json"
$env:clasp_config_auth = "$dir\.clasprc.json"
try {
clasp.cmd @args
} finally {
Remove-Item Env:\clasp_config_auth
Remove-Item -Recurse -Force $dir
}
}
保存したら、設定を読み込み直します。
. $PROFILE
関数がしていること
<Vault> は、5-3 と同じく、ご自身の Vault の ID か名前に置き換えてください。
どちらの関数も、動きは次の 3 つです。
- 一時ディレクトリを作り、そこへ認証ファイルを取り出す
- 認証ファイルの場所を
claspに教えて実行する - 実行が終わったら、一時ディレクトリごと削除する
認証ファイルの場所は、どちらも環境変数の clasp_config_auth で渡しています。
コマンドラインオプションの --auth も同じものを指すため、書き方を変えても
結果は同じです。[9:1]
PowerShell には、環境変数を 1 つのコマンドにだけ渡す書き方がありません。
そのため $env:clasp_config_auth へ設定し、finally で削除しています。
try と finally で囲むのは、clasp がエラーで止まった場合でも環境変数と
一時ディレクトリを確実に消すためです。
関数と同じ名前のコマンドを呼ぶため、実体を明示している点も共通です。
macOS は command clasp、Windows は npm が作る clasp.cmd を指定しています。
この指定を省くと、関数が自分自身を呼び出し続けます。
手順 6: GAS プロジェクトをローカルへ取得する
操作したいプロジェクトがない場合は、Apps Script のホーム画面
から新規作成します。
対象のプロジェクトを開き、「プロジェクトの設定」からスクリプト ID を
コピーします。[1:2]
作業用ディレクトリを作り、<Script ID> をコピーした値に置き換えてクローンします。
mkdir gas-local-deploy
cd gas-local-deploy
clasp clone "<Script ID>"
スクリプト ID を保持する .clasp.json と、マニフェストの appsscript.json が
作成されます。
手順 7: ローカルの変更を GAS へ反映する
コードを編集したら、反映対象のファイルを確認します。
clasp status
意図したファイルだけが表示されていることを確認してから、GAS へ反映します。
clasp push
Apps Script エディタを開き、ローカルの変更を確認します。
clasp open-script
まとめ
今回は、clasp を使って Google Apps Script をローカルから更新する
環境構築手順を、備忘録として残しました。
特に残しておきたかったのは、既存の Node.js を片づけてから nvm を入れる順序と、
最新 npm へ更新してから min-release-age=1 を設定する流れです。
Node.js を nvm で管理しておくと、npm 側の要件が変わったときに戻しやすくなります。
一方で、npm もグローバルパッケージも Node.js のバージョンごとに分かれるため、
切り替えたあとは clasp の入れ直しが必要になります。
認証情報は 1Password に預け、clasp を実行する瞬間だけ取り出す形にしました。
ここは好みが分かれるところなので、任意の手順として書いています。
1Password を使わない場合も、認証情報の .clasprc.json を公開リポジトリへ
含めない点は変わりません。
clasp のコマンド一覧やオプションは、公式ドキュメントにまとまっています。
本ブログが、GAS をローカルで開発したい方の参考になれば幸いです。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました
clasp でコマンドライン インターフェースを使用する(2026 年 8 月 7 日参照) ↩︎ ↩︎ ↩︎
nvm-sh/nvm(Node Version Manager)(2026 年 8 月 7 日参照) ↩︎ ↩︎ ↩︎
coreybutler/nvm-windows(2026 年 8 月 7 日参照) ↩︎ ↩︎ ↩︎
Try the latest stable version of npm(2026 年 8 月 7 日参照) ↩︎ ↩︎
npm Config: min-release-age(2026 年 8 月 7 日参照) ↩︎ ↩︎
Enable script authorization and access(2026 年 8 月 7 日参照) ↩︎
1Password CLI: Get started(2026 年 8 月 8 日参照) ↩︎
1Password CLI: document commands(2026 年 8 月 8 日参照) ↩︎
google/clasp: Configuration files(2026 年 8 月 8 日参照) ↩︎ ↩︎






