jpskill.com
📦 その他 コミュニティ

env-manager

開発、ステージング、本番環境における環境変数やシークレットを管理し、監査、同期、差異検出、ローテーション、環境構築などを効率的に行い、設定ミスやセキュリティリスクを減らすSkill。

📜 元の英語説明(参考)

Manage environment variables and secrets across development, staging, and production environments. Use when someone needs to audit env vars, sync secrets between environments, detect missing or mismatched variables, rotate credentials, or set up a new environment from an existing one. Trigger words: env vars, environment variables, secrets, .env file, dotenv, config management, secret rotation, missing variable, environment sync.

🇯🇵 日本人クリエイター向け解説

一言でいうと

開発、ステージング、本番環境における環境変数やシークレットを管理し、監査、同期、差異検出、ローテーション、環境構築などを効率的に行い、設定ミスやセキュリティリスクを減らすSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o env-manager.zip https://jpskill.com/download/14869.zip && unzip -o env-manager.zip && rm env-manager.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/14869.zip -OutFile "$d\env-manager.zip"; Expand-Archive "$d\env-manager.zip" -DestinationPath $d -Force; ri "$d\env-manager.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して env-manager.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → env-manager フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

環境マネージャー

概要

この Skill は、複数の環境(開発、ステージング、本番)にわたる環境変数とシークレットの管理を支援します。不足している変数の検出、不一致の特定、公開されたシークレットの監査を行い、ダウンタイムなしで安全に認証情報をローテーションするのに役立ちます。

手順

環境変数の監査

  1. コード内のすべての環境変数参照を検索:

    grep -rn "process\.env\." src/ --include="*.ts" --include="*.js" | \
      sed 's/.*process\.env\.\([A-Z_]*\).*/\1/' | sort -u

    Python の場合:

    grep -rn "os\.environ\|os\.getenv" src/ --include="*.py" | \
      sed 's/.*os\.\(environ\["\|getenv("\)\([A-Z_]*\).*/\2/' | sort -u
  2. 定義されているものと比較:

    # .env.example または .env から
    grep -v '^#' .env.example | grep '=' | cut -d'=' -f1 | sort -u
  3. レポート:

    • コードで参照されているが、.env.example に存在しない変数 → ⚠️ ドキュメント化されていません
    • .env.example に存在するが、コードで一度も参照されていない変数 → ℹ️ おそらく古い
    • デフォルト値も検証もない変数 → 🔴 存在しない場合、アプリはクラッシュします

環境の比較

  1. 各環境から変数リストを取得:

    • ローカル: .env または .env.local を解析
    • CI/CD: プラットフォーム構成を確認 (GitHub Actions secrets、GitLab CI variables)
    • ホスティング: プラットフォームの環境変数を確認 (Vercel、Railway、Heroku 構成)
    • シークレットマネージャー: Doppler、AWS SSM、または Vault にクエリを実行
  2. 比較マトリックスを作成:

    変数              | dev | staging | prod | 注釈
    DATABASE_URL          | ✓   | ✓       | ✓    | 環境ごとに異なる ✓
    STRIPE_SECRET_KEY     | ✓   | ✓       | ✗    | ⚠️ prod で不足しています!
    REDIS_URL             | ✗   | ✓       | ✓    | ℹ️ ローカルでは不要
    NEXT_PUBLIC_API_URL   | ✓   | ✓       | ✓    | 値が異なることを確認
  3. 問題をフラグ付け:

    • ステージングに存在するが、本番環境に存在しない変数 → デプロイメントのバグの可能性が高い
    • 開発環境と本番環境で同じシークレット値 → セキュリティリスク
    • シークレット値を持つ public プレフィックスの変数 → クライアントに公開されます

シークレットのローテーション

  1. ローテーションするシークレットを特定 (API キー、データベースパスワード、JWT シークレット)
  2. 使用場所を確認:
    grep -rn "THE_VAR_NAME" . --include="*.ts" --include="*.js" --include="*.yml" --include="*.yaml" --include="Dockerfile"
  3. ローテーション計画を生成:
    • API キーの場合: 新しいキーを作成 → すべての環境を更新 → 検証 → 古いキーを失効
    • データベースパスワードの場合: パスワードを更新 → 接続文字列を更新 → サービスを再起動
    • JWT シークレットの場合: デュアルキー検証を実装 → デプロイ → 新しいプライマリを設定 → 古いものを削除
  4. ハードコードされた値が存在しないことを確認 (すべて環境変数を参照する必要があります)

