env-setup-wizard について
env-setup-wizardは、プロジェクトの環境変数を整理するスキルです。型安全な参照、起動時の検証、変数の文書化を扱い、一般的なプロジェクトとNext.js向けの設定例を示します。
主な機能
- 01環境別の.envファイル整理
- 02コミットする.env.exampleの作成
- 03Zodによる変数検証
- 04サーバー変数とクライアント変数の分離
- 05シークレット管理の実践事項の記録
活用シーン
- 01新規プロジェクトの環境設定
- 02必須変数の起動時チェック追加
- 03Next.jsのサーバー・クライアント変数設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ onewave-ai/ claude-skills --skill env-setup-wizardインストール後、Claude Code で/env-setup-wizardを入力して読み込まれたか確認します。
詳細
環境設定ウィザード
手順
環境設定を行う際は、次の手順に従います。
- プロジェクトに必要な変数を特定します
- 適切に整理した
.env構成を作成します - 環境変数に型安全にアクセスできるよう設定します
- 起動時の検証を追加します
- すべての変数を文書化します
ファイル構成
project/
├── .env # Local development (git-ignored)
├── .env.example # Template (committed to git)
├── .env.local # Local overrides (git-ignored)
├── .env.development # Development defaults
├── .env.production # Production defaults
└── src/
└── lib/
└── env.ts # Type-safe env access
.env.exampleテンプレート
# ===================
# Application
# ===================
NODE_ENV=development
APP_URL=http://localhost:3000
PORT=3000
# ===================
# Database
# ===================
DATABASE_URL=postgresql://user:password@localhost:5432/dbname
# ===================
# Authentication
# ===================
# Generate with: openssl rand -base64 32
JWT_SECRET=
NEXTAUTH_SECRET=
NEXTAUTH_URL=http://localhost:3000
# ===================
# Third-party APIs
# ===================
# Get from: https://stripe.com/dashboard
STRIPE_SECRET_KEY=
STRIPE_PUBLISHABLE_KEY=
STRIPE_WEBHOOK_SECRET=
# Get from: https://resend.com
RESEND_API_KEY=
# ===================
# Storage
# ===================
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=us-east-1
S3_BUCKET_NAME=
型安全な環境変数(Zod)
// src/lib/env.ts
import { z } from 'zod';
const envSchema = z.object({
// App
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
APP_URL: z.string().url(),
PORT: z.coerce.number().default(3000),
// Database
DATABASE_URL: z.string().min(1),
// Auth
JWT_SECRET: z.string().min(32),
NEXTAUTH_SECRET: z.string().min(32),
NEXTAUTH_URL: z.string().url(),
// APIs (optional in dev)
STRIPE_SECRET_KEY: z.string().optional(),
RESEND_API_KEY: z.string().optional(),
});
// Validate on import
const parsed = envSchema.safeParse(process.env);
if (!parsed.success) {
console.error('Invalid environment variables:');
console.error(parsed.error.flatten().fieldErrors);
process.exit(1);
}
export const env = parsed.data;
// Type export for use elsewhere
export type Env = z.infer<typeof envSchema>;
Next.js 固有の設定
// src/lib/env.ts for Next.js
import { z } from 'zod';
// Server-side variables
const serverSchema = z.object({
DATABASE_URL: z.string(),
JWT_SECRET: z.string(),
});
// Client-side variables (must start with NEXT_PUBLIC_)
const clientSchema = z.object({
NEXT_PUBLIC_APP_URL: z.string().url(),
NEXT_PUBLIC_STRIPE_KEY: z.string(),
});
export const serverEnv = serverSchema.parse(process.env);
export const clientEnv = clientSchema.parse({
NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
NEXT_PUBLIC_STRIPE_KEY: process.env.NEXT_PUBLIC_STRIPE_KEY,
});
T3 Env(Next.js におすすめ)
// src/env.mjs
import { createEnv } from "@t3-oss/env-nextjs";
import { z } from "zod";
export const env = createEnv({
server: {
DATABASE_URL: z.string().url(),
NODE_ENV: z.enum(["development", "test", "production"]),
},
client: {
NEXT_PUBLIC_APP_URL: z.string().url(),
},
runtimeEnv: {
DATABASE_URL: process.env.DATABASE_URL,
NODE_ENV: process.env.NODE_ENV,
NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
},
});
.gitignore
# Environment files
.env
.env.local
.env.*.local
# Keep example
!.env.example
セキュリティのベストプラクティス
- シークレットを Git にコミットしないでください
- 環境ごとに異なる値を使用してください
- シークレットを定期的にローテーションしてください
- 本番環境ではシークレットマネージャー(Vault、AWS Secrets Manager)を使用してください
- 起動時に検証して、すばやくエラーを検出してください
- クライアント用の変数にはプレフィックス(NEXT_PUBLIC_、VITE_、REACT_APP_)を付けてください
コメント
Markdown 対応