@kood/claude-code 0.1.7 → 0.1.9

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 (49) hide show
  1. package/dist/index.js +118 -3
  2. package/package.json +8 -2
  3. package/templates/hono/CLAUDE.md +53 -326
  4. package/templates/hono/docs/architecture/architecture.md +93 -747
  5. package/templates/hono/docs/deployment/cloudflare.md +59 -513
  6. package/templates/hono/docs/deployment/docker.md +41 -356
  7. package/templates/hono/docs/deployment/index.md +49 -190
  8. package/templates/hono/docs/deployment/railway.md +36 -306
  9. package/templates/hono/docs/deployment/vercel.md +49 -434
  10. package/templates/hono/docs/library/ai-sdk/index.md +53 -290
  11. package/templates/hono/docs/library/ai-sdk/openrouter.md +19 -387
  12. package/templates/hono/docs/library/ai-sdk/providers.md +28 -394
  13. package/templates/hono/docs/library/ai-sdk/streaming.md +52 -353
  14. package/templates/hono/docs/library/ai-sdk/structured-output.md +63 -395
  15. package/templates/hono/docs/library/ai-sdk/tools.md +62 -431
  16. package/templates/hono/docs/library/hono/env-setup.md +24 -313
  17. package/templates/hono/docs/library/hono/error-handling.md +34 -295
  18. package/templates/hono/docs/library/hono/index.md +24 -122
  19. package/templates/hono/docs/library/hono/middleware.md +21 -188
  20. package/templates/hono/docs/library/hono/rpc.md +40 -341
  21. package/templates/hono/docs/library/hono/validation.md +35 -195
  22. package/templates/hono/docs/library/pino/index.md +42 -333
  23. package/templates/hono/docs/library/prisma/cloudflare-d1.md +64 -367
  24. package/templates/hono/docs/library/prisma/config.md +19 -260
  25. package/templates/hono/docs/library/prisma/index.md +64 -320
  26. package/templates/hono/docs/library/zod/index.md +53 -257
  27. package/templates/npx/CLAUDE.md +58 -276
  28. package/templates/npx/docs/references/patterns.md +160 -0
  29. package/templates/tanstack-start/CLAUDE.md +0 -4
  30. package/templates/tanstack-start/docs/architecture/architecture.md +44 -589
  31. package/templates/tanstack-start/docs/design/index.md +119 -12
  32. package/templates/tanstack-start/docs/guides/conventions.md +103 -0
  33. package/templates/tanstack-start/docs/guides/env-setup.md +34 -340
  34. package/templates/tanstack-start/docs/guides/getting-started.md +22 -209
  35. package/templates/tanstack-start/docs/guides/hooks.md +166 -0
  36. package/templates/tanstack-start/docs/guides/routes.md +166 -0
  37. package/templates/tanstack-start/docs/guides/services.md +143 -0
  38. package/templates/tanstack-start/docs/library/tanstack-query/index.md +18 -2
  39. package/templates/tanstack-start/docs/library/zod/index.md +16 -1
  40. package/templates/tanstack-start/docs/design/accessibility.md +0 -163
  41. package/templates/tanstack-start/docs/design/color.md +0 -93
  42. package/templates/tanstack-start/docs/design/spacing.md +0 -122
  43. package/templates/tanstack-start/docs/design/typography.md +0 -80
  44. package/templates/tanstack-start/docs/guides/best-practices.md +0 -950
  45. package/templates/tanstack-start/docs/guides/husky-lint-staged.md +0 -303
  46. package/templates/tanstack-start/docs/guides/prettier.md +0 -189
  47. package/templates/tanstack-start/docs/guides/project-templates.md +0 -710
  48. package/templates/tanstack-start/docs/library/tanstack-query/setup.md +0 -48
  49. package/templates/tanstack-start/docs/library/zod/basic-types.md +0 -74
@@ -1,22 +1,19 @@
1
1
  # Hono - 환경 변수 설정
2
2
 
3
- > **상위 문서**: [Hono](./index.md)
4
-
5
- 환경별 `.env` 파일 설정 및 타입 안전한 환경 변수 관리 방법입니다.
3
+ > 타입 안전한 환경 변수 관리
6
4
 
7
5
  ---
8
6
 
