Google Apps Script を clasp でローカル開発する環境構築手順

Google Apps Script を clasp でローカル開発する環境構築手順

Google Apps Script を clasp でローカル開発する環境構築手順です。PC の初期状態から、nvm による Node.js の導入、clasp のインストールと認証までを macOS と Windows の両方でまとめました。認証情報を 1Password で管理する方法も紹介します。
2026.08.08

はじめに

普段から 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 installnvm use の使い方はほぼ共通です。
導入方法だけが大きく異なるため、そこだけを OS ごとに分けて書きます。

1-1. 【共通】既存の Node.js を確認する

初期状態の端末に Node.js は入っていません。
買ったばかりの端末を使う方は、この 1-1 を読み飛ばして構いません。
インストーラーや Homebrew で入れた覚えがある場合だけ確認します。

macOS(ターミナル)
which -a node
node --version
Windows(PowerShell)
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 で表示されたパスを見ながら、関連ファイルを削除します。

macOS(ターミナル)
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 側で削除します。

macOS(ターミナル)
brew list --versions node
brew uninstall node

削除後にターミナルを開き直し、which -a node が何も返さないことを確認します。

【Windows】既存の Node.js を削除する
  1. 「設定」→「アプリ」→「インストールされているアプリ」で Node.js をアンインストールする
  2. C:\Program Files\nodejs%APPDATA%\npm が残っていれば、中身を確認して削除する
  3. ユーザー環境変数とシステム環境変数の PATH から、上記のパスを削除する
  4. PowerShell を開き直し、where.exe node が何も返さないことを確認する

1-2. 【macOS】nvm をインストールする

初期状態の macOS には、git などの開発用コマンドが入っていません。
先に Xcode Command Line Tools を導入します。

ターミナルは、Command + Space で Spotlight を開き、「ターミナル」と
入力すると起動できます。

macOS(ターミナル)
xcode-select --install

確認のダイアログが表示されるので、画面に沿ってインストールします。
すでに導入済みの端末では、その旨のメッセージが表示されて終了します。

インストールが終わったら、git が使えることを確認します。

macOS(ターミナル)
git --version

続いて nvm を入れます。
Homebrew で入れたくなるところですが、nvm は Homebrew 経由のインストールを
サポートしていません。
公式リポジトリでも、Homebrew で入れた nvm で問題が起きた場合は
brew uninstall してから入れ直すよう案内されています。[2:1]

そのため、公式のインストールスクリプトを使います。

macOS(ターミナル)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.6/install.sh | bash

スクリプトは、シェルの設定ファイルへ nvm を読み込む次の 3 行を追記します。
macOS の既定シェルは zsh のため、追記先は ~/.zshrc になります。

~/.zshrc
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

追記を反映するため、ターミナルを開き直します。
開き直さずに済ませたい場合は、設定ファイルを読み込み直します。

macOS(ターミナル)
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 のバージョンを確認します。

Windows(PowerShell)
nvm version

1-4. 【共通】Node.js の LTS をインストールする

ここからは、両方の OS で同じ流れになります。
違いは、LTS を指定するオプションの書き方だけです。

macOS(ターミナル)
nvm install --lts
Windows(PowerShell)
nvm install lts
nvm use lts

nvm-windows の nvm installnvm 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 が表示される場合

実行されているファイルを確認します。

Windows(PowerShell)
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 への
アクセスを許可します。

  1. Apps Script のユーザー設定を開く
  2. 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 でインストールします。

macOS(ターミナル)
brew install 1password-cli
op --version
Windows(PowerShell)
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]

macOS(ターミナル)
op document create ~/.clasprc.json \
  --title "clasp OAuth credentials" \
  --file-name ".clasprc.json" \
  --vault "<Vault>"
Windows(PowerShell)
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 には表示されないため、ターミナルから開きます。

macOS(ターミナル)
ls -la ~/.zshrc
open -e ~/.zshrc

ファイルがない場合は、touch ~/.zshrc で作成してから開きます。

開いたファイルの末尾に、次の関数を追記します。

~/.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"
}

保存したら、設定を読み込み直します。

macOS(ターミナル)
source ~/.zshrc

以降は clasp を実行するたびに、1Password から認証情報を取り出します。

bash を使っている場合は、追記先が ~/.bashrc になります。

【Windows】PowerShell プロファイルに追記する

PowerShell の設定ファイルは、プロファイルと呼ばれます。
場所は変数 $PROFILE に入っているため、まずそこを確認します。

Windows(PowerShell)
$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-PathFalse を返した場合は、ファイルを作ってから開きます。

Windows(PowerShell)
New-Item -ItemType File -Path $PROFILE -Force
notepad $PROFILE

開いたファイルの末尾に、次の関数を追記します。

Microsoft.PowerShell_profile.ps1
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
  }
}

保存したら、設定を読み込み直します。

Windows(PowerShell)
. $PROFILE
関数がしていること

<Vault> は、5-3 と同じく、ご自身の Vault の ID か名前に置き換えてください。

どちらの関数も、動きは次の 3 つです。

  1. 一時ディレクトリを作り、そこへ認証ファイルを取り出す
  2. 認証ファイルの場所を clasp に教えて実行する
  3. 実行が終わったら、一時ディレクトリごと削除する

認証ファイルの場所は、どちらも環境変数の clasp_config_auth で渡しています。
コマンドラインオプションの --auth も同じものを指すため、書き方を変えても
結果は同じです。[9:1]

PowerShell には、環境変数を 1 つのコマンドにだけ渡す書き方がありません。
そのため $env:clasp_config_auth へ設定し、finally で削除しています。
tryfinally で囲むのは、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月 アノテーション㈱から社名変更しました

脚注
  1. clasp でコマンドライン インターフェースを使用する(2026 年 8 月 7 日参照) ↩︎ ↩︎ ↩︎

  2. nvm-sh/nvm(Node Version Manager)(2026 年 8 月 7 日参照) ↩︎ ↩︎ ↩︎

  3. coreybutler/nvm-windows(2026 年 8 月 7 日参照) ↩︎ ↩︎ ↩︎

  4. Try the latest stable version of npm(2026 年 8 月 7 日参照) ↩︎ ↩︎

  5. npm Config: min-release-age(2026 年 8 月 7 日参照) ↩︎ ↩︎

  6. Enable script authorization and access(2026 年 8 月 7 日参照) ↩︎

  7. 1Password CLI: Get started(2026 年 8 月 8 日参照) ↩︎

  8. 1Password CLI: document commands(2026 年 8 月 8 日参照) ↩︎

  9. google/clasp: Configuration files(2026 年 8 月 8 日参照) ↩︎ ↩︎

この記事をシェアする

関連記事