{"id":"env-manager","name":"env-manager","summary":"環境変数マネージャー:.envファイルをスキャン、検証、同期してセキュリティ設定テンプレートを生成する","body":"# 环境变量管理器\n\n## 触发条件\n当用户要求管理环境变量、.env 文件、配置同步、Secrets 检查时激活。\n\n## 工作流程\n\n### 1. 扫描项目\n- 检测所有 `.env*` 文件（.env / .env.local / .env.development / .env.production）\n- 默认只提取变量名、来源文件和是否为空；真实值必须脱敏，不写入报告或终端输出\n- 扫描代码中引用的环境变量（`process.env.XXX` / `os.environ['XXX']` / `os.getenv('XXX')`）\n- 识别静态扫描中未发现引用的变量（仅作为待人工确认候选）\n- 识别已使用但未定义的变量（缺失配置）\n\n### 2. 校验分析\n- 检查必填变量是否有默认值\n- 验证 URL 格式、端口号范围、布尔值格式\n- 检测硬编码的敏感信息（API Key / Token / Password）\n- 对比 .env.example 与实际 .env 文件的差异\n\n### 3. 生成/修复\n- 生成 `.env.example` 模板（仅包含变量名和说明，不含真实值）\n- 生成 `.env.schema.json`（结构化校验规则）\n- 检测到硬编码密钥时，建议迁移到环境变量\n- 生成 `dotenv` 加载配置（针对不同框架）\n\n### 4. 同步\n- 在 monorepo 中同步共享环境变量\n- 生成 Docker Compose 的 env_file 配置\n- 生成 CI/CD 的 Secrets 配置清单\n\n## 输出格式\n\n### .env.example 示例\n```bash\n# 应用配置\nAPP_NAME=my-app\nAPP_ENV=development          # development | staging | production\nAPP_PORT=3000                # 服务端口 (1-65535)\nAPP_DEBUG=true               # 调试模式\n\n# 数据库\nDB_HOST=localhost\nDB_PORT=5432\nDB_NAME=mydb\nDB_USER=                     # 必填\nDB_PASSWORD=                 # 必填，生产环境请使用 Secrets\n\n# 第三方服务\nREDIS_URL=                   # 必填，格式：redis://host:port\nJWT_SECRET=                  # 必填，至少 32 位随机字符串\n```\n\n### 校验报告示例\n```\n📋 环境变量分析报告\n==================\n✅ 定义且使用: 12 个\n⚠️  定义未使用: 2 个（S3_BUCKET, OLD_API_KEY）\n❌ 使用未定义: 1 个（SENDGRID_API_KEY）\n🔒 硬编码敏感信息: 1 处（src/auth.js:23）\n\n建议：\n1. 人工确认 S3_BUCKET 和 OLD_API_KEY 是否被 CI、部署脚本或动态代码引用，再决定是否删除\n2. 在 .env 中添加 SENDGRID_API_KEY\n3. 将 src/auth.js:23 的硬编码 token 迁移到环境变量\n```\n\n## 安全检查清单\n- [ ] 扫描和报告只展示变量名及脱敏状态，不回显真实 Secret\n- [ ] `.env` 已添加到 `.gitignore`\n- [ ] `.env.example` 存在且与代码同步\n- [ ] 无硬编码的 API Key / Token / Password\n- [ ] 生产环境使用 Secrets 管理（GitHub Secrets / AWS SSM / Vault）\n- [ ] JWT_SECRET / ENCRYPTION_KEY 足够随机（32+ 字符）\n- [ ] 数据库密码不在日志中输出\n\n## 修改边界\n\n- 不要自动删除或改写真实 `.env`；先展示差异并取得用户确认。\n- “未使用”只代表静态扫描没有发现，仍需检查 CI、容器、部署平台和动态变量访问。\n- 不把生产 Secret 复制到 `.env.example`、Schema、日志、Issue 或聊天输出中。\n\n## 常见陷阱\n- **Next.js**：只有 `NEXT_PUBLIC_` 前缀的变量会暴露给客户端，后端专用变量不要加此前缀\n- **Docker**：构建时的 ARG 和运行时的 ENV 是不同的，不要混淆\n- **Create React App**：`.env` 中的变量必须以 `REACT_APP_` 开头才会被注入\n- **Vite**：使用 `VITE_` 前缀暴露变量给客户端\n- **monorepo**：根目录的 `.env` 不会自动被子包读取，需要显式配置\n\n## 框架适配\n\n| 框架 | 客户端前缀 | 配置文件 | 加载方式 |\n|------|-----------|---------|---------|\n| Next.js | NEXT_PUBLIC_ | .env.local | 自动 |\n| Vite | VITE_ | .env | 自动 |\n| CRA | REACT_APP_ | .env | 自动 |\n| Nuxt | NUXT_PUBLIC_ | .env | 自动 |\n| Vue CLI | VUE_APP_ | .env | 自动 |","author":"@laolaoshiren","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/laolaoshiren/claude-code-skills-zh/tree/main/skills/env-manager","license":"MIT","category":"devops","lang":"multi","tokens":1103,"stars":0,"calls30d":2,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[],"scannedAt":"2026-08-22","hasScripts":false,"networkEndpoints":[]}}