@kood/claude-code 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/index.js +129 -5
  2. package/package.json +2 -2
  3. package/templates/hono/CLAUDE.md +20 -2
  4. package/templates/hono/docs/architecture/architecture.md +909 -0
  5. package/templates/hono/docs/commands/git.md +275 -0
  6. package/templates/hono/docs/deployment/cloudflare.md +527 -190
  7. package/templates/hono/docs/deployment/docker.md +514 -0
  8. package/templates/hono/docs/deployment/index.md +179 -214
  9. package/templates/hono/docs/deployment/railway.md +416 -0
  10. package/templates/hono/docs/deployment/vercel.md +567 -0
  11. package/templates/hono/docs/library/ai-sdk/index.md +427 -0
  12. package/templates/hono/docs/library/ai-sdk/openrouter.md +479 -0
  13. package/templates/hono/docs/library/ai-sdk/providers.md +468 -0
  14. package/templates/hono/docs/library/ai-sdk/streaming.md +447 -0
  15. package/templates/hono/docs/library/ai-sdk/structured-output.md +493 -0
  16. package/templates/hono/docs/library/ai-sdk/tools.md +513 -0
  17. package/templates/hono/docs/library/hono/env-setup.md +458 -0
  18. package/templates/hono/docs/library/hono/index.md +1 -3
  19. package/templates/hono/docs/library/pino/index.md +437 -0
  20. package/templates/hono/docs/library/prisma/cloudflare-d1.md +503 -0
  21. package/templates/hono/docs/library/prisma/config.md +362 -0
  22. package/templates/hono/docs/library/prisma/index.md +86 -13
  23. package/templates/hono/docs/skills/gemini-review/SKILL.md +116 -116
  24. package/templates/hono/docs/skills/gemini-review/references/checklists.md +125 -125
  25. package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +191 -191
  26. package/templates/npx/CLAUDE.md +309 -0
  27. package/templates/npx/docs/commands/git.md +275 -0
  28. package/templates/npx/docs/library/commander/index.md +164 -0
  29. package/templates/npx/docs/library/fs-extra/index.md +171 -0
  30. package/templates/npx/docs/library/prompts/index.md +253 -0
  31. package/templates/npx/docs/mcp/index.md +60 -0
  32. package/templates/npx/docs/skills/gemini-review/SKILL.md +220 -0
  33. package/templates/npx/docs/skills/gemini-review/references/checklists.md +134 -0
  34. package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +301 -0
  35. package/templates/tanstack-start/CLAUDE.md +43 -5
  36. package/templates/tanstack-start/docs/architecture/architecture.md +134 -4
  37. package/templates/tanstack-start/docs/commands/git.md +275 -0
  38. package/templates/tanstack-start/docs/deployment/cloudflare.md +223 -50
  39. package/templates/tanstack-start/docs/deployment/index.md +320 -30
  40. package/templates/tanstack-start/docs/deployment/nitro.md +195 -14
  41. package/templates/tanstack-start/docs/deployment/railway.md +302 -150
  42. package/templates/tanstack-start/docs/deployment/vercel.md +345 -75
  43. package/templates/tanstack-start/docs/guides/best-practices.md +203 -1
  44. package/templates/tanstack-start/docs/guides/env-setup.md +450 -0
  45. package/templates/tanstack-start/docs/library/ai-sdk/hooks.md +472 -0
  46. package/templates/tanstack-start/docs/library/ai-sdk/index.md +264 -0
  47. package/templates/tanstack-start/docs/library/ai-sdk/openrouter.md +371 -0
  48. package/templates/tanstack-start/docs/library/ai-sdk/providers.md +403 -0
  49. package/templates/tanstack-start/docs/library/ai-sdk/streaming.md +320 -0
  50. package/templates/tanstack-start/docs/library/ai-sdk/structured-output.md +454 -0
  51. package/templates/tanstack-start/docs/library/ai-sdk/tools.md +473 -0
  52. package/templates/tanstack-start/docs/library/pino/index.md +320 -0
  53. package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +404 -0
  54. package/templates/tanstack-start/docs/library/prisma/config.md +377 -0
  55. package/templates/tanstack-start/docs/library/prisma/index.md +3 -5
  56. package/templates/tanstack-start/docs/library/prisma/schema.md +123 -25
  57. package/templates/tanstack-start/docs/library/prisma/setup.md +0 -7
  58. package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +80 -2
  59. package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +116 -116
  60. package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +138 -144
  61. package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +186 -187
  62. package/templates/hono/docs/git/index.md +0 -180
  63. package/templates/tanstack-start/docs/git/index.md +0 -203