新しい環境のセットアップ

  1. テンプレートとして .env.example から開始
  2. 各変数を分類:
    • 共有構成 (フィーチャーフラグ、API URL) → コピーして新しい環境に合わせて調整
    • シークレット (API キー、パスワード) → 新しいものを生成し、別の環境からコピーしないでください
    • インフラストラクチャ (データベース URL、Redis URL) → 新しい環境のインフラストラクチャから取得
  3. 新しい環境を検証:
    # 不足している変数のエラーなしでアプリが起動することを確認
    node -e "require('dotenv').config(); console.log('Loaded', Object.keys(process.env).length, 'vars')"

例 1: 不足している変数の監査

ユーザープロンプト:

ステージングで "undefined" エラーが発生し続けています。環境変数を監査してもらえますか?

エージェントの出力:

src/ で環境変数参照をスキャンしました。34 個の一意の変数が見つかりました。

🔴 .env.example から不足しています (ドキュメント化されていません):
  OPENAI_API_KEY        — src/lib/ai.ts:12 で参照
  WEBHOOK_SECRET        — src/api/webhooks.ts:8 で参照
  RATE_LIMIT_MAX        — src/middleware/rateLimit.ts:3 で参照

⚠️ 参照されていますが、検証/デフォルトはありません:
  SMTP_HOST             — src/lib/email.ts:5 で使用、未定義の場合クラッシュします
  CACHE_TTL             — src/lib/cache.ts:2 で使用、parseInt(undefined) = NaN

ℹ️ .env.example にありますが、コードで一度も参照されていません:
  LEGACY_API_URL        — 削除された機能からの可能性があります
  DEBUG_MODE            — 参照が見つかりません

推奨事項: ドキュメント化されていない 3 つの変数を .env.example に追加し、SMTP_HOST と CACHE_TTL にデフォルト値を追加し、古いエントリを 2 つ削除します。

例 2: ステージングと本番環境の同期

ユーザープロンプト:

まもなくローンチします。ステージング環境と本番環境の環境変数を比較して、不足しているものがないことを確認してください。

エージェントの出力:

ステージング環境と本番環境で 41 個の変数を比較しました:

🔴 本番環境で不足しています (3):
  STRIPE_WEBHOOK_SECRET  — これがないと支払いが失敗します
  SENTRY_DSN             — 本番環境でのエラートラッキングはありません
  FEATURE_FLAG_API_KEY   — フィーチャーフラグはデフォルトでオフになります

⚠️ 両方の環境で同じ値 (2):
  JWT_SECRET             — 同じシークレットを使用するとセキュリティリスクがあります
  DATABASE_URL           — 同じ DB を指しています! これは異なるはずです。

✓ 正しく異なる (28 変数)
ℹ️ ステージングのみ (8 変数) — デバッグ/テスト変数、想定どおり

アクションアイテム:
1. 本番環境で STRIPE_WEBHOOK_SECRET を設定します (Stripe ダッシュボード → Webhooks から取得)
2. 本番環境で SENTRY_DSN を設定します (Sentry → プロジェクト設定 → クライアントキーから取得)
3. 本番環境用に新しい JWT_SECRET を生成します: openssl rand -base64 32
4. DATABASE_URL がステージングではなく本番データベースを指していることを確認します

ガイドライン

  • 実際のシークレット値を印刷またはログに記録しないでください — 変数名とメタデータのみを表示してください
  • 環境を比較するときは、同一のシークレットをセキュリティ上の懸念としてフラグを立ててください
  • 実際のシークレットを含む NEXT_PUBLIC_ または VITE_ プレフィックスの変数を常に確認してください
  • .env.example を信頼できる情報源として推奨し、(値なしで) git にコミットします
  • ローテーションの場合、常にゼロダウンタイムを計画してください: 新しいキー → デプロイ → 検証 → 古いものを失効
  • CI/CD パイプライン構成も確認してください — そこにあるシークレットは、名前変更後に古くなることがよくあります
  • 起動時に不足している変数をキャッチするために、検証ライブラリ (envalid、zod) を推奨します。実行時ではありません
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Environment Manager

Overview

This skill helps manage environment variables and secrets across multiple environments (development, staging, production). It detects missing variables, identifies mismatches, audits for exposed secrets, and helps safely rotate credentials without downtime.

Instructions

Auditing Environment Variables

  1. Find all env var references in code:

    grep -rn "process\.env\." src/ --include="*.ts" --include="*.js" | \
      sed 's/.*process\.env\.\([A-Z_]*\).*/\1/' | sort -u

    For Python:

    grep -rn "os\.environ\|os\.getenv" src/ --include="*.py" | \
      sed 's/.*os\.\(environ\["\|getenv("\)\([A-Z_]*\).*/\2/' | sort -u
  2. Compare against what's defined:

    # From .env.example or .env
    grep -v '^#' .env.example | grep '=' | cut -d'=' -f1 | sort -u
  3. Report:

    • Variables referenced in code but missing from .env.example → ⚠️ undocumented
    • Variables in .env.example but never referenced in code → ℹ️ possibly stale
    • Variables with no default and no validation → 🔴 app will crash if missing

