Vercel の Sensitive 環境変数が誰にも読み戻せない状態を作り直さずに解消し、Development 正本+毎日の差分監視で恒久化する
本番 env が全て Sensitive で共有不能なとき、skip-domain の一時本番デプロイ+RSA 暗号化で1回だけ取り出し、Development を正本化、env:set 入口と GitHub Actions の parity 監視で再発を止める手順
約34万トークンの節約 (API料金換算で約510円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「Vercel の Sensitive 環境変数が誰にも読み戻せない状態を作り直さずに解消し、Development 正本+毎日の差分監視で恒久化する」は、Web開発カテゴリのAI指示書(MDファイル)です。本番 env が全て Sensitive で共有不能なとき、skip-domain の一時本番デプロイ+RSA 暗号化で1回だけ取り出し、Development を正本化、env:set 入口と GitHub Actions の parity 監視で再発を止める手順この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約34万トークン(API料金換算で約510円)・85%のトークンを節約できます。
- カテゴリ
- Web開発
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約40万トークン
- この巻物使用時
- 約6万トークン
- 節約量
- 約34万トークン (約510円)
- 更新日
- 2026-10-17
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/vercel-sensitive-development/raw を読み込んで、この指示書どおりに実装して"
中身
Vercel の Sensitive 環境変数が誰にも読み戻せない状態を、作り直さずに解消して恒久化する
この指示書で解決すること
- Vercel の本番環境変数がすべて Sensitive 型で入っていて、
vercel env pull --environment=productionでも API でも値が[SENSITIVE]/ 空になり、新しい PC や担当者へ共有できない。 - 発行元(LINE・SaaS の API キー等)で作り直すと連携先の再設定が連鎖するので、作り直さずに現行の値を取り出したい。
- 二度と同じ状態にならないよう、登録の入口を1本化し、ずれを毎日検出したい。
前提(公式仕様)
- Sensitive 値は作成後にダッシュボード・CLI・API から読めないが、ビルドと実行時には渡される。
- Development ターゲットには Sensitive を置けない(
vercel env pull用に読める必要があるため)。→ Development をチームが読める正本にできる。 - 出典: https://vercel.com/docs/environment-variables/sensitive-environment-variables
手順 A: 現行値を作り直さずに1回だけ取り出す(本番トラフィックに影響させない)
- 現状を測る(値は扱わない):
GET /v10/projects/<projectId>/env?teamId=<teamId>で key / type / target / updatedAt を一覧化し、「production にあって development に無いキー」を数える。 - 作業ブランチではなく main から切った clean worktree を作る(共有クローンの未コミット変更を本番デプロイに混ぜない)。
.vercel/project.jsonをコピーする。 - ローカルで RSA-3072 鍵ペアを作る(秘密鍵はローカルのみ・権限 600)。
- 一時ルート(例
/api/admin/env-export-once)を追加する。条件:Authorization: Bearer <CRON_SECRET 等の既存秘密>一致 かつVERCEL_ENV === "production"以外は 404。- 対象キーの
process.envを JSON 化 → AES-256-GCM で暗号化 → AES 鍵を 公開鍵 RSA-OAEP(SHA-256) で包んで返す(平文は一度もネットワークに出さない)。 - ミドルウェアの認証除外パス配下に置く(例:
/api/adminが Bearer 認証前提で除外されている等)。
vercel deploy --prod --skip-domainでデプロイする。本番の環境変数を持つが本番ドメインには割り当てないので、利用者・cron には影響しない。- Deployment Protection がある場合、生成 URL は保護される。
vercel curlは bypass トークンを自動生成するので、以後はそのトークンをx-vercel-protection-bypassヘッダに付けてfetchする(vercel curl経由で引数に Authorization を渡すと shell で崩れることがある)。 - 1回だけ取得し、ローカルで復号。画面には 値を出さず sha256 先頭8桁と長さだけ出して照合表を作る。
- 直ちに後始末し、すべて実測で確認する:
DELETE /v13/deployments/<id>→ 生成 URL が 404。PATCH /v1/projects/<id>/protection-bypass{ "revoke": { "secret": "<自動生成分>", "regenerate": false } }→ bypass 残数が元に戻る。- 本番ドメインの同パスも 404。
- 復号済み JSON と秘密鍵をローカルから削除。
手順 B: Development を正本にする
- 取り出した全キーを Development(type=encrypted)へ書き、
GET /v1/projects/<id>/env/<envId>?decrypt=trueで 全件読み戻して一致を確認。 - 秘密でない設定(モデル名・タイムゾーン・メール一覧・公開 URL・シート/フォルダ ID 等)は、値の形式を正規表現で検査してから本番も通常型へ作り直す(Sensitive ⇔ 通常の型変更は PATCH できないので delete→create)。実行中デプロイの env は作成時点で固定なので、同じ値なら挙動は変わらない。
- 他 PC は
vercel env pull .env.local --environment=development --yesだけで全値を取れる。 - 注意: 以前に別経路で配った値が本番と食い違っていることがある(実例: 3/11 キーが不一致)。本番値を正として上書きし、旧値の持ち主へ伝える。
手順 C: 恒久化(入口1本+毎日の見張り)
- 登録の入口
scripts/env-set.mjs(pnpm env:set KEY、値は stdin):- 対象 target を含む既存定義を delete → production(Sensitive。
--plainで通常型)と development(通常型)を create → development を decrypt 読み戻しして一致確認。 - Preview には既定で入れない(PR プレビューに本番秘密を渡さない)。
- 対象 target を含む既存定義を delete → production(Sensitive。
- 見張り
scripts/env-parity.mjs: production と development のキー名・updatedAt を比較し、「development に無い」「production だけ新しい(猶予5分)」を検出 → Discord Bot で DM → exit 1。値は扱わない。- Windows で
fetch直後にprocess.exit()すると libuv のアサーションで落ちることがある →process.exitCodeで返す。
- Windows で
- GitHub Actions
env-parity.ymlを毎日実行。secrets:VERCEL_TOKEN/ Bot トークン / 通知先ユーザー ID。 - VERCEL_TOKEN の落とし穴:
vercel login(OAuth)で得た CLI トークン(vca_期限付き+vcr_回転式 refresh)からはPOST /v3/user/tokensが 403「Cannot create tokens for this app」。refresh トークンを CI に置くと回転で手元の CLI ログインが切れる。→ 長期トークンは人がダッシュボード(Account Settings → Tokens、Scope=対象チーム、No Expiration)で発行する。ワンクリックのランチャーで「ブラウザでトークン画面を開く → 非表示入力で貼り付け → API で読めるか検証 →gh secret set→gh workflow run→ 結果表示」まで自動化すると、人の操作は発行と貼り付けだけになる。 - リポジトリの開発ルール(CLAUDE.md 等)に「env は
pnpm env:setだけで投入。ダッシュボードやvercel env add KEY productionで本番だけに入れない」を明記する。
検証(完了条件)
- 取り出し: 対象キー全件の sha8 一覧(値なし)。一時デプロイ 404・bypass 残数が元どおり・本番ドメイン 404。
- 正本化: development を全件 decrypt 読み戻し一致。
- 入口: 試験キー(通常型・Sensitive の2種)で env:set → 読み戻し一致 → 試験キー削除。
- 見張り: production だけに試験キーを置くと exit 1、削除で exit 0。CI の workflow_dispatch 実行が success。
やってはいけないこと
- 取り出しルートを本番ドメインに載せる・main にマージする・平文で返す。
- 共有クローンの作業ブランチからそのまま
vercel deploy --prod(未コミットの他作業が本番に混ざる)。 - 値をログ・チャットに出す(照合は hash 先頭8桁で行う)。
よくある質問
+「Vercel の Sensitive 環境変数が誰にも読み戻せない状態を作り直さずに解消し、Development 正本+毎日の差分監視で恒久化する」とは何ですか?
本番 env が全て Sensitive で共有不能なとき、skip-domain の一時本番デプロイ+RSA 暗号化で1回だけ取り出し、Development を正本化、env:set 入口と GitHub Actions の parity 監視で再発を止める手順
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約40万トークンかかりますが、この巻物を使えば約6万トークンで済みます。差し引き約34万トークン(API料金換算で約510円)・85%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
Next.js + Supabase + Vercel 立ち上げ完全自動化MD
新規Webサービスの立ち上げ (GCP/GitHub/Vercel/Supabase のプロジェクト作成〜環境変数〜本番デプロイ) を AI に一気通貫でやらせる指示書。人間の作業はログイン1回だけ。
投稿の審査キューを「信頼済みだけ自動公開」で捌く設計(なりすまし穴つき)
審査キューに投稿が溜まったまま埋もれる問題を、信頼済み投稿だけ即公開する形で潰す指示書。無検証のキー発行を信頼判定に使うと第三者が自社メールを騙れる穴と、サーバレスで静的公開棚に実行時公開を足す方法、検証10項目まで含む。
DB型サイトを「一覧だけ会員限定・個別ページは残す」に切り替える指示書(Next.js App Router)
自社DBで集客していたサイトが競合のリスト抜き取りに気づいた時の改修手順。名前が並ぶバルクな一覧だけを会員限定にし、個別ページはtitle/H1とCTAを残す。ItemList JSON-LDやsitemapの漏れ、force-dynamic化のコスト副作用、Layer1(HTML)+Layer2(Playwright実描画)の受け入れテストまで含む。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア