platform docker

Dockerコンテナ内では、通常の clasp login が使う localhost への認証コールバックを、ホスト側のブラウザから受け取れないことがあります。本記事では、--network host でホストと同じネットワークにしてログインする方法を解説します。

サムネイル

環境

  • OS: WSL2(Linux 向けの手順です)
  • Node.js(Docker コンテナ): node:26-alpine
  • clasp 3.3.0

Docker Desktop(Windows / Mac)では --network host が期待どおり動かないことがあります。

–network host で通常の clasp login

コンテナをホストネットワークで起動すると、認証後の localhost コールバックがそのままコンテナ内の clasp に届きます。

ホスト側で認証情報ファイルを用意します(初回のみ)。

touch ~/.clasprc.json

コンテナを起動します。

docker run -it --rm \
  --network host \
  -v "$(pwd):/app" \
  -v "$HOME/.clasprc.json:/root/.clasprc.json" \
  -w /app \
  node:26-alpine sh

コンテナ内で、プロジェクトの依存関係(package.json に含まれる clasp 3.3.0)を入れ、ログインします。

npm ci
npx clasp login

表示された認証URLをホスト側のブラウザで開き、Googleアカウントで許可します。成功すると ~/.clasprc.json(ホストにマウントしたファイル)へ認証情報が保存されます。

その後は同じコンテナで npx clasp push などが実行できます。

2回目以降は、マウントした ~/.clasprc.json に認証情報が残っているため、通常は clasp login は不要です。期限切れや別アカウントに切り替えるときだけ再度ログインしてください。

–no-localhost は使わない

以前は Docker 向けに npx clasp login --no-localhost(認証結果を手で貼る方式)が案内されることがありました。しかし Google は Out-of-Band(OOB)OAuth を非推奨・ブロックしており、この方式ではログインできないことがほとんどです。

参考

この記事は Cursor のセッションログをもとに、Cursor によって生成されました。

関連記事