Comparing Environments

  1. Get variable lists from each environment:

    • Local: Parse .env or .env.local
    • CI/CD: Check platform config (GitHub Actions secrets, GitLab CI variables)
    • Hosting: Check platform env vars (Vercel, Railway, Heroku config)
    • Secrets manager: Query Doppler, AWS SSM, or Vault
  2. Build a comparison matrix:

    Variable              | dev | staging | prod | Notes
    DATABASE_URL          | ✓   | ✓       | ✓    | Different per env ✓
    STRIPE_SECRET_KEY     | ✓   | ✓       | ✗    | ⚠️ Missing in prod!
    REDIS_URL             | ✗   | ✓       | ✓    | ℹ️ Not needed locally
    NEXT_PUBLIC_API_URL   | ✓   | ✓       | ✓    | Verify values differ
  3. Flag issues:

    • Variable present in staging but missing in production → likely deployment bug
    • Same secret value across dev and prod → security risk
    • Public-prefixed variables with secret values → will be exposed to client

Secret Rotation

  1. Identify the secret to rotate (API key, database password, JWT secret)
  2. Check where it's used:
    grep -rn "THE_VAR_NAME" . --include="*.ts" --include="*.js" --include="*.yml" --include="*.yaml" --include="Dockerfile"
  3. Generate rotation plan:
    • For API keys: Create new key → update all environments → verify → revoke old key
    • For database passwords: Update password → update connection strings → restart services
    • For JWT secrets: Implement dual-key validation → deploy → set new primary → remove old
  4. Verify no hardcoded values exist (should all reference env vars)

Setting Up a New Environment

  1. Start from .env.example as the template
  2. Categorize each variable:
    • Shared config (feature flags, API URLs) → copy and adjust for the new env
    • Secrets (API keys, passwords) → generate new ones, never copy from another env
    • Infrastructure (database URLs, Redis URLs) → get from the new env's infra
  3. Validate the new environment:
    # Check app starts without missing var errors
    node -e "require('dotenv').config(); console.log('Loaded', Object.keys(process.env).length, 'vars')"

Examples

Example 1: Audit for Missing Variables

User prompt:

We keep getting "undefined" errors in staging. Can you audit our env vars?

Agent output:

Scanned src/ for environment variable references. Found 34 unique variables.

🔴 Missing from .env.example (undocumented):
  OPENAI_API_KEY        — referenced in src/lib/ai.ts:12
  WEBHOOK_SECRET        — referenced in src/api/webhooks.ts:8
  RATE_LIMIT_MAX        — referenced in src/middleware/rateLimit.ts:3

⚠️ Referenced but no validation/default:
  SMTP_HOST             — used in src/lib/email.ts:5, crashes if undefined
  CACHE_TTL             — used in src/lib/cache.ts:2, parseInt(undefined) = NaN

ℹ️ In .env.example but never referenced in code:
  LEGACY_API_URL        — possibly from a removed feature
  DEBUG_MODE            — no references found

Recommendation: Add the 3 undocumented vars to .env.example, add default
values for SMTP_HOST and CACHE_TTL, and remove the 2 stale entries.

Example 2: Sync Staging with Production

User prompt:

We're about to launch. Compare staging and production env vars to make sure nothing is missing.

Agent output:

Compared 41 variables across staging and production:

🔴 Missing in production (3):
  STRIPE_WEBHOOK_SECRET  — payments will fail without this
  SENTRY_DSN             — no error tracking in prod
  FEATURE_FLAG_API_KEY   — feature flags will default to off

⚠️ Same value in both environments (2):
  JWT_SECRET             — using identical secret is a security risk
  DATABASE_URL           — pointing to same DB! This should differ.

✓ Correctly different (28 vars)
ℹ️ Staging-only (8 vars) — debug/test vars, expected

Action items:
1. Set STRIPE_WEBHOOK_SECRET in prod (get from Stripe Dashboard → Webhooks)
2. Set SENTRY_DSN in prod (get from Sentry → Project Settings → Client Keys)
3. Generate a new JWT_SECRET for prod: openssl rand -base64 32
4. Verify DATABASE_URL points to the production database, not staging

Guidelines

  • Never print or log actual secret values — show only variable names and metadata
  • When comparing environments, flag identical secrets as a security concern
  • Always check for NEXT_PUBLIC_ or VITE_ prefixed vars that contain actual secrets
  • Recommend .env.example as the source of truth, committed to git (without values)
  • For rotation, always plan for zero-downtime: new key → deploy → verify → revoke old
  • Check CI/CD pipeline configs too — secrets there often go stale after renames
  • Suggest validation libraries (envalid, zod) to catch missing vars at startup, not runtime