Tips & Tricks

Mengimplementasikan Environment Variable Management Best Practices dengan Claude Code

Pelajari tentang implementing environment variable management best practices menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.

environment variablemanajemenがpentingな理由

aplikasipengembangan 、APIキーやdatabasekoneksi情報 dll. 機密情報 aman manajemen diperlukan あり.environment variable そ dasar手段 す 、type safety性やvalidasi 不足し ち.Claude Code 使えば、robustなenvironment variablemanajemen mekanisme 素早くpembangunan bisa dilakukan.

loading type safetyなenvironment variable

> environment variable zod dengan validasiしてtype safety 読み込むmodul buatkan.
> 必須・任意 区別 dan 、デフォルト値 pengaturan juga dengan きるよう.
import { z } from 'zod';

const envSchema = z.object({
  NODE_ENV: z.enum(['development', 'staging', 'production']).default('development'),
  PORT: z.coerce.number().int().positive().default(3000),
  DATABASE_URL: z.string().url(),
  REDIS_URL: z.string().url().optional(),
  API_KEY: z.string().min(1, 'API_KEY 必須 す'),
  JWT_SECRET: z.string().min(32, 'JWT_SECRET 32文字以上diperlukan す'),
  CORS_ORIGINS: z.string().transform((s) => s.split(',')).default('http://localhost:3000'),
  LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
});

export type Env = z.infer<typeof envSchema>;

function loadEnv(): Env {
  const result = envSchema.safeParse(process.env);

  if (!result.success) {
    const formatted = result.error.format();
    console.error('environment variable validasierror:');
    for (const [key, value] of Object.entries(formatted)) {
      if (key !== '_errors' && value && '_errors' in value) {
        console.error(`  ${key}: ${(value as any)._errors.join(', ')}`);
      }
    }
    process.exit(1);
  }

  return result.data;
}

export const env = loadEnv();

templatemanajemen .envfile

> .env.example 自動generateするscript buatkan.
> 実際 値 含めず、説明コメント付き dengan 。
import fs from 'fs';
import path from 'path';

function generateEnvExample(envPath: string, outputPath: string) {
  const envContent = fs.readFileSync(envPath, 'utf-8');
  const lines = envContent.split('\n');

  const exampleLines = lines.map((line) => {
    if (line.startsWith('#') || line.trim() === '') return line;

    const [key] = line.split('=');
    const descriptions: Record<string, string> = {
      DATABASE_URL: '# databasekoneksiURL (例: postgresql://user:pass@localhost:5432/db)',
      API_KEY: '# APIキー (environment produksi aman manajemen ください)',
      JWT_SECRET: '# JWT署名用シークレット (32文字以上)',
    };

    const comment = descriptions[key?.trim()] || '';
    return `${comment}\n${key?.trim()}=`;
  });

  fs.writeFileSync(outputPath, exampleLines.join('\n'));
}

pengaturanperalihan 環境ご

> 環境ご dan 異なるpengaturan manajemenするConfigclass buatkan.
> development, staging, production 3環境 support.
interface AppConfig {
  database: { pool: number; ssl: boolean };
  cache: { ttl: number; enabled: boolean };
  logging: { level: string; format: string };
}

const configs: Record<string, AppConfig> = {
  development: {
    database: { pool: 5, ssl: false },
    cache: { ttl: 60, enabled: false },
    logging: { level: 'debug', format: 'pretty' },
  },
  production: {
    database: { pool: 20, ssl: true },
    cache: { ttl: 3600, enabled: true },
    logging: { level: 'warn', format: 'json' },
  },
};

export function getConfig(): AppConfig {
  const nodeEnv = env.NODE_ENV;
  return configs[nodeEnv] ?? configs.development;
}

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

機密情報 ローテーション aman 行う untuk 、複数versi シークレット 同時 保持 mekanisme juga pembangunan bisa dilakukan.

class SecretManager {
  private secrets: Map<string, string[]> = new Map();

  register(key: string, ...values: string[]) {
    this.secrets.set(key, values.filter(Boolean));
  }

  getCurrent(key: string): string {
    const values = this.secrets.get(key);
    if (!values || values.length === 0) {
      throw new Error(`Secret not found: ${key}`);
    }
    return values[0];
  }

  verify(key: string, token: string, verifyFn: (secret: string, token: string) => boolean): boolean {
    const values = this.secrets.get(key) ?? [];
    return values.some((secret) => verifyFn(secret, token));
  }
}

const secrets = new SecretManager();
secrets.register('JWT_SECRET', env.JWT_SECRET, process.env.JWT_SECRET_PREVIOUS ?? '');

Summary

Mengenai Claude Codeを使えば、zodによるtype safetyなvalidasi、環境別pengaturan、シークレットmanajemenまで、environment variablemanajemenのmekanismeを一貫してpembangunanできます。セキュリティのdasarとして認証implementasipanduanも参考にしてください。testのotomatisasi, 詳しくpenjelasanしています。 di テスト戦略の記事.

zod 詳細 Zod公式dokumen silakan lihat.environment variablemanajemen セキュリティ mengenai OWASP Configuration Guide juga bisa dijadikan referensi.

#Claude Code #environment variables #security #TypeScript #configuration