- Node.js >= 24 と pnpm 10
- mise を使っている場合は
mise installで自動セットアップ - または Dev Container / Codespaces でローカル環境構築なしで開始可能
clasp の共有認証情報を Google Cloud Secret Manager に格納し、CI は Workload Identity Federation でキーレス取得します — 詳細: secret-manager.ja.md。概要:
- CI/CD 用の専用 Google アカウント(例:
apps-script-deploy@yourcompany.com)を作成し、clasp loginを実行。~/.clasprc.jsonを secretclasp-credentialsに格納します。 - WIF プール
apps-script-fleetにgithubプロバイダを作成し、org に attribute 制限(assertion.repository_owner == '<org>'— GitHub の issuer はマルチテナントのため必須)。 principalSet://…/attribute.repository_owner/<org>にroles/secretmanager.secretAccessorを付与。- Organization variables
GCP_WIF_PROVIDERとCLASPRC_SECRETを設定。
このテンプレートから作成されるすべてのリポジトリが自動的に WIF で認証します。リポごとの認証設定は不要です。リポ単位のハードニングが必要な場合は、IAM を
attribute.repository/<org>/<repo>にバインドするか、deployment environment にピン留め(sub = repo:ORG/REPO:environment:ENV)できます。注意: CD はworkflow_runトリガーで動くため、refベースの OIDC 条件は不安定です —repository/environmentクレームを使ってください。
Legacy フォールバック: CLASPRC_JSON Organization Secret
GCP_WIF_PROVIDER 未設定時に自動的に使われます: ~/.clasprc.json の内容を Organization Secret(名前: CLASPRC_JSON)として追加します。
GitHub で "Use this template" をクリックし、クローン:
git clone https://github.com/<your-org>/<your-project>.git
cd <your-project>
pnpm install
.clasp-dev.json と .clasp-prod.json を作成(gitignore 済み):
{
"scriptId": "YOUR_SCRIPT_ID",
"projectId": "YOUR_GCP_PROJECT_ID",
"rootDir": "dist"
}
projectIdは Apps Script に紐づく GCP プロジェクト番号です("123456789"のような数字列。my-project-abcのようなプロジェクト ID ではない)。Apps Script エディタ → プロジェクトの設定 → Google Cloud Platform(GCP)プロジェクトで確認できます。記載することで GCP プロジェクトの紐づけが宣言的・再現可能になります。省略時は clasp がスクリプトの既存 GCP プロジェクトを使用します。
| Environment | Secret / Variable | 値 |
|---|---|---|
development |
Secret: CLASP_JSON |
{"scriptId":"DEV_ID","projectId":"GCP_NUM","rootDir":"dist"} |
development |
Variable: DEPLOYMENT_ID |
dev のデプロイメント ID |
production |
Secret: CLASP_JSON |
{"scriptId":"PROD_ID","projectId":"GCP_NUM","rootDir":"dist"} |
production |
Variable: DEPLOYMENT_ID |
prod のデプロイメント ID |
GCP プロジェクト統合時:
CLASP_JSONに"projectId":"プロジェクト番号"を追加します(例:{"scriptId":"...","rootDir":"dist","projectId":"123456789"})。init.sh --gcp-project使用時は自動設定されます。
pnpm run check # lint + 型チェック + テスト
pnpm run deploy # check → build → dev にデプロイ
これで完了です。main へのプッシュで本番デプロイが自動的に実行されます。
ローカル環境の構築は不要です。.devcontainer/ にすべて設定済み。
- VS Code: 「Reopen in Container」を選択
- GitHub Codespaces: Code → Codespaces → Create codespace on main
コンテナ内での clasp login は pnpm exec clasp login --no-localhost を使用してください。