@@ -0,0 +1,458 @@
1
+ # Hono - 환경 변수 설정
2
+
3
+ > **상위 문서**: [Hono](./index.md)
4
+
5
+ 환경별 `.env` 파일 설정 및 타입 안전한 환경 변수 관리 방법입니다.
6
+
7
+ ---
8
+
9
+ ## 환경별 .env 파일 구조
10
+
11
+ ```
12
+ 프로젝트/
13
+ ├── .env # 기본 환경 변수 (공통)
14
+ ├── .env.development # 개발 환경
15
+ ├── .env.production # 프로덕션 환경
16
+ ├── .env.local # 로컬 개발 (gitignore)
17
+ ├── .env.example # 예시 파일 (커밋용)
18
+ └── src/
19
+ └── env.ts # 환경 변수 검증 및 타입
20
+ ```
21
+
22
+ ---
23
+
24
+ ## 설치
25
+
26
+ ```bash
27
+ npm install dotenv
28
+ npm install -D @types/node
29
+ ```
30
+
31
+ ---
32
+
33
+ ## 환경 변수 파일 예시
34
+
35
+ ### .env.example (커밋용 템플릿)
36
+
37
+ ```env
38
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
39
+ # 환경 변수 템플릿
40
+ # 복사 후 .env.local 로 저장하여 사용
41
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
42
+
43
+ # 앱 설정
44
+ NODE_ENV=development
45
+ PORT=3000
46
+
47
+ # 데이터베이스
48
+ DATABASE_URL=postgresql://user:password@localhost:5432/mydb
49
+
50
+ # 인증
51
+ JWT_SECRET=your-secret-key-here
52
+ JWT_EXPIRES_IN=7d
53
+
54
+ # 외부 서비스
55
+ OPENAI_API_KEY=sk-xxx
56
+ REDIS_URL=redis://localhost:6379
57
+ ```
58
+
59
+ ### .env.development
60
+
61
+ ```env
62
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
63
+ # 개발 환경 설정
64
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
65
+
66
+ NODE_ENV=development
67
+ PORT=3000
68
+
69
+ # 개발용 데이터베이스
70
+ DATABASE_URL=postgresql://postgres:postgres@localhost:5432/myapp_dev
71
+
72
+ # 개발용 시크릿 (짧은 값 OK)
73
+ JWT_SECRET=dev-secret-key
74
+ JWT_EXPIRES_IN=1d
75
+
76
+ # 개발용 외부 서비스
77
+ OPENAI_API_KEY=sk-dev-xxx
78
+ REDIS_URL=redis://localhost:6379
79
+
80
+ # 개발용 옵션
81
+ LOG_LEVEL=debug
82
+ CORS_ORIGIN=http://localhost:5173
83
+ ```
84
+
85
+ ### .env.production
86
+
87
+ ```env
88
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
89
+ # 프로덕션 환경 설정
90
+ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
91
+
92
+ NODE_ENV=production
93
+ PORT=8080
94
+
95
+ # 프로덕션 데이터베이스
96
+ DATABASE_URL=postgresql://user:strongpassword@prod-db.example.com:5432/myapp
97
+
98
+ # 프로덕션 시크릿 (강력한 값 필수)
99
+ JWT_SECRET=super-secure-production-secret-key-at-least-32-chars
100
+ JWT_EXPIRES_IN=7d
101
+
102
+ # 프로덕션 외부 서비스
103
+ OPENAI_API_KEY=sk-prod-xxx
104
+ REDIS_URL=redis://prod-redis.example.com:6379
105
+
106
+ # 프로덕션 옵션
107
+ LOG_LEVEL=info
108
+ CORS_ORIGIN=https://myapp.com
109
+ ```
110
+
111
+ ---
112
+
113
+ ## 타입 안전한 환경 변수 (Zod)
114
+
115
+ ### src/env.ts
116
+
117
+ ```typescript
118
+ // src/env.ts
119
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
120
+ // 환경 변수 검증 및 타입 정의
121
+ // 앱 시작 시 자동으로 환경 변수를 검증합니다
122
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
123
+ import { z } from 'zod'
124
+
125
+ // 환경 변수 스키마
126
+ const envSchema = z.object({
127
+ // 앱 설정
128
+ NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
129
+ PORT: z.coerce.number().default(3000),
130
+
131
+ // 데이터베이스
132
+ DATABASE_URL: z.string().url(),
133
+
134
+ // 인증
135
+ JWT_SECRET: z.string().min(16),
136
+ JWT_EXPIRES_IN: z.string().default('7d'),
137
+
138
+ // 외부 서비스 (선택적)
139
+ OPENAI_API_KEY: z.string().optional(),
140
+ REDIS_URL: z.string().url().optional(),
141
+
142
+ // 옵션
143
+ LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
144
+ CORS_ORIGIN: z.string().default('*'),
145
+ })
146
+
147
+ // 환경 변수 타입 추출
148
+ export type Env = z.infer<typeof envSchema>
149
+
150
+ // 환경 변수 파싱 및 검증
151
+ const parseEnv = (): Env => {
152
+ const result = envSchema.safeParse(process.env)
153
+
154
+ if (!result.success) {
155
+ console.error('❌ 환경 변수 검증 실패:')
156
+ console.error(result.error.format())
157
+ process.exit(1)
158
+ }
159
+
160
+ return result.data
161
+ }
162
+
163
+ // 검증된 환경 변수 export
164
+ export const env = parseEnv()
165
+ ```
166
+
167
+ ---
168
+
169
+ ## dotenv 설정
170
+
171
+ ### src/index.ts (진입점)
172
+
173
+ ```typescript
174
+ // src/index.ts
175
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
176
+ // Hono 앱 진입점
177
+ // dotenv는 가장 먼저 import해야 합니다
178
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
179
+ import 'dotenv/config' // ⚠️ 반드시 최상단!
180
+ import { serve } from '@hono/node-server'
181
+ import { app } from './app'
182
+ import { env } from './env'
183
+
184
+ serve({
185
+ fetch: app.fetch,
186
+ port: env.PORT,
187
+ }, (info) => {
188
+ console.log(`🚀 Server running on http://localhost:${info.port}`)
189
+ console.log(`📍 Environment: ${env.NODE_ENV}`)
190
+ })
191
+ ```
192
+
193
+ ### 환경별 dotenv 로드
194
+
195
+ ```typescript
196
+ // src/load-env.ts
197
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
198
+ // 환경별 .env 파일 로드
199
+ // NODE_ENV에 따라 적절한 파일을 로드합니다
200
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
201
+ import { config } from 'dotenv'
202
+ import path from 'node:path'
203
+
204
+ const loadEnv = () => {
205
+ const nodeEnv = process.env.NODE_ENV || 'development'
206
+
207
+ // 로드 순서: .env.local → .env.{환경} → .env
208
+ const envFiles = [
209
+ `.env.local`, // 로컬 오버라이드 (gitignore)
210
+ `.env.${nodeEnv}`, // 환경별 설정
211
+ `.env`, // 기본 설정
212
+ ]
213
+
214
+ envFiles.forEach((file) => {
215
+ config({ path: path.resolve(process.cwd(), file) })
216
+ })
217
+ }
218
+
219
+ loadEnv()
220
+
221
+ export {}
222
+ ```
223
+
224
+ ```typescript
225
+ // src/index.ts
226
+ import './load-env' // ⚠️ 반드시 최상단!
227
+ import { serve } from '@hono/node-server'
228
+ import { app } from './app'
229
+ import { env } from './env'
230
+
231
+ // ... 나머지 코드
232
+ ```
233
+
234
+ ---
235
+
236
+ ## Hono Bindings 타입 정의
237
+
238
+ ### src/types/hono.ts
239
+
240
+ ```typescript
241
+ // src/types/hono.ts
242
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
243
+ // Hono 앱 타입 정의
244
+ // Bindings, Variables 등 전역 타입을 정의합니다
245
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
246
+ import type { Env } from '../env'
247
+
248
+ // 환경 변수 Bindings
249
+ export type Bindings = Env
250
+
251
+ // 요청 간 공유 변수
252
+ export type Variables = {
253
+ requestId: string
254
+ userId?: string
255
+ user?: {
256
+ id: string
257
+ email: string
258
+ role: string
259
+ }
260
+ }
261
+
262
+ // Hono 앱 타입
263
+ export type HonoEnv = {
264
+ Bindings: Bindings
265
+ Variables: Variables
266
+ }
267
+ ```
268
+
269
+ ### src/app.ts
270
+
271
+ ```typescript
272
+ // src/app.ts
273
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
274
+ // Hono 앱 설정
275
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
276
+ import { Hono } from 'hono'
277
+ import { cors } from 'hono/cors'
278
+ import { logger } from 'hono/logger'
279
+ import type { HonoEnv } from './types/hono'
280
+ import { env } from './env'
281
+
282
+ export const app = new Hono<HonoEnv>()
283
+
284
+ // 미들웨어 설정
285
+ app.use('*', logger())
286
+ app.use('*', cors({ origin: env.CORS_ORIGIN }))
287
+
288
+ // 환경 변수 바인딩 미들웨어 (Node.js용)
289
+ app.use('*', async (c, next) => {
290
+ // Node.js에서는 process.env를 c.env로 바인딩
291
+ Object.assign(c.env, env)
292
+ await next()
293
+ })
294
+
295
+ // 라우트
296
+ app.get('/', (c) => {
297
+ return c.json({
298
+ message: 'Hello Hono!',
299
+ environment: c.env.NODE_ENV,
300
+ })
301
+ })
302
+
303
+ app.get('/health', (c) => {
304
+ return c.json({
305
+ status: 'ok',
306
+ timestamp: new Date().toISOString(),
307
+ })
308
+ })
309
+ ```
310
+
311
+ ---
312
+
313
+ ## Cloudflare Workers 환경
314
+
315
+ Cloudflare Workers에서는 `wrangler.toml`과 `.dev.vars`를 사용합니다.
316
+
317
+ ### wrangler.toml
318
+
319
+ ```toml
320
+ name = "my-hono-app"
321
+ main = "src/index.ts"
322
+ compatibility_date = "2024-01-01"
323
+
324
+ [vars]
325
+ NODE_ENV = "production"
326
+ LOG_LEVEL = "info"
327
+
328
+ # 개발 환경 오버라이드
329
+ [env.development.vars]
330
+ NODE_ENV = "development"
331
+ LOG_LEVEL = "debug"
332
+ ```
333
+
334
+ ### .dev.vars (개발용 시크릿)
335
+
336
+ ```env
337
+ # ⚠️ 이 파일은 gitignore에 추가해야 합니다
338
+ DATABASE_URL=postgresql://postgres:postgres@localhost:5432/myapp_dev
339
+ JWT_SECRET=dev-secret-key
340
+ OPENAI_API_KEY=sk-dev-xxx
341
+ ```
342
+
343
+ ### wrangler 시크릿 설정 (프로덕션)
344
+
345
+ ```bash
346
+ # 시크릿 추가
347
+ wrangler secret put DATABASE_URL
348
+ wrangler secret put JWT_SECRET
349
+ wrangler secret put OPENAI_API_KEY
350
+
351
+ # 시크릿 목록 확인
352
+ wrangler secret list
353
+ ```
354
+
355
+ ---
356
+
357
+ ## .gitignore 설정
358
+
359
+ ```gitignore
360
+ # 환경 변수 파일
361
+ .env
362
+ .env.local
363
+ .env.*.local
364
+ .dev.vars
365
+
366
+ # 커밋해도 되는 파일
367
+ !.env.example
368
+ !.env.development
369
+ !.env.production
370
+ ```
371
+
372
+ ⚠️ **주의**: `.env.development`와 `.env.production`에는 **실제 시크릿을 절대 넣지 마세요!**
373
+ - 실제 시크릿은 `.env.local` 또는 CI/CD 환경 변수로 관리
374
+ - `.env.development`, `.env.production`은 기본값과 플레이스홀더만 포함
375
+
376
+ ---
377
+
378
+ ## package.json 스크립트
379
+
380
+ ```json
381
+ {
382
+ "scripts": {
383
+ "dev": "NODE_ENV=development tsx watch src/index.ts",
384
+ "build": "tsc",
385
+ "start": "NODE_ENV=production node dist/index.js",
386
+ "start:dev": "NODE_ENV=development node dist/index.js",
387
+ "typecheck": "tsc --noEmit"
388
+ }
389
+ }
390
+ ```
391
+
392
+ ### cross-env 사용 (Windows 호환)
393
+
394
+ ```bash
395
+ npm install -D cross-env
396
+ ```
397
+
398
+ ```json
399
+ {
400
+ "scripts": {
401
+ "dev": "cross-env NODE_ENV=development tsx watch src/index.ts",
402
+ "start": "cross-env NODE_ENV=production node dist/index.js"
403
+ }
404
+ }
405
+ ```
406
+
407
+ ---
408
+
409
+ ## 환경 변수 사용 예시
410
+
411
+ ### 라우트에서 사용
412
+
413
+ ```typescript
414
+ // src/routes/users.ts
415
+ import { Hono } from 'hono'
416
+ import type { HonoEnv } from '../types/hono'
417
+ import { env } from '../env'
418
+
419
+ const users = new Hono<HonoEnv>()
420
+
421
+ users.get('/', (c) => {
422
+ // 방법 1: env 모듈에서 직접 가져오기 (권장)
423
+ const dbUrl = env.DATABASE_URL
424
+
425
+ // 방법 2: context에서 가져오기
426
+ const nodeEnv = c.env.NODE_ENV
427
+
428
+ return c.json({ environment: nodeEnv })
429
+ })
430
+
431
+ export { users }
432
+ ```
433
+
434
+ ### 조건부 로직
435
+
436
+ ```typescript
437
+ import { env } from '../env'
438
+
439
+ // 개발 환경에서만 실행
440
+ if (env.NODE_ENV === 'development') {
441
+ console.log('🔧 Development mode')
442
+ // 개발용 설정...
443
+ }
444
+
445
+ // 프로덕션에서만 실행
446
+ if (env.NODE_ENV === 'production') {
447
+ // 프로덕션 최적화...
448
+ }
449
+ ```
450
+
451
+ ---
452
+
453
+ ## 관련 문서
454
+
455
+ - [Hono 개요](./index.md)
456
+ - [미들웨어](./middleware.md)
457
+ - [Zod 검증](./validation.md)
458
+ - [Cloudflare 배포](../deployment/cloudflare.md)
@@ -21,9 +21,6 @@ bun add hono
21
21
 
22
22
  # yarn
23
23
  yarn add hono
24
-
25
- # pnpm
26
- pnpm add hono
27
24
  ```
28
25
 
29
26
  ---
@@ -235,6 +232,7 @@ app.get('/me', (c) => {
235
232
 
236
233
  ## 관련 문서
237
234
 
235
+ - [환경 변수 설정](./env-setup.md) - .env.development, .env.production 설정 ⭐
238
236
  - [미들웨어](./middleware.md)
239
237
  - [Zod 검증](./validation.md)
240
238
  - [에러 처리](./error-handling.md)