9
- ## 환경별 .env 파일 구조
7
+ ## 파일 구조
10
8
 
11
9
  ```
12
10
  프로젝트/
13
- ├── .env # 기본 환경 변수 (공통)
11
+ ├── .env # 기본 (공통)
14
12
  ├── .env.development # 개발 환경
15
- ├── .env.production # 프로덕션 환경
16
- ├── .env.local # 로컬 개발 (gitignore)
17
- ├── .env.example # 예시 파일 (커밋용)
18
- └── src/
19
- └── env.ts # 환경 변수 검증 및 타입
13
+ ├── .env.production # 프로덕션
14
+ ├── .env.local # 로컬 (gitignore)
15
+ ├── .env.example # 템플릿 (커밋용)
16
+ └── src/env.ts # 검증 및 타입
20
17
  ```
21
18
 
22
19
  ---
@@ -24,242 +21,77 @@
24
21
  ## 설치
25
22
 
26
23
  ```bash
27
- npm install dotenv
24
+ npm install dotenv zod
28
25
  npm install -D @types/node
29
26
  ```
30
27
 
31
28
  ---
32
29
 
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)
30
+ ## Zod로 환경 변수 검증
114
31
 
115
32
  ### src/env.ts
116
33
 
117
34
  ```typescript
118
- // src/env.ts
119
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
120
- // 환경 변수 검증 및 타입 정의
121
- // 앱 시작 시 자동으로 환경 변수를 검증합니다
122
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
123
35
  import { z } from 'zod'
124
36
 
125
- // 환경 변수 스키마
126
37
  const envSchema = z.object({
127
- // 앱 설정
128
38
  NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
129
39
  PORT: z.coerce.number().default(3000),
130
-
131
- // 데이터베이스
132
40
  DATABASE_URL: z.string().url(),
133
-
134
- // 인증
135
41
  JWT_SECRET: z.string().min(16),
136
42
  JWT_EXPIRES_IN: z.string().default('7d'),
137
-
138
- // 외부 서비스 (선택적)
139
43
  OPENAI_API_KEY: z.string().optional(),
140
- REDIS_URL: z.string().url().optional(),
141
-
142
- // 옵션
143
44
  LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
144
45
  CORS_ORIGIN: z.string().default('*'),
145
46
  })
146
47
 
147
- // 환경 변수 타입 추출
148
48
  export type Env = z.infer<typeof envSchema>
149
49
 
150
- // 환경 변수 파싱 및 검증
151
50
  const parseEnv = (): Env => {
152
51
  const result = envSchema.safeParse(process.env)
153
-
154
52
  if (!result.success) {
155
- console.error('환경 변수 검증 실패:')
156
- console.error(result.error.format())
53
+ console.error('환경 변수 검증 실패:', result.error.format())
157
54
  process.exit(1)
158
55
  }
159
-
160
56
  return result.data
161
57
  }
162
58
 
163
- // 검증된 환경 변수 export
164
59
  export const env = parseEnv()
165
60
  ```
166
61
 
167
62
  ---
168
63
 
169
- ## dotenv 설정
64
+ ## dotenv 로드
170
65
 
171
- ### src/index.ts (진입점)
66
+ ### src/index.ts
172
67
 
173
68
  ```typescript
174
- // src/index.ts
175
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
176
- // Hono 앱 진입점
177
- // dotenv는 가장 먼저 import해야 합니다
178
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
179
- import 'dotenv/config' // ⚠️ 반드시 최상단!
69
+ import 'dotenv/config' // 최상단!
180
70
  import { serve } from '@hono/node-server'
181
71
  import { app } from './app'
182
72
  import { env } from './env'
183
73
 
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}`)
74
+ serve({ fetch: app.fetch, port: env.PORT }, (info) => {
75
+ console.log(`Server: http://localhost:${info.port}`)
190
76
  })
191
77
  ```
192
78
 
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
79
  ---
235
80
 
236
- ## Hono Bindings 타입 정의
81
+ ## Hono Bindings
237
82
 
238
83
  ### src/types/hono.ts
239
84
 
240
85
  ```typescript
241
- // src/types/hono.ts
242
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
243
- // Hono 앱 타입 정의
244
- // Bindings, Variables 등 전역 타입을 정의합니다
245
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
246
86
  import type { Env } from '../env'
247
87
 
248
- // 환경 변수 Bindings
249
88
  export type Bindings = Env
250
89
 
251
- // 요청 간 공유 변수
252
90
  export type Variables = {
253
91
  requestId: string
254
92
  userId?: string
255
- user?: {
256
- id: string
257
- email: string
258
- role: string
259
- }
260
93
  }
261
94
 
262
- // Hono 앱 타입
263
95
  export type HonoEnv = {
264
96
  Bindings: Bindings
265
97
  Variables: Variables
@@ -269,50 +101,24 @@ export type HonoEnv = {
269
101
  ### src/app.ts
270
102
 
271
103
  ```typescript
272
- // src/app.ts
273
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
274
- // Hono 앱 설정
275
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
276
104
  import { Hono } from 'hono'
277
- import { cors } from 'hono/cors'
278
- import { logger } from 'hono/logger'
279
105
  import type { HonoEnv } from './types/hono'
280
106
  import { env } from './env'
281
107
 
282
108
  export const app = new Hono<HonoEnv>()
283
109
 
284
- // 미들웨어 설정
285
- app.use('*', logger())
286
- app.use('*', cors({ origin: env.CORS_ORIGIN }))
287
-
288
- // 환경 변수 바인딩 미들웨어 (Node.js용)
110
+ // Node.js에서 env 바인딩
289
111
  app.use('*', async (c, next) => {
290
- // Node.js에서는 process.env를 c.env로 바인딩
291
112
  Object.assign(c.env, env)
292
113
  await next()
293
114
  })
294
115
 
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
- })
116
+ app.get('/', (c) => c.json({ env: c.env.NODE_ENV }))
309
117
  ```
310
118
 
311
119
  ---
312
120
 
313
- ## Cloudflare Workers 환경
314
-
315
- Cloudflare Workers에서는 `wrangler.toml`과 `.dev.vars`를 사용합니다.
121
+ ## Cloudflare Workers
316
122
 
317
123
  ### wrangler.toml
318
124
 
@@ -324,135 +130,40 @@ compatibility_date = "2024-01-01"
324
130
  [vars]
325
131
  NODE_ENV = "production"
326
132
  LOG_LEVEL = "info"
327
-
328
- # 개발 환경 오버라이드
329
- [env.development.vars]
330
- NODE_ENV = "development"
331
- LOG_LEVEL = "debug"
332
133
  ```
333
134
 
334
- ### .dev.vars (개발용 시크릿)
135
+ ### .dev.vars (시크릿, gitignore)
335
136
 
336
137
  ```env
337
- # ⚠️ 이 파일은 gitignore에 추가해야 합니다
338
- DATABASE_URL=postgresql://postgres:postgres@localhost:5432/myapp_dev
138
+ DATABASE_URL=postgresql://localhost:5432/myapp_dev
339
139
  JWT_SECRET=dev-secret-key
340
- OPENAI_API_KEY=sk-dev-xxx
341
140
  ```
342
141
 
343
- ### wrangler 시크릿 설정 (프로덕션)
142
+ ### 시크릿 설정
344
143
 
345
144
  ```bash
346
- # 시크릿 추가
347
145
  wrangler secret put DATABASE_URL
348
146
  wrangler secret put JWT_SECRET
349
- wrangler secret put OPENAI_API_KEY
350
-
351
- # 시크릿 목록 확인
352
- wrangler secret list
353
147
  ```
354
148
 
355
149
  ---
356
150
 
357
- ## .gitignore 설정
151
+ ## .gitignore
358
152
 
359
153
  ```gitignore
360
- # 환경 변수 파일
361
154
  .env
362
155
  .env.local
363
156
  .env.*.local
364
157
  .dev.vars
365
158
 
366
- # 커밋해도 되는 파일
367
159
  !.env.example
368
160
  !.env.development
369
161
  !.env.production
370
162
  ```
371
163
 
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
164
  ---
452
165
 
453
166
  ## 관련 문서
454
167
 
455
168
  - [Hono 개요](./index.md)
456
- - [미들웨어](./middleware.md)
457
- - [Zod 검증](./validation.md)
458
- - [Cloudflare 배포](../deployment/cloudflare.md)
169
+ - [Cloudflare 배포](../../deployment/cloudflare.md)