
- TOP
- ã¿ã°äžèЧ
- ãã¡ã€ã³é§å
ãã¡ã€ã³é§å
ã€ãã³ã
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
ãã¬ãžã³
æè¡ããã°
ã¯ããã« ããã«ã¡ã¯ãRevComm AI Div. ã® id:tmotegi ã§ãã RevComm ã§ã¯ Copilot ã»èŠçŽã»ã³ãŒãã³ã°ãªã©ãLLM ãæŽ»çšããæ©èœãæ¥éã«å¢ããŠããŸããåœåã¯1ã2ã€ã®ãµãŒãã¹ã LLM ãçŽæ¥åŒã³åºãã ãã§ããããæ°æ©èœã®ãªãªãŒã¹ãšäžŠè¡ããŠå©çšãããããã€ããŒãåºãããæ°ã¥ãã°åãµãŒãã¹ãåå¥ã« ClaudeïŒBedrockïŒãOpenAIïŒAzureïŒãåŒã³åºãæ§æã«ãªã£ãŠããŸããã ãã°ããã¯ããã§ãåã£ãŠããŸããããLLM ãå©çšããããŒã ãå¢ããå©çšããã¢ãã«ããããã€ããŒãåºããã«ã€ããããã€ãã®åé¡ã衚é¢åããŠããŸããã ã¯ã©ãŒã¿ã»ã¬ãŒããªããã察å¿ããµãŒãã¹ããšã«åæ£ â 以åã¯ã¯ã©ãŒã¿ã®äžéãäœãããµãŒãã¹ããšã«è€æ°ã¢ã«ãŠã³ããäœæããŠã¬ãŒããªããããåé¿ããŠããŸãããã¬ãŒããªãããã«åŒã£ããããªããããåããŒã ãåå¥ã«ãªãã©ã€ãåãæ¿ãåŠçãæžããŠãããåããšã©ãŒãã³ããªã³ã°ã³ãŒããåæã«æ£åšããŠããŸããã æ°ã¢ãã«å¯Ÿå¿ã®ã³ã¹ããé«ã â æ°ããã¢ãã«ãåºããã³ã«ãè€æ°ãµãŒãã¹ã§ã¯ã©ã€ã¢ã³ãã³ãŒããã¢ãã«åãåå¥ã«æŽæ°ããå¿
èŠããããŸããã ã³ã¹ãã®å
èš³ãèŠããªã â ãã©ã®æ©èœããã©ã®ããã³ãã§ãã©ã®ã¢ãã«ãã©ãããã䜿ã£ãŠããããããããã€ããŒããŸããã§ææ¡ã§ããããããã€ããŒã®è«æ±æžãèŠãŠãæ©èœå¥ã»ããã³ãå¥ã®å
èš³ãããããŸããã§ãããã³ã¹ãå¢ã®åå ãç¹å®ããã ãã§æéãããã£ãŠããŸããã åœå
åŠçã®é©çšæŒããªã¹ã¯ â 顧客èŠä»¶ã§ããŒã¿ãåœå€ã«åºããªãæ©èœã§ã¯ãå©çšã§ããã¢ãã«ãå¶éãããŸãããã®å¶çŽãåãµãŒãã¹ã§åå¥ã«ç®¡çããŠãããããé©çšæŒããèµ·ããæœåšçãªãªã¹ã¯ããããŸããã ãããã解決ããããã«ã瀟å
ã® LLM åŒã³åºããäžæ¬åãã LLM Gateway ãéçºããŸããã ç®çã¯å€§ãã2ã€ã§ãã ãã«ããããã€ããŒã®çµ±äž â åäžã€ã³ã¿ãŒãã§ã€ã¹ã§ Bedrock / Azure OpenAI / Vertex AI ãééçã«æ±ããã¯ã©ã€ã¢ã³ãåŽã®ã³ãŒããå€ããã«ã¢ãã«ãåãæ¿ããããããã«ããããšã ã³ã¹ãã®å¯èŠå â ãªã¯ãšã¹ãããšã®å©çšç¶æ³ãèšé²ããããã³ãã»æ©èœã»ã¢ãã«å¥ã«ã³ã¹ããéèšã§ããããã«ããããšã æåããèªåãã¡ã§å®è£
ãããšæ±ºããŠããããã§ã¯ãããŸããããŸãã¯æ¢è£œã® LiteLLM Proxy Server ããã®ãŸãŸäœ¿ãããšãæ€èšããæçµçã« litellm ãã©ã€ãã©ãªãšããŠäœ¿ã£ãŠèªåãã¡ã§å®è£
ãã圢ã«èœã¡çããŸããã ãªã LiteLLM Proxy Server ãæåã®éžæè¢ã«ããã®ãïŒ LLM Gateway ã®æ§ç¯ã決ãããšãããŸãæ€èšããã®ã¯ LiteLLM Proxy Server ã§ãã100 以äžã®ãããã€ããŒã OpenAI API äºæã®åäžãšã³ããã€ã³ãã§æãã OSS ã§ããã©ãŒã«ããã¯å¶åŸ¡ã»ã³ã¹ã远跡ã»Observability 飿ºãæšæºã§æã£ãŠããŸãã ã¯ãŠãª ã åŒè·å£«ãããã³ã ãªã©ãåœå
äŒæ¥ã®æè¡ããã°ã§ãå°å
¥äºäŸãå€ãå
¬éãããŠãããLLM Gateway ãå¿
èŠã«ãªã£ãäŒæ¥ãæåã«æ€èšããéžæè¢ã§ãã LiteLLM Proxy Server ãæšæºã§æã€æ©èœã¯éåžžã«å
å®ããŠããŸãã OpenAI API äºæãšã³ããã€ã³ãïŒæ¢åã® OpenAI ã¯ã©ã€ã¢ã³ããåãå
ã ãå€ããŠãã®ãŸãŸäœ¿ããïŒ è€æ°ãããã€ããŒãžã®ã«ãŒãã£ã³ã°ãšããŒããã©ã³ã·ã³ã° ãªã¯ãšã¹ãããã£ã§ fallbacks ãã£ãŒã«ããæå®ãããã©ãŒã«ããã¯å¶åŸ¡ ã³ã¹ã远跡ã»äºç®ç®¡çïŒã¢ãã«ããšã®ããŒã¯ã³å䟡ãèšå®ãã³ã¹ããèªåèšç®ïŒ LangfuseãDatadog ãªã©ã® Observability 飿º ç¹ã«ããªã¯ãšã¹ãã«ãã©ãŒã«ããã¯é åºãæžãããæ©èœã¯ãç§ãã¡ãå¿
èŠãšããŠããèŠä»¶ãšéãªã£ãŠããŸããã { " model ": " claude-sonnet-4 ", " messages ": [ ... ] , " fallbacks ": [ " gpt-4o ", " gemini-2.0-flash " ] } ã¯ã©ã€ã¢ã³ãããã©ãŒã«ããã¯é åºããªã¯ãšã¹ãã«å«ããŠéãã ãã§ãLiteLLM Proxy Server åŽããšã©ãŒæã«æ¬¡ã®ã¢ãã«ãžåãæ¿ããŠãããŸããå°å
¥ããã ãã§å€ãã®æ©èœãæã«å
¥ããéçšé¢ã®äœã蟌ã¿ãäžèŠã«ãªãé
åçãªéžæè¢ã§ããã ãªãèªåãã¡ã§å®è£
ããã®ã ãåœå
åŠçã®å¶çŽããšããã©ãŒã«ããã¯æŠç¥ããé£åãããè€éãªã«ãŒãã£ã³ã°ããžãã¯ããLiteLLM Proxy Server ã® async_pre_call_hook ãªã©ã®ããã¯åŠçå
ã«ç¡çã«è©°ã蟌ã¿ãããªãã£ãããšããã®ã倧ããªçç±ã§ãã LiteLLM Proxy Server ã«ã¯ async_pre_call_hook ã§ãªã¯ãšã¹ããåãåãã data["model"] ãæžãæããããšã§åçãªã«ãŒãã£ã³ã°ãå®çŸããã«ã¹ã¿ã ãã³ãã©ãŒããããŸããç§ãã¡ã®èŠä»¶ãããã§å®è£
ã§ããŸãããã ãç§ãã¡ã®ã«ãŒãã£ã³ã°ã«ã¯ãåçŽãªã¢ãã«åãæ¿ãã«ãšã©ãŸããªãèŠä»¶ãéãªã£ãŠããŸããã ãªã¯ãšã¹ãåäœã§åœå
åŠçã匷å¶ã§ãã â ç¹å®ã®ãªã¯ãšã¹ãã¯æ¥æ¬åœå
ãªãŒãžã§ã³ã§åäœããã¢ãã«ã®ã¿äœ¿çšãã ãã©ãŒã«ããã¯å
ãåœå
ãªãŒãžã§ã³ã®ã¢ãã«ã«éå®ãã â åœå
åŠçãå¿
èŠãªãªã¯ãšã¹ãããã©ãŒã«ããã¯ããŠããæµ·å€ãªãŒãžã§ã³ã«ã¯æµããªã ã¯ã©ã€ã¢ã³ãããã©ãŒã«ããã¯é åºãæå®ã§ãã â ããŸã Claudeãã ããªã OpenAIããšããåªå
é äœããªã¯ãšã¹ãã«æžãã èŠä»¶1ã ããªã async_pre_call_hook ã§ã¢ãã«ãåœå
ãªãŒãžã§ã³ã®ãã®ã«å·®ãæ¿ããã°æžã¿ãŸããèŠä»¶3ã ããªã LiteLLM Proxy Server æšæºã® fallbacks ãã£ãŒã«ãããã®ãŸãŸäœ¿ããŸããåé¡ã¯1ã»2ã»3ã® çµã¿åãã ã§ãããåœå
åŠçãèŠæ±ãã€ã€ããã€ã¯ã©ã€ã¢ã³ãæå®ã®åªå
é äœã§ãã©ãŒã«ããã¯ãããã€ãã©ãŒã«ããã¯å
ãåœå
ã«éå®ããããšããé£åããå¶åŸ¡ã¯ãã«ã¹ã¿ã ãã³ãã©ãŒãšãã©ãŒã«ããã¯æ©æ§ããŸããã ããžãã¯ã«ãªããŸãã async_pre_call_hook ã¯ã·ã³ãã«ãªã¢ãã«åãæ¿ãããã®ã³ã°ã«ã¯åããŠããŸãããè€æ°ã®å¶çŽãé£åãããã«ãŒãã£ã³ã°ã«ã¯åããŸãããããã§ããã®éšåã¯å°çšã®ããžãã¯ãšããŠèªåã§æã€ããšã«ããŸããã ãªããLiteLLM Proxy Server 㯠litellm ãšãã Python ã©ã€ãã©ãªãããŒã¹ã«äœãããŠãããlitellm ã¯åäœã§ãã©ã€ãã©ãªãšããŠå©çšã§ããŸããããã§ Proxy Server ã¯äœ¿ããã litellm ããããã€ããŒæœè±¡åã®ã©ã€ãã©ãªãšããŠäœ¿ããããžãã¹ããžãã¯ã¯èªåãã¡ã§èšèšã»å®è£
ãã æ¹ãé·æçãªèŠéããè¯ããšå€æããèªåãã¡ã§å®è£
ããããšãéžã³ãŸããã litellm ãã©ã®ããã«ã©ã€ãã©ãªãšããŠçµã¿èŸŒãã ãïŒ EKS äžã® LLM Gateway ã¢ãŒããã¯ãã£å³ FastAPI ããŒã¹ã® Python ãµãŒãã¹ãšããŠå®è£
ããDDD ã®ã¬ã€ã€ãŒæ§æãæ¡çšããŠããŸãã litellm ã¯ã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã® LLMClient ã¯ã©ã¹å
ã ãã§äœ¿ãããã¡ã€ã³å±€ã¯ã©ã®ãããã€ããŒã䜿ã£ãŠããããç¥ããŸãããBedrock / Azure OpenAI / Vertex AI ã® 3 ãããã€ããŒã«å¯Ÿå¿ããªããããäžäœã¬ã€ã€ãŒã®ããžãã¹ããžãã¯ã¯ãããã€ããŒã®éããæèããã«æžã¿ãŸãã class LLMClient: async def create_completion( self, deployment: ModelDeployment, request: ChatCompletionRequest ) -> ChatCompletion: response = await litellm.acompletion(model=model_string, ...) return ChatCompletion.model_validate(response.model_dump()) litellm ãæ
ãã®ã¯ãBedrock / Azure / Vertex AI ã®å·®ç°ãåžåãã HTTP ã¯ã©ã€ã¢ã³ãããšãã圹å²ã ãã§ããåãããã€ããŒã¯èªèšŒæ¹åŒãš API ã®åœ¢åŒãç°ãªããŸãããlitellm ããã®å·®ç°ãåžåããŸãã ãã©ãŒã«ããã¯ã®å€æãã¢ãã«éžæãšãã£ãã«ãŒãã£ã³ã°ããžãã¯ã¯ããã¹ãŠèªåãã¡ã®ãã¡ã€ã³å±€ã«çœ®ããŠããŸããã¬ã€ã€ãŒãåããããšã§ãããã€ããŒãžã®äŸåãã³ãŒãããŒã¹å
šäœã«åºããã®ãé²ããã«ãŒãã£ã³ã°ããžãã¯ã®åäœãã¹ããæžãããããªããŸããã èšèšã§å·¥å€«ããããš â ãã©ãŒã«ããã¯æŠç¥ãã¯ã©ã€ã¢ã³ããéžã¹ãããã«ãã ãã©ãŒã«ããã¯æŠç¥ã¯ auto / specified / none ã® 3 çš®é¡ããããªã¯ãšã¹ãããšã« revcomm_options.fallback_strategy ã§æå®ããŸããåŠçã®ç¹æ§ã«åãããŠå¯çšæ§ã»å質ã»ãšã©ãŒäŒæã®æåãéžã¹ãããã«ããèšèšã§ãã æŠç¥ åäœ äœ¿ãã©ãã auto åäžã¢ãã«ã®å¥ãªãŒãžã§ã³ã»å¥ã¢ã«ãŠã³ãã«èªåã§ãã©ãŒã«ãã㯠ãšã«ããæ¢ããããªãåŠç specified ã¯ã©ã€ã¢ã³ããæå®ããé çªã§ãã©ãŒã«ãã㯠ã¢ãã«ã®å質差ã蚱容ã§ããªãåŠç none ãã©ãŒã«ããã¯ããªãïŒãšã©ãŒããã®ãŸãŸè¿ãïŒ â auto ã¯å¯çšæ§ãåªå
ããã¢ãŒãã§ããããã¢ã«ãŠã³ãã® Bedrock ãã¬ãŒããªãããã«åŒã£ããã£ãå Žåãåäžã¢ãã«ãæäŸããå¥ã¢ã«ãŠã³ãã»å¥ãªãŒãžã§ã³ã®ãããã€ã¡ã³ããžèªåã§åãæ¿ããŸããåœå
åŠçãèŠæ±ããŠãããªã¯ãšã¹ãã§ã¯ãåãæ¿ãå
ãåœå
åŠçã«å¯Ÿå¿ãããããã€ã¡ã³ãã«éå®ãããŸãã specified ã¯ã¯ã©ã€ã¢ã³ããããŸã Claudeãã ããªã OpenAIããšãã圢ã§åªå
é äœãæç€ºããã¢ãŒãã§ããåºååè³ªã«ææãªåŠçã§ã¯ãæå³ããªãå質ã®ç°ãªãã¢ãã«ãžã®åãæ¿ããé¿ããããããã¡ãã䜿ããŸãã none ã¯ãšã©ãŒããã®ãŸãŸè¿ããŸãã ãªãããã©ãŒã«ããã¯ãçºåããã®ã¯ãã¬ãŒããªããããã¿ã€ã ã¢ãŠãã»ãµãŒããŒãšã©ãŒãªã©ã®äžæçãªãšã©ãŒã«éãããŠããŸãããªã¯ãšã¹ãå
容ã®äžåïŒäžæ£ãªãã©ã¡ãŒã¿ãã³ã³ããã¹ããŠã£ã³ããŠè¶
éãªã©ïŒã§ã¯ãã©ãŒã«ããã¯ããããã®ãŸãŸãšã©ãŒãè¿ããŸããæå³ããªãã¢ãã«ãžã®åãæ¿ããèµ·ãããªã¹ã¯ãæããããã§ãã åœå
åŠçãèŠæ±ãããªã¯ãšã¹ãã§ã¯ããã©ãŒã«ããã¯å
ãåœå
ãªãŒãžã§ã³ã®ã¢ãã«ã«çµãããŸããåœå
å¶çŽãšãã©ãŒã«ããã¯é åºãé£åããŠåãéšåã§ãã â¡ ããŒã¿ãåœå
ã§åŠçãããããšãä¿èšŒãã 顧客ãšã®å¥çŽã§ããŒã¿ã®åœå
åŠçã矩åä»ããããŠããã±ãŒã¹ã§ã¯ãäžã€ã§ãé©çšæŒãããããšããžãã¹ãªã¹ã¯ã«ãªããŸããLLM Gateway ã§ã¯ã¢ãã«èšå®ã«åœå
ã»ã°ããŒãã«ã®ãã©ã°ãæãããã²ãŒããŠã§ã€ããªã¯ãšã¹ãåäœã§åœå
åŠçã匷å¶ããŸãããã®å€æãã¢ããªã±ãŒã·ã§ã³åŽã«å§ãããã²ãŒããŠã§ã€ã§äžå
管çããèšèšã§ãã ã¢ãã«ããšã®ãªãŒãžã§ã³ã»ãããã€ããŒèšå®ã¯ YAML ã§ç®¡çããŠããŸãã gateway_region: ap-northeast-1 deployments: - model_name: claude-sonnet-4 provider: bedrock region_scope: regional # åœå
ãªãŒãžã§ã³ region: ap-northeast-1 - model_name: gpt-4o provider: azure region_scope: global # ã°ããŒãã«ãªãŒãžã§ã³ region: japaneast region_scope: regional ã®ã¢ãã«ããåœå
åŠçããšããŠæ±ãããŸãããªã¯ãšã¹ãã§åœå
åŠçãèŠæ±ããå Žåãã²ãŒããŠã§ã€ã該åœããã¢ãã«ãéžæããŸãã ãã®èšèšã®å©ç¹ã¯ãåœå
åŠçã®å€å®ããžãã¯ãã²ãŒããŠã§ã€å
ã«éããŠããããšã§ããæ°ããã¢ãã«ã远å ãããšãããYAML ã« region_scope ãé©åã«èšå®ããã ãã§åœå
åŠçã®å¶çŽãé©çšãããŸããç°å¢ããšã®èšå®å·®åã¯å¥ãã¡ã€ã«ã§ç®¡çããŠãããããåŒã³åºãå
ã®ãµãŒãã¹ã¯ç°å¢ãæèããåããªã¯ãšã¹ããéãã ãã§æžã¿ãŸãã ⢠ã¢ãã«ãåãæ¿ããŠãåŒã³åºãå
ã®ã³ãŒããå€ããã«æžãããã«ãã ã²ãŒããŠã§ã€ã¯ OpenAI Chat Completions API äºæã®ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŠããŸããæ¢åã® OpenAI ã¯ã©ã€ã¢ã³ãã¯ãšã³ããã€ã³ãã®åãå
ãå€ããã ãã§ç§»è¡ã§ããã¢ãã«ãåãæ¿ãããšãã model ãã£ãŒã«ãã®å€ãå€ããã ãã§ããRevComm åºæã®å¶åŸ¡ã¯ revcomm_options ãã£ãŒã«ãã«éçŽããŠããŸããOpenAI ã¯ã©ã€ã¢ã³ããã㯠extra_body={"revcomm_options": {...}} ãšããŠæž¡ããããæšæº API ãšã®åŸæ¹äºææ§ãç¶æããŠããŸãã { " model ": " claude-sonnet-4 ", " messages ": [ ... ] , " revcomm_options ": { " require_domestic_processing ": true , " prefer_prompt_caching ": true , " fallback_strategy ": " specified ", " fallback_models ": [ " gpt-4o ", " gemini-2.0-flash " ] , " labels ": { " tenant_id ": " tenant-123 ", " service ": " transcription ", " team ": " asr " } } } ãªãã·ã§ã³ãçç¥ããã°éåžžã® OpenAI API ãªã¯ãšã¹ããšã»ãŒåã圢åŒã§ãã ã¬ã¹ãã³ã¹ã«ã¯ revcomm_metadata ãä»äžããå®éã«äœ¿ã£ããããã€ããŒããã©ãŒã«ããã¯ã®çºçæç¡ãåŒã³åºãå
ã«è¿ããŸãã { " revcomm_metadata ": { " actual_provider ": " bedrock ", " actual_model ": " claude-sonnet-4 ", " fallback_used ": true , " fallback_reason ": " RateLimitError: ... ", " gateway_latency_ms ": 42 , " domestic_processing ": true } } ãã©ãŒã«ããã¯ãééçã«èµ·ãããšãåŒã³åºãå
ããã¯ããªããã®ã¢ãã«ã䜿ãããã®ãããèŠããªããªããŸããã¡ã¿ããŒã¿ãã¬ã¹ãã³ã¹ã«å«ããããšã§ããããã°æã«ãã©ãŒã«ããã¯ã®çºçãããã«ç¢ºèªã§ããã³ã¹ãåæã«ã掻çšã§ããŸãããã©ãŒã«ããã¯ãé »çºããŠããå Žåã¯ãç¹å®ã®ãããã€ããŒãæé垯ã«åé¡ãããå
åãšããŠæ€ç¥ã§ããŸãã ⣠誰ãã©ã®ã¢ãã«ãã©ãã ã䜿ã£ãŠããããææ¡ã§ããããã«ãã LLM Gateway ã®ããã²ãšã€ã®æ±ãã³ã¹ãã®å¯èŠåã§ããLiteLLM Proxy Server ã«ã¯ Cost Tracking æ©èœãæšæºã§åãã£ãŠããŸãããlitellm ãã©ã€ãã©ãªãšããŠäœ¿ãå Žåã¯ãªã¯ãšã¹ãããšã®ã³ã¹ãèšç®å€ã¯åŸããããã®ã®ãä¿åã»éèšã»å¯èŠåã¯èªåã§çšæããå¿
èŠããããŸãããªã¯ãšã¹ãããšã®ããŒã¯ã³æ°ã»ãããã€ããŒã»ã¢ãã«ã»ã¬ã€ãã³ã·ã PostgreSQL ã«èšé²ããRedash ã§ããã³ãå¥ã»æ©èœå¥ã«å¯èŠåããŠããŸãããã®ã³ã°ã¯ã¬ã¹ãã³ã¹ãè¿ããåŸã«ããã¯ã°ã©ãŠã³ãã§è¡ããããã²ãŒããŠã§ã€ã®ã¬ã€ãã³ã·ã«ã¯åœ±é¿ããŸããã labels 㯠JSONB ã«ã©ã ã§ããªã¯ãšã¹ãæã«ãªãã·ã§ã³ãšããŠæž¡ããããŒããªã¥ãŒããã®ãŸãŸä¿åããŸããJSONB ã«ããŠããã®ã¯ãã©ãã«ã®ããŒããããããåºå®ãããåãµãŒãã¹ãå¿
èŠãªãã£ã¡ã³ã·ã§ã³ãèªç±ã«ä»äžã§ããããã«ããããã§ãã SELECT labels->> ' tenant_id ' AS tenant_id, actual_model, SUM (total_tokens) AS total_tokens FROM llm_usage_logs WHERE created_at >= now() - INTERVAL ' 30 days ' GROUP BY labels->> ' tenant_id ' , actual_model ORDER BY total_tokens DESC ; ããã³ãå¥ã»ãµãŒãã¹å¥ã»ããŒã å¥ãªã©ãéèšè»žãã¹ããŒã倿Žãªãã«è¿œå ã§ããŸãããæ°ããããŒã ã䜿ãå§ããã®ã§ããŒã å¥éèšãåºãããããšããèŠæãããã°ããã®ããŒã ã team ã©ãã«ããªã¯ãšã¹ãã«å«ããã ãã§å¯Ÿå¿ã§ããŸããããŒãã«å®çŸ©ã®å€æŽããã€ã°ã¬ãŒã·ã§ã³ãäžèŠã§ãã åãµãŒãã¹ã¯æšè«ãªã¯ãšã¹ãæã« tenant_id ã service ãã©ãã«ãšããŠæž¡ãã ãã§ãã³ã¹ãéèšã®åºç€ãæŽããŸãããããã€ããŒã®è«æ±æžãèŠãŠããŠãããããªãã£ããã©ã®ããã³ãã®ãã©ã®æ©èœããã©ã®ã¢ãã«ãã©ãããã䜿ã£ãŠãããããäžæ¬ã®ã¯ãšãªã§åºããããã«ãªããŸããã ããã³ãå¥ã»æ©èœå¥ã³ã¹ããå¯èŠåããã¢ããªãã£ã¯ã¹ããã·ã¥ããŒãã®ã€ã¡ãŒãž æ¯ãè¿ã£ãŠ LiteLLM Proxy Server ã®ã«ã¹ã¿ã ãã³ãã©ãŒã§ããæè¡çã«ã¯å®çŸã§ããã¯ãã§ããã«ãŒãã£ã³ã°ããžãã¯ãšã©ãã«éèšãèªç€Ÿã®ãã¡ã€ã³ããžãã¯ãšããŠæã£ãããšã§ãèŠä»¶ã®å€åã«ã³ãŒãã§çŽ çŽã«å¯Ÿå¿ã§ããŠããŸãã ãã©ãŒã«ããã¯ããžãã¯ãšã¢ãã«éžæããžãã¯ãå€éšäŸåã®ãªãçŽç²ãª Python ã¯ã©ã¹ã§å®è£
ãããããåäœãã¹ããæžãããããªããŸããããåœå
åŠçãèŠæ±ããå Žåã« region_scope: global ã®ã¢ãã«ã¯åè£ããé€å€ããããããã©ãŒã«ããã¯æŠç¥ã none ã®ãšãã¯ãšã©ãŒããã®ãŸãŸäŒæããããšãã£ãããžãã¯ããLiteLLM Proxy Server ãèµ·åããã«ãã¹ãã§ããŸãã äžæ¹ã§ãã³ã¹ã管ç UI ã API ããŒã®ã»ã«ããµãŒãã¹çºè¡ãªã©ãLiteLLM Proxy Server ãæšæºã§æã€éçšæ©èœã¯èªåã§çšæããå¿
èŠããããŸãããçŸæç¹ã§ã¯ãã³ã¹ãéèšã¯ Redash ã®ããã·ã¥ããŒãã§å¯Ÿå¿ããŠããŸãããAPI ããŒã®ã»ã«ããµãŒãã¹çºè¡ãªã©é·æçã«ã¯æŽåãå¿
èŠãªé åããããŸãã ã«ã¹ã¿ã æ§ãåçŽãªãã¡ã¯ LiteLLM Proxy Server ã§ååã§ãã ãŸãšã åãµãŒãã¹ã«åæ£ããŠãã LLM åŒã³åºããäžæ¬åããããããã«ããããã€ããŒçµ±äžãšã³ã¹ãå¯èŠåãç®çã«ç€Ÿå
LLM Gateway ãéçºããŸãã LiteLLM Proxy Server ãæ€èšããŸããããåœå
åŠçå¶çŽ Ã ãã©ãŒã«ããã¯æŠç¥ã®é£åãèšèšæ³å®å€ã«ãªããããèªåãã¡ã§å®è£
ããããšã«ããŸãã litellm ã¯ãããã€ããŒæœè±¡åã®ã©ã€ãã©ãªãšããŠäœ¿ããã«ãŒãã£ã³ã°ããžãã¯ã¯èªåãã¡ã®ãã¡ã€ã³ãšããŠèšèšããŸãã ãªã¯ãšã¹ãã«ä»äžãã labelsïŒããã³ã IDã»ãµãŒãã¹åãªã©ïŒã PostgreSQL ã® JSONB ã«ã©ã ã«èšé²ããããšã§ãã¹ããŒããå€ããã«éèšè»žã远å ã§ããããã«ããŸãã
ã¯ããã« 2025幎æ°åã®ãã©ã³ããœãªã¥ãŒã·ã§ã³éçºæ¬éšZOZOMOéšOMOãããã¯ã®æ±è°·ã§ãïŒãç§ã¯çãã¬ãè¶£å³ãªã®ã§ãããå¢éæïŒçèãã€ããããã«äœéãå¢ããææïŒãçµããããšããŠããŸããæ©ãç©ããªãããšæãã€ã€ãã€ãæãç©ãçããã®ãé£ã¹ãçŸå®ããéããŠãã仿¥ãã®é ã§ãã æ©ããã®ã§å
¥ç€Ÿãããã1幎ãçµã¡ãŸããããã®1å¹Žãæ¯ãè¿ã£ãŠäžçªåŒ·ãæããŠããã®ã¯ã ã¹ã¯ã©ã ã¯ãã¢ãžã£ã€ã«éçºã®ææ³ãã§ãããšåæã«ãæ°åã«ãšã£ãŠã®æé«ã®åŠç¿ç°å¢ã ã£ã ãšããããšã§ãã é
å±çŽåŸã®èªåã¯ããªãã¡ã€ã³ã¡ã³ãã®è°è«ã«ã€ããŠããããå®è£
äžãã©ãããæãã€ããŠãããåãããªãç¶æ
ã§ãããããã§ã1幎åŸãããŒã ã®äžã§ã¹ã¯ã©ã ãäžéãåããããã«ãªããŸããããã®å€åã¯ãç ä¿®ãç¬åŠã ãã§ã¯ãªããã¹ã¯ã©ã ã®åã€ãã³ããã®ãã®ã«å€§ããæ¯ããããŸããã ã¹ã¯ã©ã ãããèªãããã®ã¯ãããžãã¹äŸ¡å€ãæå€§åããä»çµã¿ããšããŠã®åŽé¢ã§ãããããæ°åèŠç¹ããèŠçŽããŠã¿ããšããããã¯ãã¹ãŠå
茩ãã¡ã®æèããã»ã¹ãçæéã§èгå¯ãããã®å Žã§è³ªåã§ããå Žã§ããããŸãããæžç±ãããã¥ã¡ã³ãã§ã¯èº«ã«ã€ãã«ãããæèã®åããã€ãŸãå
茩ãã©ããªåããç«ãŠãäœãããã©ããã«å€æããŠããããšããåºæºããããŸãããããåŠã¹ãç°å¢ãšããŠãã¹ã¯ã©ã ã¯æ°åã«ãšã£ãŠéåžžã«æŽã£ãæ§é ãæã£ãŠãããšæããŠããŸãã ãã®èšäºã§ã¯ããæèã®åããèªåãæ°å1幎ç®ã«å
·äœçã«ã©ã身ã«ã€ããããæ¯ãè¿ã£ãŠã¿ãŸãã顿ãšããŠåãäžããã®ã¯ããããã¯ãããã¯ãã°ãªãã¡ã€ã³ã¡ã³ãïŒä»¥äžããªãã¡ã€ã³ã¡ã³ãïŒãã¹ããªã³ããã©ã³ãã³ã°ïŒä»¥äžããã©ã³ãã³ã°ïŒãã¢ãããã°ã©ãã³ã°ã®3ã€ã§ããåè
2ã€ã¯ã¹ã¯ã©ã ã€ãã³ãã§ãã¢ãããã°ã©ãã³ã°ã¯ããŒã ã§æ¡çšããŠããéçºãã©ã¯ãã£ã¹ã§ããæ°åãšã³ãžãã¢ã«ã¯ãã¹ã¯ã©ã ã¯æ°åã®æé«ã®åŠç¿ç°å¢ã«ãªãããããšããèŠç¹ããæ°ååãå
¥ããæ
ãéçºçµç¹ã«ã¯è²æèšèšã®ãã³ããæäŸã§ããã°ãšæã£ãŠããŸãã ç®æ¬¡ ã¯ããã« ç®æ¬¡ é
å±çŽåŸã®èªåãšããŒã ã®ç°å¢ ã¹ã¯ã©ã éçºã§èº«ã«ã€ãã3ã€ã®åŠã³ 1. ãªãã¡ã€ã³ã¡ã³ãïŒæ©èœãã課é¡è§£æ±ºã®ææ®µããšããŠèŠãèŠç¹ã身ã«ã€ãã å
茩ãç«ãŠããåããããèªåã®èŠéãé ã«åºããŠãã£ã è°è«ãçµãŠãæ©èœã®è³ªãšåŠã³ãèŠãã 2. ãã©ã³ãã³ã°ïŒAcceptance Criteriaã§ãå®è£
ã®èªç±åºŠããå¶åŸ¡ããããšãåŠãã Acceptance Criteriaã§ãå®è£
ã®èªç±åºŠããå¶åŸ¡ãã èŠç©ãã粟床ã¯ACå®çŸ©ã®è§£å床ã®åé¡ã«éçŽããã 3. ã¢ãããã°ã©ãã³ã°ïŒãäºå®ããŒã¹ã§å®è£
ããããšããå§¿å¢ã身ã«ã€ãã å
茩ã¯äºå®ããæ¹éãæ±ºããŠãã ãäºå®ããå§ããããšããåãåŠãã AIæä»£ã«ãæèã®åã¯ã©ã掻ããã ãããã« é
å±çŽåŸã®èªåãšããŒã ã®ç°å¢ é
å±åã®èªåã«ãšã£ãŠãéçºããšã¯ã仿§ã決ãŸã£ãã¿ã¹ã¯ãå®è£
ããããšãšã»ãŒåãæå³ã§ããã åŠçæä»£ã«é·æã€ã³ã¿ãŒã³ãšããŠåå ããŠããã®ã¯ãITãã³ãã£ãŒäŒæ¥ã®BtoBãããã¯ãéçºããŒã ã§ããããã®ããŒã ã®ããã¯ãã°ã«ã¯ä»æ§ãŸã§æžãããã¿ã¹ã¯ã䞊ãã§ããããšã³ãžãã¢ã¯ãã®äžããèªåã§ã¿ã¹ã¯ãåã£ãŠäœæ¥ããéçºãµã€ã¯ã«ã§ãããã¿ã¹ã¯ã¯ãªãŒããŒã起祚ããŠããã起祚æç¹ã§äœãäœããã¯æ±ºãŸã£ãŠããŸããèªåã®ä»äºã¯ããããã³ãŒãã«èœãšã粟床ãšé床ãäžããããšã ãšæã£ãŠãŸããã ãããªèªåãé
å±å
ã®ä»ã®ããŒã ã«å
¥ã£ããšãããŸãé©ããã®ã¯éçºãµã€ã¯ã«ã®ãåºããã§ããã ãªãã¡ã€ã³ã¡ã³ãã§ã¯ããããã¯ãããã¯ãã°ã¢ã€ãã ïŒPBIïŒã®ç®çãåãå
¥ãæ¡ä»¶ãæŽçããããŒã ã§èªèãæããªããå®è£
å¯èœãªç²åºŠãŸã§èŠä»¶ãå
·äœåããŸãããã©ã³ãã³ã°ã§ã¯ãã¹ããªã³ããŽãŒã«ãèžãŸããŠããŒã å
šå¡ã§äœæ¥å
容ã確èªããçžå¯ŸèŠç©ãããããªããã¹ããªã³ãå
ã§éæããå
å®¹ãæ±ºå®ããŸããéçºäžã¯ã¢ãããã°ã©ãã³ã°ãéããŠãªã¢ã«ã¿ã€ã ã«ç¥èå
±æãšæææ±ºå®ãè¡ããŸããã¹ããªã³ãã¬ãã¥ãŒã§ã¯å®æããã€ã³ã¯ãªã¡ã³ããã¹ããŒã¯ãã«ããŒãšãšãã«ç¢ºèªããæ¬¡ã®æ¹åæ§ãè°è«ããŸãã ãã®1é±éã®ã¹ããªã³ãããæ°åã®èªåã忥ããããŒã ã®äžå¡ãšããŠåãããšã«ãªããŸãããããŸã§ã®éçºçµéšãšæ±ºå®çã«éã£ãã®ã¯ãããã¯ãã°ã«ã¿ã¹ã¯ã䞊ã¶åã®æ®µéãããèªåãè°è«ã«åå ãããšããç¹ã§ããã ãã1ã€ã®é©ãã¯ãè°è«ã«ã€ããŠããããã«èŠæ±ãããç¥èã®éã§ãããªãã¡ã€ã³ã¡ã³ãããã©ã³ãã³ã°ã§ã¯ãè€æ°ã®åæç¥èãèžãŸããè°è«ãåœããåã®ããã«å±éãããŸããäŸãã°ãèªåã®æ
åœããŠãããµãŒãã¹ãä»ã®ãµãŒãã¹ãšã©ã飿ºããŠããããCQRSã§æ§ç¯ãããããŒã¿ã®æµãã¯ã©ãããèªèšŒåºç€ãšã®é¢ä¿ã¯ã©ããªã£ãŠããã®ããªã©ã§ããé
å±çŽåŸã®èªåã¯ãè°è«ã®äžã§åºãŠããçšèªã®ååã远ããŠããªãç¶æ
ã§ããã ãèªåãè²¢ç®ã§ããã ãããããæåã®æ°é±éãççŽã«èšã£ãŠããæããŠããã®ãèŠããŠããŸãã ãšããããæ¯ãè¿ã£ãŠã¿ããšãã®ç°å¢ããèªåã«ãšã£ãŠãã以äžãªãåŠç¿æ©äŒã«ãªã£ãŠããŸãããã¹ã¯ã©ã ã®åã€ãã³ããããŸãã«ç¥èãçµéšãè¶³ããŠããªãæ°åã«ãšã£ãŠæé©ãªåŠç¿è£
眮ã«ãªã£ãŠããããã§ãã ã¹ã¯ã©ã éçºã§èº«ã«ã€ãã3ã€ã®åŠã³ ããããã¯ãæ°å1幎ç®ã§èº«ã«ã€ãã3ã€ã®åŠã³ããå
·äœçãªãšããœãŒããšãšãã«ç޹ä»ããŸãã 1. ãªãã¡ã€ã³ã¡ã³ãïŒæ©èœãã課é¡è§£æ±ºã®ææ®µããšããŠèŠãèŠç¹ã身ã«ã€ãã ç§ãæå±ããŠããããŒã ã§ã¯ãZOZOTOWNäžã§ãã©ã³ãæ§ã®åºèåšåº«ã確èªããååã®åã眮ããã§ãããµãŒãã¹ã ZOZOMOåºèåšåº«åã眮ã ããéçºããŠããŸããè€æ°ã®ãã€ã¯ããµãŒãã¹ã飿ºããCQRSãæ¡çšããŠãããããã€ãã³ããéããããŒã¿ã®æµããçè§£ããããšãéçºã®åæã«ãªããããã¯ãã§ãã é
å±ãããŠãã°ããçµã£ãé ããã©ã³ãæ§ã®åºèæ
å ±ãã·ã¹ãã äžã§æŽæ°ã§ããæ©èœãå®è£
ããŸããããããŸã§ã¯éçºããŒã ãæåã§å¯Ÿå¿ããŠãããå®äºãŸã§ã«3å¶æ¥æ¥ã»ã©ããã£ãŠããŸããããã©ã³ãæ§ãåŸ
ãããããšã«ãªããéçšè
ã®èªç¥è² è·ãäœæ¥æéã倧ãããšãã課é¡ããããŸããã è°è«ã«åå ããåãç§ã®é ã«ãã£ãã€ã¡ãŒãžã¯ç°¡åã§ããããå
¥åãã©ãŒã ãäœã£ãŠãPOSTã§æŽæ°ããAPIãå©ãã°å®äºããé
å±ãããã°ããã®ç§ã¯ãæ©èœããå®è£
ãããã®ããšããŠæããå®è£
ã€ã¡ãŒãžãæµ®ããã æç¹ã§å®æåãèŠããã€ããã«ãªã£ãŠããŸããã ãšããããå®éã®ãªãã¡ã€ã³ã¡ã³ãã®è°è«ã¯ãŸã£ããå¥ã®å°ç¹ããå§ãŸããŸããã å
茩ãç«ãŠããåããããèªåã®èŠéãé ã«åºããŠãã£ã æåã«åºãŠããã®ã¯ãã·ã¹ãã æ§é ã«å¯Ÿããåãã§ãããèªèšŒåºç€ãšã®é¢ä¿ããã€ã¯ããµãŒãã¹ããšã®è²¬åããããŠããŒã¿ãã©ã®ãµãŒãã¹éãã©ã®ããã«æµããã®ãããšãã£ãå
容ã§ããç§ããPOSTã1ã€äœãã°ããããšæã£ãŠããæ©èœã¯ãå®éã«ã¯è€æ°ã®ãµãŒãã¹ã«ãŸããã£ãŠã€ãã³ããçºè¡ããåãµãŒãã¹ãããããã®è²¬åã§ããŒã¿ãæŽæ°ããŠãããã®ã§ãããCQRSãã€ãã³ãé§åã®èšèšã¯ç¬åŠã§åžåããã«ã¯æéã®ãããé åã§ãããè°è«ã®å Žã§åºãŠããçšèªãèšèšå€æã«ã€ããŠãã®å Žã§è³ªåã§ããããšã§ãèªç¥è² è·ã®é«ãæ
å ±ãäžæ°ã«åžåã§ããŸããã æ¬¡ã«ãã·ã¹ãã èšèšãå
·äœåããŠãããšãæ³å®ããŠããªãã£ãè«ç¹ã次ã
ãšåºãŠããŸãããåºèæ
å ±ãæŽæ°ãããããšãã©ã確èªããã®ããã確èªããããã«ã¯ã©ã®ããŒã¿ãå¿
èŠãããèããã¹ãããšãèšããã§ãããªãã§ãå
茩ããèªç¶ã«åºãŠããã®ãã ãã®æ©èœã¯ããããäœã解決ãããã®ã ã£ãã£ãïŒ ããšããåãã§ããã ããããè°è«ã¯ãæ©èœãå®è£
ãã話ãããŠãŒã¹ã±ãŒã¹ã宿ŒããŠã¿ã話ã«åãæ¿ãããŸããå®éã®éçšè
ã®åããæ³åãããšãã«ã¯éçšè
ã«çŽæ¥ãã¢ãªã³ã°ããªããããŠãŒã¶ãŒäœéšããŒã¹ã§ä»æ§ãå
·äœåãããŠãããŸããã äŸãã°ããåºèæ
å ±ãšããŠæŽæ°ã§ããããŒã¿ã¯äœãããã®ãããå
šéšæŽãåºããšããããå§ãŸããŸãããããã«ãéçšè
ãæŽæ°ãã¿ã³ãæŒãåã«ãå
¥åãã¹ããªããšå®å¿ã§ããç¶æ
ã¯äœãããæŽæ°ããåŸãæ¬åœã«æå³éãã«åæ ãããããã©ã確èªãããããªã©ããŠãŒã¶ãŒäœéšã®çްéšã«ãŸã§åããç¶ããŠãããŸãããããã«å¿ãã圢ã§ãæ©èœã®äžèº«ãå
·äœåãããŠãããŸããã ããã«åºãŠããã®ããããã®æ©èœãå®è£
ããåŸã®æä¹
çãªéçšãããŒã¯ã©ããªããïŒããšããåãã§ãããä»åã®ã±ãŒã¹ä»¥å€ã«ã察å¿ã§ããæ±çšæ§ã£ãŠå¿
èŠã ã£ãïŒããéã«ä»åã®ãŠãŒã¹ã±ãŒã¹ã«éå®ããã°äžèŠãšãªãå®è£
ã£ãŠãªãã£ãïŒãã®ããã«æ±çšåãèããåããšãåãèœãšãããã®åãããåãå Žã§åæã«é£ã³äº€ã£ãŠããããšãå°è±¡çã§ããã 象城çã ã£ãã®ãããã©ã³ãæ
å ±ã®é®®åºŠããããè°è«ã§ããZOZOMOã®ã·ã¹ãã æ§æäžãåºèãæå±ãããã©ã³ãæ§ã®æ
å ±ãå€ãã£ããšããã·ã¹ãã åŽã¯æ£åžžã«æŽæ°ãããŸããããã®å€æŽããªã¢ã«ã¿ã€ã ã§éçšããŒã«ã«è¡šç€ºãããªãä»çµã¿ã§ããããã®ããéçšäžããæ£ç¢ºãªããŒã¿ã倿ŽããŠãããã©ãã確èªãããããšéçšè
ããéçºåŽãžåãåãããåããã±ãŒã¹ã®çºçãäºæž¬ãããŸãããä»åã®åºèæ
å ±ã®æŽæ°æ©èœãèããããã§ããã®éçšäžã®èª²é¡ãžæãå
¥ããäœå°ããããšå€æãããã©ã³ãæ
å ±ãææ°ç¶æ
ãšããŠååŸãçŽãæ©èœãåãç»é¢ã®äžã§çµã¿èŸŒãããšã«ãªããŸããããã®æ©èœãå®è£
ããçµæãé¢é£ããåãåããã¯çºçããŠããŸãããç®ã®åã®æ©èœèŠæ±ã ãã§ãªããéçšãããå°æ¥ã®ç¶æ
ãŸã§å«ããŠèããããšã§ãæ©èœã®è³ªãå€ãã£ãŠããç¬éã§ããã è°è«ãçµãŠãæ©èœã®è³ªãšåŠã³ãèŠãã ãªãã¡ã€ã³ã¡ã³ãã®è°è«ãçµãŠãæçµçãªæ©èœã¯ãç§ãåœåæ±ããŠããã€ã¡ãŒãžãšã¯å€§ããéããã®ã«ãªããŸãããæçµçã«ã§ããã®ã¯ãåºèæ
å ±ã®æŽæ°äœæ¥ã ãã§ãªãããã®ååŸã§å¿
èŠã«ãªãäœæ¥ãŸã§1ç»é¢ã§å®çµã§ããæ©èœã§ããã 1ç»é¢ã«çµ±åããã®ã¯ãæŽæ°åã®ç¢ºèªïŒåºèIDããåºèåã»ãã©ã³ãåã衚瀺ïŒãæŽæ°åŸã®ç¢ºèªïŒå€æŽåŸããŒã¿ã®è¡šç€ºïŒããããŠãã©ã³ãæ
å ±ã®é®®åºŠãä¿ã€ããã®åååŸæ©èœã®3ã€ã§ããããã«ãããéçšè
ã¯å¥ããŒãžã«é·ç§»ããããå¥ä»¶ã§éçºåŽã«åãåããããããããå¿
èŠããªããªããŸãããå¹çããäœæ¥ã§ããæ©èœã«ä»äžãã£ãŠããŸãã ãã®äžä»¶ã§äœæããã®ã¯ãæ©èœã®ãæ žãšãªãå®è£
ãã¯å
šäœã®ããäžéšã«ãããªããšããããšã§ãããPOSTã®APIãšUIãšããæ žã¯ç¢ºãã«ã€ã¡ãŒãžã§ããŠããŸãããããããå®éã®ãŠãŒã¶ãŒãžå±ãããžãã¹äŸ¡å€ãžãšã€ãªãããŸã§ãæ³åãã¯ããã«è¶
ããè°è«ãšèšèšå€æãç©ã¿éãªã£ãŠããŸããã ãªãã¡ã€ã³ã¡ã³ãã«æ°åã®ãã¡ããåå ã§ããããšã§ãç§ã¯æ©èœããå®è£
ãããã®ãã§ã¯ãªãã課é¡ã解決ãããã®ããšããŠèŠãèŠç¹ããè°è«ã®äžã§èªç¶ã«èº«ã«ã€ããããšãã§ãããšæããŠããŸããããã¯ãå
茩ããåãåã£ãæåã®æèã®åã®ã²ãšã€ã§ããã 2. ãã©ã³ãã³ã°ïŒAcceptance Criteriaã§ãå®è£
ã®èªç±åºŠããå¶åŸ¡ããããšãåŠãã ãªãã¡ã€ã³ã¡ã³ãã§ååå®è£
ãå¯èœã ãšå€æããããšã次ã¯ãã©ã³ãã³ã°ã§ã¹ããªã³ãã®èšç»ãç«ãŠãã¿ã¹ã¯ã®æŽãåºããã¿ã¹ã¯ã®èŠæš¡ãèŠç©ãããŸããé
å±çŽåŸã®ç§ã«ãšã£ãŠããã®æéã¯ãªãã¡ã€ã³ã¡ã³ã以äžã«é£ãããã®ã§ããã èŠæš¡ã®èŠç©ããã«ã¯ãããŒã ããšã«èç©ãããããã·ãã£ïŒéå»ã®ã¹ããªã³ãã§ã©ããããã®èŠæš¡ãæ¶åã§ããããšããæèŠå€ïŒããããŸããããã®ãããã®èŠæš¡ã®å€æŽãªãã ãããäœãã€ã³ãããšããçžå Žããéå»ã®å®è£
çµéšããèªç¶ãšåœ¢æãããŠãããŸããé
å±ãããã°ããã®èªåã«ã¯ããããªãã察象æ©èœã®æ žãšãªã倿Žéšåã®çè§£ããŸã æµ
ãç¶æ
ã§ãèŠæš¡ãåºãã®ã¯æ£çŽé£ããäœæ¥ã§ããã ã§ã¯ãå
茩ã¯ã©ãèŠç©ãã£ãŠããã®ããªãšæ°ã«ãªããŸããã芳å¯ããŠå°è±¡çã ã£ãã®ã¯ãå®è£
ãé ã®äžã§å
åãããŠèŠç©ããããæ¹ã§ãããZOZOMOã§ã¯DDDãCQRSãæ¡çšããŠãããããããã¯ã³ãŒãããŒã¹ãé ã®äžã§èµ°ããã圢ã«ãªããŸããäŸãã°ãQueryåŽã®StoreéçŽã®Usecaseã§ããŒã¿ãæŽåœ¢ããŠãInfraå±€ã«åºèéçŽãUpsertããã¯ãšãªãæžããŠãUnitTestãšE2EãæžããŠâŠããšãã£ãã€ã¡ãŒãžã§ããèŠç©ããã¯ãæ°åã®åœãŠã£ããã§ã¯ãªãããã®å·¥çšãã©ãã ãæ£ç¢ºã«é ã®äžã§èµ°ãããããããªã®ã ãšçè§£ããŸããããããŠããã®æ³ååãæ¯ããŠããã®ã¯ãéå»ã®å®è£
ãç©ã¿éããŠããçµéšã«ã»ããªããŸããã§ããã Acceptance Criteriaã§ãå®è£
ã®èªç±åºŠããå¶åŸ¡ãã æ³ååãšçµéšãããçšåºŠèº«ã«ã€ããç¶æ
ã§ãããèŠæš¡ãæ£ç¢ºã«èŠç©ãããèŠä»¶ãæºããããã«èããã¹ãéèŠãªææšãããããšã«æ°ã¥ããã®ã¯ã1幎çµã£ãŠããã§ãããããã Acceptance CriteriaïŒåãå
¥ãåºæºã以äžACïŒã®è§£å床 ã§ãã ACãšã¯ããã®æ©èœãã宿ããããšå€æããããã®æ¡ä»¶ãå
·äœçã«èšèªåãããã®ã§ããéèŠãªã®ã¯ãACã®ç²åºŠãå®è£
ã®èªç±åºŠãã³ã³ãããŒã«ãããšããããšã§ããã 象城çã ã£ãã®ãããã©ã³ãæ§ãšåºèã®çŽä»ããé€å€ããèšå®ã確èªããæ©èœã®å®è£
ã§ããããã¯ãªãã¡ã€ã³ã¡ã³ãã®çµæããã©ã³ãæ§ããšã«æ€çŽ¢ãã§ããçµã蟌ãã çµæãExcelãšããŠåºåããæ©èœã远å ããã¹ã³ãŒãã«åºãããŸãããExcelã¯ã¡ãŒã«ã§è©²åœãã©ã³ãæ§ã«éããåºèãšãã©ã³ãæ§ã®çŽä»ããæ£ãããã確èªããŠãããããã§ãã ãã®ãšãã®ACã®äžäŸã¯ããæ€çŽ¢åŸãExcelåºåãã¿ã³ãå®è¡ããã¿ã€ãã³ã°ã§ãããã¢ããã衚瀺ãããçµã蟌ã¿ããåºèã®å±ãããã©ã³ãäžèЧããããã¢ããã«è¡šç€ºãããããšããšå®çŸ©ããŸããã ãã®ACã¯ãèªç±åºŠã®å¶éã®ä»æ¹ãçµ¶åŠã§ãããæ€çŽ¢ã®ã¯ãšãªãæ€çŽ¢ããžãã¯ãExcelçæã®æ¹æ³ãã®ãã®ã«ã¯å¶éãããã£ãŠããŸãããããè¯ãå®è£
æ¹æ³ãããã°å®è£
æã«æ¹åã§ããäœå°ãæ®ãããŠããŸããäžæ¹ã§ãåºåæã«ãããã¢ããã§å¯Ÿè±¡ããŒã¿ãäžèŠ§è¡šç€ºãããšããæçµçãªäœéšã®éšåã¯æç¢ºã«åºå®ãããŠããŸããããã¯è€æ°ãã©ã³ããæå®ããŠæ€çŽ¢ã§ãã仿§äžãéçšè
ããã©ã®ãã©ã³ãæ§ã®ExcelãéãããšããŠãããã ã£ãïŒããå®è¡çŽåã«èŠèŠçã«ç¢ºèªã§ããç¶æ
ãä¿ã€ããšã§ããã¥ãŒãã³ãšã©ãŒãæããããã§ãã ACããå®è£
ã®çްéšãŸã§ã¬ãã¬ãã«åºå®ããææžãã«ãªã£ãŠãããšãéçºè
ã¯å·¥å€«ã®äœå°ã倱ããŸããéã«ACãææ§ããããšãå®è£
äžã«å€æãè¿«ãããåæ°ãå¢ããèŠæš¡ã倧ãããã¬ãŸããACã¯ãèããŠããéšåãšèããªããŠããéšåãæç¢ºã«åãåããå®è£
ã®èªç±åºŠãæå³çã«ã³ã³ãããŒã«ããããã®è£
眮ãªã®ã ãšããã®å®è£
ãéããŠçè§£ããŸããã èŠç©ãã粟床ã¯ACå®çŸ©ã®è§£å床ã®åé¡ã«éçŽããã ACã®ç²åºŠããã®åœ¢ã§ã³ã³ãããŒã«ã§ããŠãããããå®è£
äžã«æéããããŠèããéšåãšãèããã«åéãé²ããŠããéšåã®åãåããæç¢ºã§ãããçµæãšããŠãèŠç©ãã£ãèŠæš¡ãšèŠä»¶ã®äž¡æ¹ããããçšåºŠã®ç¢ºåºŠã§åæã«å®ããæ§é ã«ãªããŸãã èŠæš¡ãã®ãã®ãæ£ç¢ºã«åœãŠã«è¡ãã®ã§ã¯ãªããACã®ç²åºŠãã³ã³ãããŒã«ããŠå®è£
äžã®å€æåæ°ãå¶åŸ¡ããŸãããã©ã³ãã³ã°ã1幎ç¶ããæ«ã«èšèªåã§ããã®ã¯ããèŠç©ãã粟床ã®åé¡ã¯ããã®æåã®ACå®çŸ©ã®æœè±¡åºŠã«éçŽãããããšããç¥èŠã§ããã æ°åãåºãããšèªäœã«æèãåããŠãã1幎åã®èªåãããä»ã¯ãACã§å®è£
ã®èªç±åºŠãå¶åŸ¡ããããšã§ãèŠæš¡ãšèŠä»¶ã®äž¡ç«ãçããããšã«æèãåããããã«ãªããŸããããã©ã³ãã³ã°ã®å Žã®æãæ¹ããã®ããã«å€ãã£ãããšãããã®1幎ã§èµ·ããæã倧ããªå€åã®1ã€ã§ããACã®ç²åºŠãæå³çã«èª¿æŽãããšããèãæ¹ããç§ã®ãªãã«å®çããæèã®åã®ã²ãšã€ã§ãã 3. ã¢ãããã°ã©ãã³ã°ïŒãäºå®ããŒã¹ã§å®è£
ããããšããå§¿å¢ã身ã«ã€ãã ãªãã¡ã€ã³ã¡ã³ããšãã©ã³ãã³ã°ãçµãŠãããããå®è£
ãã§ãŒãºã§ããç§ã®ããŒã ã§ã¯å®è£
ã®å€ããã¢ãããã°ã©ãã³ã°ã§é²ããŸããè€æ°äººãåãç»é¢ãèŠãªãããããã²ãŒã¿ãŒåœ¹ãšãã©ã€ããŒåœ¹ã亀代ãã€ã€ã³ãŒããæžããŠãã圢åŒã§ãã ã¢ãããããåŠãã ããšã¯æ°å€ããããŸãããä»ã®èªåã«æã倧ãã圱é¿ããŠããã®ã¯ã äºå®ããŒã¹ã§å®è£
ãã ããšããå§¿å¢ã§ãã å
茩ã¯äºå®ããæ¹éãæ±ºããŠãã ãªãã¡ã€ã³ã¡ã³ãããã©ã³ãã³ã°ã§èŠä»¶ãã©ãã ãè©°ããŠããå®è£
段éã§ãèæ
®ããããŠããªãã£ãããšãã¯å¿
ãåºãŠããŸãããšãã«ãã€ã¯ããµãŒãã¹éã§ããŒã¿ã飿ºããŠããç®æã§ã¯ãå€éšèŠå ã絡ãã§æåãèªã¿ã«ãããªããŸãã ZOZOMOã§ããä»ã®ãã€ã¯ããµãŒãã¹ãšã€ãã³ããéããããŒã¿é£æºãããŠããŸããããããããŸããŸãªèŠå ã«ããã€ãã³ãã®é£æºé åºãå
¥ãæ¿ãããæ¬æ¥é£æºãããã¹ãããŒã¿ãæ£ããå±ããããªãã±ãŒã¹ããããŸããããã®åé¡ã«å¯ŸåŠããä»çµã¿ãå®è£
ããéãã¢ãããã§å
茩ã®ã¢ãããŒããéè¿ã§èŠãã®ãå°è±¡çã§ããã å
茩ã¯ãŸããå
¥ãæ¿ãããèµ·ããããŒã¿ãå
šä»¶åºããŠãããšããããå§ããŸãããäžéšã§ã¯ãªãå
šäœã䞊ã¹ãŠå
±éé
ãæ¢ããšãã©ã®çµè·¯ã®ãã©ã®ã¿ã€ãã³ã°ã§å
¥ãæ¿ãããèµ·ããŠããã®ããšããäºå®ãæµ®ãã³äžãã£ãŠããŸãã ããããå
茩ãèŠåºããã®ã¯ãZOZOMOåŽã®éçºåºç€ã«ããŒã¿ã飿ºãããç®æã§ãå
¥ãæ¿ãããã®ãã®ãçŽããšããæ ¹æ¬çãªè§£æ±ºçã§ãããå
šä»¶ã®ããŒã¿ãšããäºå®ããåºçºããããããèŠã€ãããã解決çã§ãã ãäºå®ããå§ããããšããåãåŠãã ãã®ããæ¹ã®äœããããããšãããšã å®è£
ã®åã«ãäœã解決ãã¹ããªã®ãããäºå®ãšããŠæããã«ãªã£ãŠãã ããšã§ããäºå®ããå§ããã°ããã®å
·äœçãªã±ãŒã¹ãçŽãã«ã¯äœãå¿
èŠãããšããæç¢ºãªç®çãæå
ã«ãããŸããçµæãšããŠãäžèŠãªåŠçãæ··ããããã·ã³ãã«ã§ããžãã¹äŸ¡å€ã®é«ãå®è£
ã«ãã©ãçãããããªããŸãã ãã®ãšãèªåãäœããåŠãã ã®ã¯ãããšããããåãããŠã¿ããã®ã§ã¯ãªããæå
ã®äºå®ããã£ããéããŠããèšèšã«å
¥ããšããå§¿å¢ã§ãããæ°å1幎ç®ã§èº«ã«ã€ããäžã§ããå®è£
ã«åããåã®å¿æ§ããšããŠç¹ã«åœ¹ç«ã£ãŠããåã§ãã äºå®ããŒã¹ã§å€æãããšããå§¿å¢ããã¢ããããéããŠèªåã®ãªãã«æ®ã£ãæèã®åã®ã²ãšã€ã§ãã AIæä»£ã«ãæèã®åã¯ã©ã掻ããã ãã®1幎ã¯çæAIã®æ®åã«ãã£ãŠãæ
å ±ãç¥ã£ãŠããããšãèªäœã®äŸ¡å€ãäžæ°ã«äžãã£ã幎ã§ããããŸãããããã¥ã¡ã³ããèªã¿èŸŒãã仿§ãèŠããããšã©ãŒæãæ€çŽ¢ãããããããè¥æãšã³ãžãã¢ã®ä»äºã®äžéšã ã£ãäœæ¥ã®å€ãããAIããã£ãšããéã«è©ä»£ããããæä»£ã§ãã ã ããããããããŸã§ç޹ä»ããŠãããæèã®åãã®äŸ¡å€ãã以åããäžæ®µã¯ã£ããèŠããŠããæ°ãããŠããŸããACãAIã«æžãããããšããå®è£
æ¹éãAIã«ææ¡ãããããšãã§ããŸãããããåºãŠããåºåãæ£ããæ¹åã«åãã£ãŠããããè©äŸ¡ããè»éä¿®æ£ã®æç€ºãåºãã«ã¯ãèªåã®äžã«å€æã®ç©å·®ããå¿
èŠã§ãã æèã®åãèªåã®èšèã§æã£ãŠããã°ãããã¯ãã®ãŸãŸAIãžã®çç¢ºãªæç€ºã«å€ãããŸããããšãã°ã3ã€ã®åŠã³ã¯ããããæ¬¡ã®ãããªæç€ºã«ã€ãªãããŸãã ãªãã¡ã€ã³ã¡ã³ãã§èº«ã«ã€ãããããã¯äœã解決ããæ©èœãããšããåãã¯ãããã®æ©èœã®ç®çã¯ããã ãããããã«æ²¿ã£ãå®è£
æ¡ãåºããŠããšããæç€ºã«ãªã ãã©ã³ãã³ã°ã§èº«ã«ã€ãããACã§èªç±åºŠãå¶åŸ¡ãããæèã¯ããå®è£
ææ®µã¯ä»»ããããæçµçãªäœéšã¯ããåºå®ãããããšããæç€ºã«ãªã ã¢ãããã§èº«ã«ã€ãããäºå®ããŒã¹ã§å€æãããå§¿å¢ã¯ããæšæž¬ã§é²ããããŸã該åœããŒã¿ãå
šä»¶åºããŠããæ¹éãæ±ºããŠããšããæç€ºã«ãªã AIã«äœãåãããããã®çããã©ãè©äŸ¡ããã©ãã§æææ±ºå®ãããããã®äžé£ã®å€æã¯ãæèã®åãèªåã®è¶³å ŽãšããŠæã£ãŠãã人éã«ããã§ããªããšæããŸãã ãããã« 1å¹Žãæ¯ãè¿ã£ãŠãã¹ã¯ã©ã ã¯æ°åã«ãšã£ãŠ å
èŒ©ã®æèã®åãæéã§åŠã¹ãè£
眮 ãšããŠæ©èœããŸããããªãã¡ã€ã³ã¡ã³ãã§åãã®ç«ãŠæ¹ãåŠã³ããã©ã³ãã³ã°ã§ACã®è§£å床ãäžããæèŠãæŽã¿ãã¢ãããã°ã©ãã³ã°ã§äºå®ããŒã¹ã®å®è£
ã®é²ãæ¹ã身ã«ã€ããŸãããäžã€ã²ãšã€ã¯æè¡æžãèªãã§ã身ã«ã€ããããªã¢ã«ã¿ã€ã ã®èгå¯ãšè³ªåãªãã«ã¯æã«å
¥ããªããã®ã§ããã ã¹ã¯ã©ã ã¯ãã¢ãžã£ã€ã«ã«éçºããããã®ãã¬ãŒã ã¯ãŒã¯ããšããŠèªãããããšãå€ãã§ãããããæ°åãšããŠé
å±ãããèªåã®èŠç¹ããã¯ãå
茩ãã¡ã®æèã«ã¢ã¯ã»ã¹ããé »åºŠãæå€§åããä»çµã¿ã§ããããã€AIæä»£ã«äŸ¡å€ãæã¡ç¶ããèœåãéäžçã«è²ãŠãä»çµã¿ã§ããããŸããã ããããé
å±ãè¿ããæ°åãšã³ãžãã¢ã®æ¹ã«ã¯ãé
å±å
ã®ããŒã ãã¹ã¯ã©ã ã§åããŠãããªãããããããã ã®éçºææ³ããšã¯æããã«æèãçã1幎ã«ããŠã»ãããšäŒãããã§ããæè¡ç¥èãåžåããå ŽãšããŠã ãã§ãªããæèã®åãã³ããŒããå ŽãšããŠåãåããšãåŸããããã®ã®å¯åºŠã倧ããå€ãããŸãã æ°ååãå
¥ããæ
ãéçºçµç¹ã®æ¹ã«ã¯ãã¹ã¯ã©ã ãçç£æ§ã®æèã ãã§è©äŸ¡ãããæ°èŠã¡ã³ããŒã®åŠç¿è£
眮ãšããŠã®åŽé¢ã«ãç®ãåããŠãããããšå¬ããã§ããå
èŒ©ã®æèã«é«é »åºŠã§è§Šããããå Žãçµç¹ã«ãããã©ããã¯ã人æã®ç«ã¡äžããã¹ããŒãã«å€§ããªå·®ãçãã¯ãã§ãã èªåèªèº«ã¯ããŸã ã¹ã¯ã©ã ããåŠã¹ãããšã®å
¥å£ã«ç«ã£ããšããã ãšæã£ãŠããŸãã2幎ç®ä»¥éã¯ã芳å¯ããåŽã ãã§ãªããèªåã®æèã®åãä»ã®ã¡ã³ããŒã«èŠããŠããåŽã«ãåã£ãŠããããã§ãã ZOZOã§ã¯ãäžç·ã«ãµãŒãã¹ãäœãäžããŠãããæ¹ãåéäžã§ãããèå³ã®ããæ¹ã¯ã以äžã®ãªã³ã¯ãããã²ãå¿åãã ããã corp.zozo.com
ã¯ããã« ã¯ãããŸããŠãæ ªåŒäŒç€Ÿã¿ããã«ã§ãµãŒããŒãµã€ããšã³ãžãã¢ãããŠãã糞äºäžé¢¯( Issa ) ...
















