- TOP
- ã¿ã°äžèЧ
- Blender
Blender
ã€ãã³ã
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
ãã¬ãžã³
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
æè¡ããã°
ããã«ã¡ã¯ããµã€ãªã¹ãã¯ãããžãŒã®ã²ãã§ãã å
æ¥OSCçŠå²¡ãOSCåºå³¶ã§ã»ãããŒç»å£ããŠããŸããã ä»åã¯ç»å£å
容ã«ã€ããŠãŸãšããŠãããããšæããŸãã çæAIã®æŠèŠãçè§£ã§ãã çæAIÃããŒã«ã§æ°ããªäŸ¡å€ãçã¿åºããããšãçè§£ã§ãã ãã®2ç¹ãç®çãšããŠä»¥äžã®ããšã«ã€ããŠã話ããŠããŸããã çæAIã«ã§ããããšã§ããªãããš çæAIã«ããŒã«ã䜿ãããæè¡ã«ã€ã㊠çæAIã«ãããããæäœãããã㢠ã»ãããŒã«äœ¿çšããè³æã亀ãã€ã€ã»ãããŒå
容ã«ã€ããŠè§£èª¬ããŠãããŸãã çæAIã£ãŠãªã«ïŒ çæAIãšã¯ã³ã³ãã³ããæ°ãã«çã¿åºããŠãããAIã®ããšãæããŸãã ãŠãŒã¶ãããã³ãããå
¥åããããšã§çæAIã¯æç« ãç»åãåç»ã鳿¥œãé³å£°çãåºåããŠãããŸãã äŸãšããŠã¯ãããã¹ãçæã§ããã° Gemini 3.0 GPT-5 Claude Sonnet 4.5 çããããŸããã ãŸããããã¹ãçæã«çŠç¹ãããŠãŠãLLMãæç« ãçæããéçšã«ã€ããŠèª¬æããŸããã ããã¹ãçæãè¡ãLLM(å€§èŠæš¡èšèªã¢ãã«)ã¯èšå€§ãªããã¹ãããŒã¿ããèšèªã®ãã¿ãŒã³ãåŠç¿ãããã®ã§ãæèããæ¬¡ã«æ¥ã確çãé«ãèšèãäºæž¬ãããªã¹ãã¢ãããããèšèã®äžããã©ã³ãã ã«åèªãéžæããããšãç¹°ãè¿ããŠæç« ãçæããŸãã äŸãã°ã仿¥ã¯ããæ¥ã ãããšããæç« ãçæããéçšãèããŠã¿ãŸãã 以äžã®å³ã®ããã«ããŸããã仿¥ã¯ãã®æ¬¡ã«æ¥ãå¯èœæ§ãé«ãèšèãšããŠããããããã倩æ°ãããå¯ããããªã¹ãã¢ããããããã®äžãã確çã§éžæãããŸããä»åã¯ãããããéžæãããŠããŸããããã®æäœãç¹°ãè¿ããŸãã ããã§äžç¹éèŠãªã®ã¯çæAIã¯æã確çãé«ãèšèãéžæããããã§ã¯ãªããšããç¹ã§ãã 詊ãã«åãããã³ãããäœåºŠãçæAIã«æããŠããã ãããšç°ãªãã¬ã¹ãã³ã¹ãæ¥ããšæããŸãã®ã§ããã®ä»çµã¿ã宿ã§ãããšæããŸãã LLMã¯èšèãçè§£ããŠããã®ã§ã¯ãªãããã¿ãŒã³ãç¥ã£ãŠããããã®ãã¿ãŒã³ã«å£ã£ãŠèšèãé£ããŠãããšããããšã«ãªããŸãããã¡ãã«ã€ããŠã¯ãæ°žç°ããã®èšäºã AIã¯ã1+1ã£ãŠã2ã«ãªãããšå€ããªãããšæã£ãŠããïŒïŒ ãã§LLMå
éšã§èµ·ãã£ãŠããããšã«ã€ããŠè§£èª¬ãããŠãã®ã§æ°ã«ãªã£ãæ¹ã¯æ¯éã芧ãã ããã æ¬¡ã«ãçæAIã¢ãã«ã§ã§ããããšã§ããªãããšãåãåããããã«ããŸãLLMã¢ãã«ãšçæAIãµãŒãã¹ã®éãã®èª¬æãè¡ããŸããã LLMãšçæAIãµãŒãã¹ãäžäœã©ãéãã®ããšãããšãæ©èœãç°ãªããŸãã LLM çæAIãµãŒãã¹ æ©èœ æç« ã®çæ LLMã®æ©èœïŒå±¥æŽä¿æãwebæ€çŽ¢ããã¡ã€ã«ã¢ããããŒã,etc äŸ GPT-5ç ChatGPT,Geminiç çæAIãµãŒãã¹ã«ã¯LLMã®æ©èœã«å ããŠæ§ã
ãªæ©èœã远å ãããŠããŸãã äŸãã°è¡šã«ããããã«å±¥æŽä¿ææ©èœãããããããšãããŸã§ã®äŒè©±ã®æèãçæAIãçè§£ããŠãããã®ã§ãã£ããäŒè©±ãæãç«ã¡ãŸããã webæ€çŽ¢æ©èœãæè¿ã®çæAIãµãŒãã¹ã¯æ€çŽ¢æ©èœãæã£ãŠãããçæAIã«ãªã¢ã«ã¿ã€ã ã®åºæ¥äºãåçãããããšãã§ããŸããäŸãã°ä»æ¥ã®å€©æ°çãGeminiã«èããŠã¿ããšæ€çŽ¢çµæããåçããŠãããŸãã ChatGPTãGeminiçã®çæAIãµãŒãã¹ã¯çŽç²ãªLLMãšã¯ç°ãªãæ©èœãæã£ãŠãããšããããšã§ãã ãããŠãçæAIã¢ãã«åäœã§ã§ããããšãšã§ããªãããšãæãããšä»¥äžã®ããã«ãªããŸãã LLMåäœã§ã§ããªãããšã«ã€ããŠè§£èª¬ããŠãããŸãã ææ°ã®æ
å ±ã«é¢ããåç LLMã¢ãã«ã¯ãªã¢ã«ã¿ã€ã ã§åŠç¿ãç¥èãæŽæ°ããä»çµã¿ã¯ãªããç¥èã®ã«ãããªãæ¥ãååšããŸãã ã«ãããªãæ¥ãšã¯ãLLMãåŠç¿ããããŒã¿ããã€ãŸã§ã®ããŒã¿ããæããLLMã¯ãã®æ¥ãŸã§ã®ããŒã¿ããç¥ãåŸãŸããã ãã®ãããäŸãã°ä»æ¥ã®å€©æ°ãèããŠãåŠç¿ããŠããªãã®ã§åçããããšãã§ããŸããã 詊ãã«GPT-4o-miniã«å¯Ÿããã«ãããªãæ¥ã«ã€ããŠå°ããŠã¿ãŸããã ç§ã®ç¥èã®ã«ãããªãæ¥ã¯2023幎10æã§ãããã以éã®æ
å ±ã«ã€ããŠã¯æã£ãŠããŸããã®ã§ããäºæ¿ãã ãããäœã質åãããã°ãçãããŸãïŒ ãã®LLMã¯2023幎10æãŸã§ã®ããšããç¥ããªããšããããã§ããã 詊ãã«ã2025幎ã¯äœãæµè¡ããããèããŠã¿ãŠãã ããããšå°ããŠã¿ãŸããã 2025å¹Žã«æµè¡ããããªãã¬ã³ãã«ã€ããŠãçŸåšã®æè¡ã瀟äŒã®ååãèæ
®ããäžã§ããã€ãã®äºæž¬ãæããŠã¿ãŸãã æç¶å¯èœãªã©ã€ãã¹ã¿ã€ã«: ç°å¢æèã®é«ãŸãã«äŒŽãããšã³ãã¬ã³ããªãŒãªè£œåããµãŒãã¹ããµã¹ãããã«ãªãã¡ãã·ã§ã³ãæµè¡ããå¯èœæ§ããããŸãããã©ã¹ããã¯ã®åæžããªãµã€ã¯ã«è£œåã®äººæ°ãé«ãŸãã§ãããã ãŠã§ã¢ã©ãã«ãã¯ãããžãŒ: å¥åº·ç®¡çããã£ãããã¹ã®ããã®ãŠã§ã¢ã©ãã«ããã€ã¹ãé²åãããã倿©èœã§äœ¿ãããããªãããšã§ãäžè¬çãªã¢ã€ãã ãšããŠæ®åãããããããŸããã ã¡ã¿ããŒã¹ãšããŒãã£ã«äœéš: ã¡ã¿ããŒã¹é¢é£ã®ãã©ãããã©ãŒã ãé²åããä»®æ³ç©ºéã§ã®ãœãŒã·ã£ã«ã€ã³ã¿ã©ã¯ã·ã§ã³ããšã³ã¿ãŒãã€ã³ã¡ã³ããäžè¬çã«ãªãå¯èœæ§ããããŸããç¹ã«ãã²ãŒã ãä»®æ³ã€ãã³ãã人æ°ãéããã§ãããã ããžã¿ã«ã¢ãŒããšNFT: ããžã¿ã«ã¢ãŒããNFTïŒéä»£æ¿æ§ããŒã¯ã³ïŒãåŒãç¶ã泚ç®ãããã¢ãŒãåžå Žããšã³ã¿ãŒãã€ã³ã¡ã³ãæ¥çã§æ°ãã圢ã®ã¯ãªãšã€ã·ã§ã³ãæµè¡ãããããããŸããã ããŒãœãã©ã€ãºãããå»çãšå¥åº·: åå¥åå»çãéºäŒåããŒã¹ã®å¥åº·ç®¡çãé²å±ããèªåã«æé©ãªå¥åº·æ³ãé£äºãææ¡ãããããšã§ãå¥åº·å¿åã®ã©ã€ãã¹ã¿ã€ã«ãæµè¡ããå¯èœæ§ããããŸãã ãªã¢ãŒãã¯ãŒã¯ãšãã¬ãã·ãã«ãªåãæ¹: ãªã¢ãŒãã¯ãŒã¯ããã€ããªãããªåãæ¹ãäžè¬åããè·å Žç°å¢ãåãæ¹ã«é¢ããæ°ãããã¬ã³ãã圢æãããã§ããããããã«ãããã¯ãŒã¯ã©ã€ããã©ã³ã¹ãéèŠããæåãåºããå¯èœæ§ããããŸãã ãšã³ã¿ãŒãã€ã³ã¡ã³ãã®æ°åœ¢æ
: ã¹ããªãŒãã³ã°ãµãŒãã¹ãããããã£ã¹ããããŒãã£ã«ã³ã³ãµãŒããªã©ãããžã¿ã«ã³ã³ãã³ãã®æ¶è²»ã¹ã¿ã€ã«ãé²åããæ°ãããšã³ã¿ãŒãã€ã³ã¡ã³ãã®åœ¢ãæµè¡ãããããããŸããã ãããã¯ãããŸã§äºæž¬ã§ãããå®éã«äœãæµè¡ãããã¯æ§ã
ãªèŠå ã«ãã£ãŠå€ããã§ããããæªæ¥ã®ãã¬ã³ãã¯åžžã«å€åãç¶ãããããæè»ãªèŠç¹ã§èŠãããšãéèŠã§ãã ãã2026幎ã§ãã2025å¹Žã®æµè¡ãäºæ³ããŠããããŸããã ããã£ãŠãããã¯ããŠããããã®ããã«ã«ãããªãæ¥ä»¥éã®ããšã¯ç¥ããªããã§ãããã ããããæéãçµã£ãŠã幎霢ãéããããã«ãã®ã¢ãã«ãšäŒè©±ã§ãããæãããæ°åã«ãªãããããããŸããã ç¬èªã®æ
å ±ã«é¢ããåç LLMã¯ãã¡ããåŠç¿ããããšããç¥ããŸããã ãã®ãããäŸãã°äŒç€Ÿã®ç€Ÿå
èŠçŽçã®ã¯ããŒãºããªæ
å ±ã«ã€ããŠèããŠãåçããããšãã§ããŸããã æ
å ±ã®æ£ç¢ºæ§ã®ä¿èšŒ LLMã«ã¯ãã«ã·ããŒã·ã§ã³ãšãããããããçå®ãèªãããã«çã£èµ€ãªåãåãããšããããŸãã LLMãæç« ãçæããéçšã§ãã話ããŸããããLLMã¯ã確çã§åèªãéžã³ããããç¹°ãè¿ããŠæç« ãäœæããã®ã§ãæ£ããããšä»¥å€ãåºåããŸãã LLMãæ¬åœã«æ£ããããšãèšã£ãŠããã®ãã人éã確èªããå¿
èŠããããŸãã è€éãªèšç® äœãèšç®ããŠãšLLMã«å
¥åãããšããŠãLLMã¯å®éã«èšç®ããŠããããã§ã¯ãªããåŠç¿ãã¿ãŒã³ã«åºã¥ããŠæ¬¡æ¥ãåèªãçæããŠãããããè€éãªèšç®ã¯ééããããšããããŸãã AIã¯èšç®ãçè§£ããŠããããã§ã¯ãªãã ã1+1ã£ãŠã2ã«ãªãããšå€ããªãããšæã£ãŠãã ãšããããšã§ããã çŸå®äžçãããžã¿ã«ç°å¢ã®æäœ LLMã¯ããã¹ããçæããã®ã¿ã§ãäŸãã°éšå±ã®é»æ°ã¯æ¶ããŠãããŸããããnotionã§ããã¥ã¡ã³ããäœæããŠãããããšã¯ãããŸããã ãã®ããã«çæAIã«ã¯ã§ããªãããšããããŸãããããã¯ããŒã«ãšçµã¿åãããããšã§è§£æ¶ã§ããå ŽåããããŸãã çæAIÃããŒã« çæAIãšããŒã«ãçµã¿åãããããšã§å€ãã®ããšãã§ããããã«ãªããŸãã ã»ãããŒã§ã¯ãRAGãFunctionCallingãMCPã«ã€ããŠã玹ä»ããŸããã RAG RAGã¯Retrieval Augmented GenerationãšåŒã°ããæ€çŽ¢æ¡åŒµçæçãšèš³ãããæè¡ã§ãã çæAIÃæ€çŽ¢ããŒã«ã§ããã çæAIãæ€çŽ¢ããŒã«ã䜿çšããŠããŒã¿ãæ€çŽ¢ããååŸããããŒã¿ãåºã«åçãè¡ããŸãã RAGãæŽ»çšããããšã§ãçæAIã¯ãªã¢ã«ã¿ã€ã ã®æ
å ±ãåŠç¿ããŠããªãç¬èªã®æ
å ±ãæã«å
¥ããããšãã§ããŸãã ãŸããæ
å ±æºãæç¢ºã«ãªããããæ ¹æ ã®ããåçãããŠãããŸãããæ ¹æ ããŠãŒã¶ã確èªããããšãã§ããããã«ãªããŸãã åç« ã§æããçæAIã«ã§ããªãããšã®ãã¡ä»¥äžã®é
ç®ã«ã€ããŠã¯è§£æ¶ã§ããããšæã£ãŠããã ããã®ã§ã¯ãªãã§ããããã ææ°ã®æ
å ±ã«é¢ããåç ç¬èªã®æ
å ±ã«é¢ããåç æ
å ±ã®æ£ç¢ºæ§ã®ä¿èšŒ Function Calling 次ã«FunctionCallingã§ãã FunctionCallingã¯çæAIã«é¢æ°ãåŒã³åºãããæ©èœã§ãã 颿°ã®å®è¡ã¯ã¢ããªã±ãŒã·ã§ã³åŽã§è¡ãããçæAIã®ã¬ã¹ãã³ã¹ã翻蚳ããéšåã¯å®è£
ããå¿
èŠããããŸãããçæAIãã©ã®é¢æ°ãã©ããªåŒæ°ã§å®è¡ããã®ã倿ããŠãããŸãã äŸãã°æ€çŽ¢ãèšç®ãå€éšAPIã®äœ¿çšãIoT飿ºçãæ§ã
ãªæ©èœãçæAIãšçµã¿åãããããšãå¯èœã§ãã è€éãªèšç®ãã§ãã颿°ãçšæããŠããã°ãçæAIãèŠæãªèšç®ã ã颿°ã«ãããããšãã§ããŸããããããããåäœããã颿°ãªããŠã®ãäœæããŠããã°ãçæAIã«ãããããæäœãããããšãã§ãããšããããã§ããã çµã¿åããæ¬¡ç¬¬ã§åŒ·åãªãã®ãçãŸããããªæ°ãããŸãã Azure OpenAIã§FunctionCallingãè¡ãæ¹æ³ã«ã€ããŠã¯ ãã¡ã ã®ããã°èšäºã§è§£èª¬ããŠãŸãã®ã§èå³ãããæ¹ã¯ãã²ã芧ãã ããã MCP MCPã¯Anthropic瀟ãæå±ãããçæAIãšããŒã«ãç¹ãUSB-typeCã®ãããªå
±éèŠæ Œã§ãã ãããŸã§FunctionCallingãçšããLLMã¢ããªãäœæããå ŽåãããããŒã«ãå¥ã®ã¢ããªã§ã䜿çšããããšãªã£ãå Žåãã¢ããªéã®èšèªãç°ãªã£ããå¿
èŠãªã©ã€ãã©ãªãç°ãªãã°ã颿°ãæ¹ä¿®ããå¿
èŠããããŸããã ãŸããããŒã«ãªã¹ãã®å®çŸ©æ¹æ³ã¯LLMã«ãã£ãŠç°ãªããããã¢ããªã§äœ¿çšããLLMãç°ãªãã°ããã®ç¹ãæ¹ä¿®ããå¿
èŠãåºãŠããŸãã MCPã䜿çšããå ŽåãMCPã¯ã©ã€ã¢ã³ããšãããã®ãçšæããLLMã¢ããªãšå¥ããã»ã¹ã§åäœããMCPãµãŒããããŒã«ãšããŠæ±ãããã«ããŸãã ãããããšãMCPãµãŒãïŒã€äœæããã°ãã©ã®LLMã¢ããªããã䜿çšã§ããããã«ãªãã®ã§ãã¢ããªæ¯ã«é¢æ°ãæžããããããŒã«å®çŸ©ãè¡ãå¿
èŠããªããªããŸãã ãŸããMCPãµãŒããå
¬éããŠãããµãŒãã¹ã¯å¢ããŠãããäŸãã°notionãblenderãgoogleã«ã¬ã³ããŒçã®ïŒïŒ£ïŒ°ãµãŒããçµã¿èŸŒãããšã容æã§ãã å
¬éãããŠããMCPãµãŒãã«ã€ããŠã¯ ãã¡ã ãã確èªãã ããã çæAIãšããŒã«ãçµã¿åãããæè¡ã§ããRAGãFunctionCallingãMCPã«ã€ããŠè§£èª¬ãè¡ããŸããã ç¶ããŠãã¢ã®è§£èª¬ã«ç§»ããŸãã Qumcum飿º å
·äœçã«FunctionCallingã§QumcumãçæAIã«æäœããããã¢ãè¡ããŸããã Qumcumã¯Bluetoothã«ããéä¿¡ãå¯èœãªå°åããããã§ãã äž»ãªæ©èœã¯è·é¢ã»ã³ãµã鳿€ç¥ãçºå£°çããããŸãããä»å䜿çšããã®ã¯é ãè
ãè¶³ã®å転ã§ãã ãŸããLLMãšããŠAzure OpenAIã®ã¢ãã«ã䜿çšããŸããã Azure OpenAIã«ã€ããŠã¯ãããã€ããå®éã«APIãå©ããŸã§ãããã°èšäºã«ããŠããŸãã®ã§ ãã¡ã ãã確èªãã ããã ã·ãŒã±ã³ã¹å³ã¯ä»¥äžã®ããã«ãªããŸãã ãŸããããã³ããã®åæãLLMã«ãªã¯ãšã¹ãããçµæãæ§é ååºåãããŠããŸããããã¯åæçµæ(ããã³ããããèªã¿åããææ
ãããã³ããã«å¯Ÿããããããã®ææ
ãããã³ããã®èŠçŽç)ãUIãšããŠè¡šç€ºããããã«äœ¿çšããŠããŸãã æ§é åã¬ã¹ãã³ã¹ã«ã€ããŠãããã°ã«ãŸãšããŠããã®ã§ã ãã¡ãã®èšäºã ã芧ãã ããã ãã®åŸãåæçµæãšããã³ããæ¬æãLLMã«æž¡ããFunctionCallingãè¡ããŸãã 䜿çšãã颿°ãéžæããŠããããã¢ããªã±ãŒã·ã§ã³åŽã§ããããåäœé¢æ°ãå®è¡ããŠããŸãã ãã¢åç»ã¯ãã¡ãã§ãã ãã®ãã¢ã§ã¯ãå
¥åããããã³ããããFunctionCallingã«ãã£ãŠé¢æ°ãéžã³åãããŠããããšã衚ããŠããŸãã ãããããäžæ³ããã颿°ããè¶³èžã¿ãéŠæ¯ããè¡ã颿°ãéžã³åãããå®è¡ãããŠããã®ãããããŸãã ä»åŸã®å±æ å
·äœçãªå±æã§ã¯ãªãã§ãããä»åŸã§ãããããããããªãšèããŠããããšã¯ä»¥äžã®ãããªããšã§ãã ããã¹ãå
¥åããé³å£°å
¥åãžä¿®æ£ Qumcumã®çºè©±æ©èœã掻çšãããªã¢ã«ã¿ã€ã äŒè©±æ©èœå®è£
ä»ãŸã§ã®äŒè©±å
容ãèšé²ããRAGã«ãã£ãŠçžæ£ãå人ã®ãããªäŒè©±ãå¯èœã« RAGãçšããŠçæAIã®çžæ£ãäœãã¯ãã¡ããã®ããã°ã¯ ãã¡ã ãåç
§ãã ããã çæAIãšããŒã«ãçµã¿åãããããšã§ãææªæ¥ããæ¥ããã³åããããã®ãããªå人ãèªåã®æã§äœãããšãã§ãããããããŸãããã ãŸãšã çæAIÃããŒã«ã«ãã£ãŠãçæAIåäœã§ã¯ã§ããªãã£ãããšãå¯èœã«ãªããŸãã ææ°ã®æ
å ±ã«é¢ããåç ç¬èªã®æ
å ±ã«é¢ããåç çŸå®äžçãããžã¿ã«ç°å¢ã®æäœ çãå¯èœã§ãã FunctionCallingãMCPãæŽ»çšããŠæ°ããªçµã¿åããã«ããæ°ããªäŸ¡å€ãçã¿åºããŠãããŸãããã é²èЧããã ãããããšãããããŸããã ã»ãããŒã«åå ããŠãã ãã£ãçããããæž
èŽããããšãããããŸããã ããããããäŒããããã»ãããŒãä»åŸãè¡ã£ãŠãããããšæããŸãã ã芧ããã ãããããšãããããŸãïŒ ãã®æçš¿ã¯ã圹ã«ç«ã¡ãŸãããïŒ åœ¹ã«ç«ã£ã 圹ã«ç«ããªãã£ã 0人ããã®æçš¿ã¯åœ¹ã«ç«ã£ããšèšã£ãŠããŸãã The post OSCçŠå²¡ïŒåºå³¶2025ã§çæAIÃããŒã«ã«ã€ããŠã»ãããŒç»å£ããŠããŸãã first appeared on SIOS Tech Lab .
æ¬ããã°ã¯ãäžè±é»æ©æ ªåŒäŒç€Ÿ é»åã·ã¹ãã è£œäœæ é»åICTã»ã³ã¿ãŒ å°æ£®æ§ãšãã¢ããŸã³ ãŠã§ã ãµãŒãã¹ ãžã£ãã³ååäŒç€Ÿ ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ãçš²ç°ãGitLab ååäŒç€Ÿ ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ãã®å°æŸåæ§ã®å
±èã§ããäžè±é»æ© é»åICTã»ã³ã¿ãŒã«ããã Kiro ãš GitLab ãçµã¿åããããœãããŠã§ã¢éçºå¹çåã®åãçµã¿ã«ã€ããŠã玹ä»ããŸãã é»åICTã»ã³ã¿ãŒã«ã€ã㊠äžè±é»æ© é»åã·ã¹ãã è£œäœæ é»åICTã»ã³ã¿ãŒã¯ãåçå¯èœãšãã«ã®ãŒã®æ¡å€§ãé»åèªç±åã«å¯Ÿå¿ããé»åÃICTã®å°éçµç¹ã§ããé»åååŒã»é絊管çããã忣å黿º/VPPãè黿± å¶åŸ¡ãã¹ããŒãã¡ãŒã¿ãŒãèšéã»ç²Ÿç®ãç°å¢äŸ¡å€ç®¡çãã¢ã»ãããããžã¡ã³ããŸã§ãé»åäºæ¥å
šäœãã«ããŒããäž»åãœãªã¥ãŒã·ã§ã³ã BLEnDerïŒãã¬ã³ããŒïŒ ããéçºããŠããŸããBLEnDer ã軞ã«é»åã®âèŠããåâ倿âèšç»âå¶åŸ¡âãäžæ°é貫ã§å®çŸããé»åããžã¿ã«ãœãªã¥ãŒã·ã§ã³ãæäŸããé»åäŒç€Ÿæ§ãéé
é»äºæ¥è
æ§ãå°å£²é»æ°äºæ¥è
æ§ãçºé»äºæ¥è
æ§ãªã©ãå¹
åºãäºæ¥è
æ§ãæ¯ããŠããŸãã ãããŸã§ã®åãçµã¿ãšèª²é¡ é»åICTã»ã³ã¿ãŒã§ã¯ããœãããŠã§ã¢éçºã®å¹çåã«åããŠããŸããŸãªåãçµã¿ãè¡ã£ãŠããŸããã GitLab ãããŒã¹ã«ãã CI/CD ç°å¢ã®æ§ç¯ Amazon Bedrock ãæŽ»çšãã RAG ã·ã¹ãã ã®éçºïŒéçºå·¥æ°èŠç©ããã®æ¯æŽïŒ Amazon Bedrock ãæŽ»çšããèšèšæžã¬ãã¥ãŒã®å¹çå CI/CD ããŒã«ã掻çšãããã«ãã»ãã¹ãã»ãããã€äœæ¥ã®å¹çå ã¯ãŒã¯ãããŒèªååããŒã«ã掻çšããç³è«ãããŒã®èªåå ãããã®ã·ã¹ãã ãããŒã«ã¯ããããéçºå¹çåã«å¯äžããŠããŸããã å°å
¥ã»å±éæã«å
±éã®èª²é¡ ããããŸããã éçºããã·ã¹ãã ãããŒã«ã¯ãåºæ¬çã«çŽå
¥å
ã®éçºããŒã ã«éçšã»ä¿å®ãæ
ã£ãŠããã ããŸãããã®ãããå©ç𿹿³ã瀺ããããã¥ã¡ã³ããèšèšããã¥ã¡ã³ãã®äœæãå©çšãããŒã®æŽåãäžå¯æ¬ ã§ããæã«ã¯å匷äŒãéå¬ããå¿
èŠãªã¹ãã«ãç¿åŸããŠããã ãå¿
èŠããããŸãããããããæ¯åãã«ã»ããã§äŒŽèµ°æ¯æŽãè¡ãããšã¯çŸå®çã§ã¯ãªããããã¥ã¡ã³ããå匷äŒã ãã§å®è·µããŠããã ãã«ã¯éçããããšæããŠããŸããã ãããã¥ã¡ã³ããèªãŸãªããŠããAI ã«èãã°ã¯ãŒã¯ãããŒã«æ²¿ã£ãéçºãã§ããã â ãããªä»çµã¿ãå®çŸããããã«ãKiro ãš GitLab ãçµã¿åãããæ°ããã¢ãããŒãã«åãçµãã§ããŸãã Kiro ã® Steeringã»Powersã»MCP ãšã¯ æ¬é¡ã«å
¥ãåã«ãä»åã®åãçµã¿ã§æŽ»çšããŠãã Kiro ã®äž»èŠæ©èœã«ã€ããŠèª¬æããŸãã SteeringïŒãããžã§ã¯ã暪æã®ã°ã©ãŠã³ãã«ãŒã« Steering ã¯ãKiro ã®æ¯ãèãã«å¯Ÿã㊠垞ã«é©çšãããã°ã©ãŠã³ãã«ãŒã« ãå®çŸ©ããä»çµã¿ã§ãããããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã« .kiro/steering/ ãã£ã¬ã¯ããªãäœæããããŒã¯ããŠã³ãã¡ã€ã«ã§ã«ãŒã«ãèšè¿°ããŸãã .kiro/ âââ steering/ âââ coding-standards.md # ã³ãŒãã£ã³ã°èŠçŽ âââ language.md # èšèªèšå®ïŒæ¥æ¬èªã§åçããçïŒ âââ security.md # ã»ãã¥ãªãã£ããªã·ãŒ Steering ã«èšè¿°ããã«ãŒã«ã¯ã ã©ã® Power ãçºåããŠãããã«é¢ãããåžžã« Kiro ã®ã³ã³ããã¹ãã«èªã¿èŸŒãŸããŸã ããã®ããããæ¥æ¬èªã§åçããããšããæ©å¯æ
å ±ãã³ãŒãã«å«ããªãããšããšãã£ãããããžã§ã¯ãå
šäœã§äžè²«ããŠå®ãã¹ãã«ãŒã«ã®å®çŸ©ã«é©ããŠããŸãã é»åICTã»ã³ã¿ãŒã§ã¯ããããžã§ã¯ãåºæã§ã¯ãªãå
±éã®ã°ã©ãŠã³ãã«ãŒã«ïŒèšèªèšå®ãã³ãŒãã£ã³ã°èŠçŽã®åºæ¬æ¹éãªã©ïŒã Steering ã§ç®¡çããŠããŸãã PowersïŒåçã«åŒã³åºãããã¯ãŒã¯ãããŒå®çŸ© Powers ã¯ãSteering ãšã¯ç°ãªãã ãŠãŒã¶ãŒã®çºè©±å
容ã«å¿ããŠåçã«åŒã³åºããã ã«ãŒã«å®çŸ©ã®ä»çµã¿ã§ããPower 㯠POWER.md ãšããã¡ã¿ããŒã¿ãã¡ã€ã«ãšã steering/ ãã£ã¬ã¯ããªé
äžã®ã¹ãã¢ãªã³ã°ãã¡ã€ã«çŸ€ã§æ§æãããŸãã .kiro/powers/ âââ my-power/ âââ POWER.md # Power ã®ã¡ã¿ããŒã¿ïŒname, description, keywordsïŒ âââ mcp.json # ãã® Power å°çšã® MCP ãµãŒããŒèšå®ïŒä»»æïŒ âââ steering/ âââ guide-a.md # ã¹ãã¢ãªã³ã°ãã¡ã€ã« A âââ guide-b.md # ã¹ãã¢ãªã³ã°ãã¡ã€ã« B POWER.md ã® frontmatter ã«ã¯ keywords ãå®çŸ©ã§ãããŠãŒã¶ãŒã®çºè©±ã«ãããã®ããŒã¯ãŒããå«ãŸãããšããã® Power ãåçã«çºåããŸãã --- name: "standard-dev-flow" displayName: "Standard Dev Flow" description: "GitLab ã䜿çšããéçºã¯ãŒã¯ãããŒãæšæºåãã Power" keywords: ["ã€ã·ã¥ãŒ", "ãã©ã³ã", "ã³ããã", "MR", "ããŒãžãªã¯ãšã¹ã", "ã¬ãã¥ãŒ", "ãã€ãã©ã€ã³", "å®è£
"] --- Steering ãšã®äœ¿ãåãã®ãã€ã³ã ã¯ãã³ã³ããã¹ããŠã£ã³ããŠã®å¹çã§ããSteering ã¯åžžã«èªã¿èŸŒãŸããããã倧éã®ã«ãŒã«ãå®çŸ©ãããšã³ã³ããã¹ããå§è¿«ããŸããäžæ¹ãPowers ã¯å¿
èŠãªãšãã ãåçã«èªã¿èŸŒãŸãããããã¯ãŒã¯ãããŒåºæã®è©³çްãªã«ãŒã«ïŒæ°åè¡ã«åã¶ã¬ã€ãã©ã€ã³ãªã©ïŒãå®çŸ©ããŠããé¢ä¿ãªãã¿ã¹ã¯ã®éã«ã¯ã³ã³ããã¹ããæ¶è²»ããŸããã é»åICTã»ã³ã¿ãŒã§ã¯ IDE ã§ã®å©çšãå€ããIDE äžã§ Power ãåçã«åŒã³åºãããŠããããšãèŠèŠçã«ç¢ºèªã§ããç¹ã«å®å¿æãæããŠããŸãããã㟠Kiro ãã©ã®ã«ãŒã«ã«åŸã£ãŠåããŠãããããèŠããããšã§ãAI ã®æ¯ãèããå¶åŸ¡ã§ããŠãã宿ãåŸãããŸãã Kiro ãã Power ãåŒã³åºãã€ã¡ãŒãž MCPïŒModel Context ProtocolïŒïŒå€éšããŒã«ãšã®é£æº MCP ã¯ãKiro ãå€éšã®ããŒã«ããµãŒãã¹ãšé£æºããããã®ãããã³ã«ã§ããMCP ãµãŒããŒãå®çŸ©ããããšã§ãKiro ã GitLab API ã®æäœãç¬èªã®ã¹ã¯ãªããå®è¡ãªã©ãIDE ã®å€ã«ããæ©èœãåŒã³åºããããã«ãªããŸãã Power ããšã« mcp.json ãé
眮ã§ããããã ç¹å®ã®ã¯ãŒã¯ãããŒã§ã®ã¿å¿
èŠãª MCP ãµãŒããŒãããã® Power ã«çŽã¥ããŠç®¡ç ã§ããŸããäŸãã°ãStandard Dev Flow Power ã«ã¯ GitLab æäœçšã® MCP ãµãŒããŒããPlaywright Power ã«ã¯ãã¹ãå®è¡çšã® MCP ãµãŒããŒãããšãã£ã䜿ãåããå¯èœã§ãã 3 ã€ã®æ©èœã®é¢ä¿æ§ ãŸãšãããšã以äžã®ãããªåœ¹å²åæ
ã«ãªããŸãã æ©èœ é©çšã¿ã€ãã³ã° çšé Steering åžžæ ãããžã§ã¯ã暪æã®ã°ã©ãŠã³ãã«ãŒã« Powers ããŒã¯ãŒãã«å¿ããŠåç ã¯ãŒã¯ãããŒåºæã®è©³çްã«ãŒã«ã»æé MCP Power ã«çŽã¥ããŠåç å€éšããŒã«ã»API ãšã®é£æº ãã®3å±€æ§é ã«ããããåžžã«å®ãã¹ãã«ãŒã«ããã¿ã¹ã¯ã«å¿ããŠå¿
èŠãªã«ãŒã«ããå€éšããŒã«ãšã®é£æºããæŽçããŠç®¡çã§ããã³ã³ããã¹ããŠã£ã³ããŠãå¹ççã«æŽ»çšããªãã AI ãšãŒãžã§ã³ãã®æ¯ãèããå¶åŸ¡ã§ããŸãã çŸåšã®åãçµã¿ïŒKiro à GitLab ã«ããéçºãã©ãããã©ãŒã å
šäœå çŸåšãCI/CD ãäžå¿ãšãããœãããŠã§ã¢éçºãµã€ã¯ã«å
šäœã®å¹çåã«åãçµãã§ããŸãã éçºã¯ãŒã¯ãããŒã®æŽçïŒãã©ã³ãæŠç¥ã»ãªãªãŒã¹æŠç¥ãå«ã CI/CD ç°å¢ã®æŽåïŒ ã¢ããªã±ãŒã·ã§ã³ã®ãããã€æ¹æ³ã®æ€èšããã¹ãèªååç°å¢ã®æŽå GitLab CI/CD ã«ã¿ãã°ã掻çšãããã€ãã©ã€ã³ã®æšæºå ã¬ã€ãã©ã€ã³ã®æŽå ãããã®åãçµã¿ã«ãããŠãKiro ãš GitLab ãã©ã®ããã«æŽ»çšããŠããããã玹ä»ããŸãã Kiro ã®æŽ»çšïŒPowers ã«ããéçºã¯ãŒã¯ãããŒã®æšæºå Kiro ã§ã¯ 2 ã€ã® Power (Standard Dev Flow Power, Playwright Power) ãå©çšããŠããŸããããããã«ã€ããŠè§£èª¬ããŸãã ãã® 1: Standard Dev Flow Power éçºã¯ãŒã¯ãããŒå
šäœãæšæºåãã Power ãäœæããŸããã以äžã®ã¯ãŒã¯ãããŒã Kiro ã«å®çŸ©ããŠããŸãã 1. Issue äœæ â 2. ãã©ã³ãäœæ â 3. å®è£
â 4. ã³ããã â 5. MR äœæ â 6. ã¬ãã¥ãŒ â 7. ããŒãž ãã® Power ã«ã¯ãåãã§ãŒãºã«å¯Ÿå¿ããã¹ãã¢ãªã³ã°ãã¡ã€ã«ãå«ãŸããŠããŸãã standard-dev-flow/ âââ POWER.md # Power å®çŸ©ïŒã¯ãŒã¯ãããŒå
šäœåïŒ âââ mcp.json # MCP ãµãŒããŒèšå® âââ steering/ âââ issue-management.md # Issue äœæã¬ã€ã âââ branch-commit-mr.md # ãã©ã³ãã»ã³ãããã»MRäœæã¬ã€ã âââ implementation.md # å®è£
äœæ¥ã¬ã€ã âââ gitlab-duo-review.md # GitLab Duo ã¬ãã¥ãŒã¯ãŒã¯ãã㌠âââ pipeline-troubleshooting.md # ãã€ãã©ã€ã³å€±æè§£æã¬ã€ã âââ gitlab-official-mcp-tools.md # GitLab å
¬åŒ MCP ããŒã«ãªãã¡ã¬ã³ã¹ POWER.md ã«ã¯ã¯ãŒã¯ãããŒã®å
šäœåãšåã¹ãã¢ãªã³ã°ãã¡ã€ã«ã®åç
§ã¿ã€ãã³ã°ãèšè¿°ããŠããŸããäŸãã°ããæ°ãã Issue ãäœæããé㯠issue-management.md ãåç
§ãããã€ãã©ã€ã³ã倱æããé㯠pipeline-troubleshooting.md ãåç
§ããšãã£ã圢ã§ãKiro ãã©ã®ãã§ãŒãºã§ã©ã®ã«ãŒã«ãé©çšãã¹ãããæç€ºããŠããŸãã åã¹ãã¢ãªã³ã°ãã¡ã€ã«ã«ã¯ããã®ãã§ãŒãºã§ Kiro ãåŸãã¹ãå
·äœçãªã«ãŒã«ãèšè¿°ãããŠããŸããäŸãã° branch-commit-mr.md ã«ã¯ä»¥äžã®ãããªã«ãŒã«ãå«ãŸããŸãã ãã©ã³ãåœåèŠåïŒ feature/{issue-number}-{brief-description} åœ¢åŒ Conventional Commits 1.0.0 æºæ ã®ã³ãããã¡ãã»ãŒãžïŒtype/scope/description/body ã®æ§é åãæ¥æ¬èªã§ã®èšè¿°ïŒ MR äœææã® squash merge ã«ãã 1 ã³ããããžã®éçŽ MR ãã³ãã¬ãŒãïŒå€æŽå
容/ãã¹ã/ã¬ãã¥ãŒèгç¹/è£è¶³ïŒã«åºã¥ããèšè¿° éçºè
㯠Kiro ã«ãIssue #123 ã®å®è£
ãéå§ããŠãã ããããšäŒããã ãã§ãPower ã«å®çŸ©ãããã¯ãŒã¯ãããŒã«æ²¿ã£ãŠäœæ¥ãé²ã¿ãŸããKiro ã¯èªåçã«ä»¥äžãå®è¡ããŸãã ãã©ã³ãã®ç¢ºèªã»åãæ¿ã Issue ã®å
容確èªãš tmp/{ã¿ã¹ã¯å}-issue-details.md ã®äœæ å®è¡èšç»ã®äœæïŒ tmp/{ã¿ã¹ã¯å}-plan.md ïŒ å®è£
äœæ¥ã®å®æœ äœæ¥ãµããªãŒã®äœæïŒ tmp/{ã¿ã¹ã¯å}-summary.md ïŒ ãã®ããã«ã äœæ¥ã®è¿œè·¡ãã¡ã€ã«ãèªåçæããä»çµã¿ ã Power ã«çµã¿èŸŒãã§ããŸããIssue ã®è©³çްçè§£ããã§ãã¯ãªã¹ã圢åŒã®å®è¡èšç»ãäœæ¥å®äºåŸã®ãµããªãŒã tmp/ ãã£ã¬ã¯ããªã«æ®ãããšã§ãäœæ¥ã®éææ§ã確ä¿ããŠããŸãã Standard Dev Flow Power ã«ã¯ãGitLab å
¬åŒ MCP ãµãŒããŒãšç¬èªã® MCP ãµãŒããŒã®äž¡æ¹ã mcp.json ã§å®çŸ©ããŠããŸãã GitLab å
¬åŒ MCP ãµãŒããŒãæäŸããäž»ãªããŒã«ïŒ create_issue / get_issue ïŒIssue ã®äœæã»ååŸ create_merge_request / get_merge_request ïŒMR ã®äœæã»ååŸ search / semantic_code_search ïŒæ€çŽ¢æ©èœ ç¬èª MCP ãµãŒããŒïŒGitLab MCP EnhancerïŒã§è£å®ããŠããããŒã«ïŒ get_mr_discussions / reply_to_discussion / resolve_all_discussions ïŒMR ãã£ã¹ã«ãã·ã§ã³æäœ list_merge_requests / update_merge_request ïŒMR ã®äžèЧã»ç·šé list_issues / update_issue / add_issue_note ïŒIssue ã®äžèЧã»ç·šé get_latest_pipeline / get_pipeline_jobs / get_job_log ïŒãã€ãã©ã€ã³è§£æ ãã® 2 ã€ã® MCP ãµãŒããŒãçµã¿åãããããšã§ãIssue äœæãã MR ã¬ãã¥ãŒå¯Ÿå¿ããã€ãã©ã€ã³å€±æã®è§£æãŸã§ã GitLab ã®æäœãã»ãŒ Kiro äžã§å®çµ ã§ããããã«ãªããŸããã ãã® 2: Playwright Power 次ã®ã¹ããããšããŠãPlaywright ãæŽ»çšãã E2E ãã¹ãçæã®ããã® Power ãäœæããŠããŸãã playwright/ âââ POWER.md # Powerå®çŸ© âââ steering/ âââ playwright-rule.md # ã³ãŒãã£ã³ã°èŠçŽã»POM倿æé âââ playwright-cli.md # playwright-cli ã®äœ¿ãæ¹ âââ test-best-practices.md # ãã¹ãå®è£
ã®ãã¹ããã©ã¯ãã£ã¹ ãã® Power ã®ãã€ã³ãã¯ã playwright-cli ã®åºåãã Page Object ModelïŒPOMïŒãžã®å€ææé ãã¹ãã¢ãªã³ã°ãã¡ã€ã«ã«è©³çްã«å®çŸ©ããŠããç¹ã§ããplaywright-cli ã¯ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãåãã«èšèšããã CLI ããŒã¹ã®ãã©ãŠã¶èªååããŒã«ã§ãæäœããšã« Playwright ã³ãŒããåºåããŸãã playwright-rule.md ã«ã¯ããã®åºåã³ãŒããã POM ã¯ã©ã¹ãžå€æãã 3 ã¹ãããã®æé ãå®çŸ©ãããŠããŸãã ãã±ãŒã¿ãŒæœåº ïŒåºåã³ãŒãããèŠçŽ ãç¹å® readonly å®çŸ© ïŒã³ã³ã¹ãã©ã¯ã¿ã§ãã±ãŒã¿ãŒãå®£èš ã¢ã¯ã·ã§ã³ã¡ãœãã ïŒæäœãã¡ãœããã«æœè±¡å ããã«ããã±ãŒã¿ãŒæŠç¥ã®åªå
é äœãæç¢ºã«å®çŸ©ããŠããŸãã getByRole() â ãã¿ã³ããªã³ã¯çã®ã»ãã³ãã£ãã¯èŠçŽ getByLabel() â ãã©ãŒã èŠçŽ getByPlaceholder() â ãã¬ãŒã¹ãã«ããŒããã¹ã getByText() â 衚瀺ããã¹ã getByTestId() â ãã¹ãå°çšå±æ§ CSS/XPath â æåŸã®ææ®µ test-best-practices.md ã«ã¯ãAAA ãã¿ãŒã³ïŒArrange/Act/AssertïŒã«ãããã¹ãæ§é åãã¢ãµãŒã·ã§ã³åŒ·åïŒ toBeVisible() ã ãã§ãªã toHaveText() ã§å
容確èªïŒããã¹ãå®å®åãã¯ããã¯ïŒã¹ãããŒåŸ
æ©ãå€ã DOM ã®åé¿ïŒãªã©ãå®è·µçãªãã¹ããã©ã¯ãã£ã¹ãèšè¿°ãããŠããŸãã ãããã®ã«ãŒã«ã Power ã«èœãšã蟌ãããšã§ã 誰ã Kiro ã«ãã¹ãçæãäŸé ŒããŠããçµç¹ã®ãã¹ããã©ã¯ãã£ã¹ã«æ²¿ã£ãäžè²«æ§ã®ãããã¹ãã³ãŒããçæãããŸã ã GitLab ã®æŽ»çš GitLab Pages ã«ããã¬ã€ãã©ã€ã³å
¬é ãã©ãããã©ãŒã ãä» BU ã«å±éããã«ããããã¬ã€ãã©ã€ã³ã®æŽåã¯äžå¯æ¬ ã§ããGitLab Pages ãæŽ»çšããããŒã¯ããŠã³ã§èšè¿°ããã¬ã€ããéç Web ãµã€ãã«å€æããŠå
¬éããŠããŸããã¬ã€ãã«ã¯ãGitLab CI/CD ã«ã¿ãã°ã掻çšããæšæºãã€ãã©ã€ã³ã®èª¬æããGitLab Duo ã Kiro ã®åºæ¬çãªäœ¿ãæ¹ã Tips ãæ²èŒããŠããŸããé¢é£ãããœãŒã¹ã³ãŒãã¯ãã¹ãŠ GitLab ã§ç®¡çããŠããããœãŒã¹ã³ãŒãã®ä¿®æ£ãããã°çæ AI ãæŽ»çšããŠå³æã«ã¬ã€ãã«åæ ã»å
¬éã§ããããã管çã®æéãæããŸããã ããã§éèŠãªã®ã¯ã Powers ã«ã¯åºæ¬çã«ã¬ã€ãã«æžããŠããããšããã®ãŸãŸèœãšã蟌ãã§ãã ãšããç¹ã§ããããã«ãããã¬ã€ãã®å
容㚠AI ã®æ¯ãèããåžžã«äžèŽãããã¬ã€ããèªããããAI ã«èãããã®ã©ã¡ãã§ãåãæ
å ±ã«ãã©ãçããç¶æ
ãå®çŸããŠããŸãã GitLab Pages ã®å©çšã€ã¡ãŒãž CI/CD ã«ã¿ãã°ã«ãããã€ãã©ã€ã³ã®æšæºå GitLab CI/CD ã«ã¿ãã°ãäœæããã¢ãŒãã£ãã¡ã¯ãããã£ãã·ã¥ã®èšå®ãå«ããã€ãã©ã€ã³ãã³ãã¬ãŒããé
åžããŠããŸãããŠãŒã¶ãŒåŽã¯ç°å¢åºæã®ãã©ã¡ãŒã¿å€ã®ã¿ãå
¥åããã°ãå³åº§ã«äœ¿çšå¯èœãªç¶æ
ã§ãã GitLab Duo ã«ãã MR ã¬ãã¥ãŒïŒAI å士ã®åå Kiro ã§ã³ãŒãã£ã³ã°ãè¡ããMR ãäœæããåŸãGitLab Duo ã«ã¬ãã¥ãŒãäŸé Œããã¯ãŒã¯ãããŒãæ§ç¯ããŠããŸãã çæ AI ã¯èªåã§çæããã³ãŒãã«å¯ŸããŠæ£ãããšããèªç¥ãã€ã¢ã¹ããããå¯èœæ§ãããããã ã³ãŒãçæïŒKiroïŒãšã¬ãã¥ãŒïŒGitLab DuoïŒãç°ãªã AI ã«æ
åœããã ããšã§ããã客芳çãªã¬ãã¥ãŒãå®çŸããŠããŸãã GitLab Duo ãžã®ã¬ãã¥ãŒèгç¹ã¯ã瀟å
ã®æèè
ã亀ã㊠mr-review-instructions.yaml ã«å®çŸ©ããŠãããã¬ãã¥ãŒã³ã¡ã³ãã«å¿
ã prefixïŒæ¥é èŸïŒãä»ããã«ãŒã«ãèšããŠããŸãããã® prefix ã«ãããã¬ãã¥ãŒææã®éèŠåºŠãäžç®ã§å€æã§ããããã«ãªããŸãã instructions: - name: Common Review Policy fileFilters: - "**/*" instructions: | - **èšèª**: ãã¹ãŠã®å¿çã¯å¿
ãæ¥æ¬èªã§è¡ã£ãŠãã ãã - ã¬ãã¥ãŒããéã«ã¯ã以äžã®prefix(æ¥é èŸ)ãå¿
ãä»ããŠãã ãã - [must] â å¿
é ä¿®æ£ãä¿®æ£ããªãã®ã§ããã°ä¿®æ£ããªãçç±ãéçºè
ã«æ±ãã - [want] â ã§ããã°å¯Ÿå¿ããŠã»ãããæ¹åãšããŠæãŸããææ¡ - [imo] â å人çæèŠã奜ã¿ããŒã¹ã®ææ¡ - [ask] â 質åãæå³ã»èæ¯ã®ç¢ºèª - [nits] â 现ããææ(nitpicks)ãè¶
軜埮ãªã¹ã¿ã€ã«ä¿®æ£ãªã© - [info] â åèæ
å ±ãå
±æã»è£è¶³ã»é¢é£æ
å ± äžæ¹ãKiro åŽã® PowerïŒ gitlab-duo-review.md ïŒã«ã¯ãGitLab Duo ã®ã¬ãã¥ãŒçµæãã©ãåãåããã©ã察å¿ãããã®ã«ãŒã«ãå®çŸ©ããŠãããGitLab Duo ãä»äžãã prefix ã«å¯ŸããŠãKiro ãã©ã®ããã«å€æã»è¡åãã¹ãããæç€ºããŠããŸãã ã»ã»ã» ### 2. GitLab Duoã«ã¬ãã¥ãŒäŸé Œ **éèŠ**: GitLab Duoã®ã¬ãã¥ãŒã¯**æ°èŠãã£ã¹ã«ãã·ã§ã³**ã§`@GitLabDuo`ãã¡ã³ã·ã§ã³ããããšã§çºåãããMRäœææã®descriptionã«èšèŒããŠãçºåããªãã **ã¬ãã¥ãŒäŸé Œã®ãã€ã³ã**: - æ°èŠãã£ã¹ã«ãã·ã§ã³ãäœæããïŒãããå¿
é ïŒ - `@GitLabDuo`ã¯ã¹ããŒã¹ãªãã§èšèŒ - äŸé Œã¡ãã»ãŒãžã«ã¯ä»¥äžãå«ãããšå¹æçïŒ - å®è£
å
å®¹ã®æŠèŠ - ç¹ã«ç¢ºèªããŠã»ããç¹ - 倿Žçç±ãèæ¯ - åèè³æ: é¢é£ããã¥ã¡ã³ã ### 3. ã¬ãã¥ãŒçµæç¢ºèª **ã¬ãã¥ãŒã³ã¡ã³ãã®prefixïŒéèŠåºŠã®å€æåºæºïŒ**: GitLab Duoã®ã¬ãã¥ãŒã«ã¯ä»¥äžã®prefixãä»äžãããããããåºã«å¯Ÿå¿ã®åªå
床ã倿ããã | Prefix | æå³ | å¯Ÿå¿æ¹é | |--------|------|----------| | `[must]` | å¿
é ä¿®æ£ | ä¿®æ£å¿
é ã察å¿ããªãå Žåã¯çç±ã説æ | | `[want]` | ã§ããã°å¯Ÿå¿ | æ¹åãšããŠæãŸãããå¯èœãªéãå¯Ÿå¿ | | `[imo]` | å人çæèŠ | 奜ã¿ããŒã¹ã®ææ¡ãæ¡çšã¯ä»»æ | | `[ask]` | 質å | æå³ã»èæ¯ã®ç¢ºèªãåçãå¿
èŠ | | `[nits]` | 现ããææ | è¶
軜埮ãªã¹ã¿ã€ã«ä¿®æ£ãäœè£ãããã°å¯Ÿå¿ | | `[info]` | åèæ
å ± | å
±æã»è£è¶³ã»é¢é£æ
å ±ã察å¿äžèŠ | **[ask]ãžã®å¯Ÿå¿**: `[ask]`ãä»ãã質åã«ã¯ã該åœãã£ã¹ã«ãã·ã§ã³ã«`@GitLabDuo`ã¡ã³ã·ã§ã³ä»ãã§è¿ä¿¡ããŠäžæç¹ãè§£æ¶ããã ã»ã»ã» [ask] ãä»ãã質åã«ã¯ã該åœãã£ã¹ã«ãã·ã§ã³ã« @GitLabDuo ã¡ã³ã·ã§ã³ä»ãã§è¿ä¿¡ããŠäžæç¹ãè§£æ¶ããã«ãŒã«ãå®çŸ©ããŠããŸãã ãŸããGitLab Duo ãžã®ã¬ãã¥ãŒäŸé Œæ¹æ³ã«ã€ããŠã Power ã«æèšããŠããŸããGitLab Duo ã®ã¬ãã¥ãŒã¯ MR ã® description ã«èšã®æåŸã« /assign_reviewer @GitLabDuo ãèšèŒããããšã§çºåããŸãããããããç¥ããªããšããããã€ã³ããã Power ã«èœãšã蟌ãããšã§ãéçºè
ã詊è¡é¯èª€ããæéãçããŠããŸãã 以äžãèžãŸãããKiro ãš GitLab Duo ã®ååã¯ãŒã¯ãããŒã¯ä»¥äžã®éãã§ãã Kiro ã§æ©èœãå®è£
ããMR ãäœæ GitLab Duo ã« MR ã¬ãã¥ãŒãäŸé ŒïŒMCP çµç±ïŒ ã¬ãã¥ãŒææã Kiro ãååŸãã察å¿å¯åŠã倿 察å¿ãå¿
èŠãªææã«å¯ŸããŠã³ãŒãä¿®æ£ã宿œ ä¿®æ£ãã³ãããã»ããã·ã¥ããå床 GitLab Duo ã«ã¬ãã¥ãŒãäŸé Œ æ¿èªåŸãå
šãã£ã¹ã«ãã·ã§ã³ãäžæ¬è§£æ±º ãã® AI å士ã®ååã«ããã¬ãã¥ãŒãµã€ã¯ã« ã«ãããããçšåºŠã®ã¯ãªãªãã£ãæ
ä¿ãããç¶æ
ã§äººéã®ã¬ãã¥ã¢ãŒãå
¥ãããšã§ãã¬ãã¥ãŒè² æ
ã®è»œæžãæåŸ
ã§ããŸãã ãã®æ§æã®ã¡ãªãã 1. å°å
¥ããŒãã«ã®å€§å¹
ãªäœäž Power ãæŽ»çšããŠéçºãããŒãå®çŸ©ããŠãããããéçºè
㯠Kiro ã«è³ªåããªããäœæ¥ãé²ããã ãã§ãã¯ãŒã¯ãããŒã«æ²¿ã£ãéçºãè¡ãããšãã§ããŸããåãããªãããšã¯ Kiro ã«è³ªåããŠè§£æ±ºã§ãããããKiro ã®åºæ¬çãªäœ¿ãæ¹ãèŠããã ãã§éçºãå§ããããŸããBU ãžã®å±éæã«ãAI ããµããŒãããŠãããããã¬ã€ããç¹ã«èªãå¿
èŠã¯ãªããããšäŒããã ãã§ããŒãã«ããã£ãšäžãããŸãã 2. éçºã®èšŒè·¡ãšã³ã©ãã¬ãŒã·ã§ã³ Issue ã MR ã§éçºã®èšŒè·¡ãæ®ãããšã§ãä»ã®éçºè
ãšã®ã³ã©ãã¬ãŒã·ã§ã³ã容æã«ãªããŸããIssue ã远ãããšã§ãå¥ã®éçºè
ãäœæ¥ãåŒãç¶ãããšã容æã«ãªããšèããŠããŸãã 3. ã¬ãã¥ãŒè² æ
ã®è»œæž ã³ãŒãéçºã®é床ãäžããäžæ¹ã§ãã¬ãã¥ãŒè
ãžã®è² æ
ãå¢å€§ãããªã¹ã¯ããããŸããGitLab Duo ã§ã®èгç¹ã«åºã¥ããã¬ãã¥ãŒãš CI/CD ãã€ãã©ã€ã³ã®å®è¡çµæã Kiro ã«ãã£ãŒãããã¯ãããŠæ¹åããããšã§ã人éã®ã¬ãã¥ã¢ãŒãå
¥ãåã«ããçšåºŠã®ã¯ãªãªãã£ãæ
ä¿ã§ããŸãã人éã®ã¬ãã¥ãŒç²ããã¬ãã¥ãŒå·¥æ°ã®åæžã«ãå¯äžããããšãæåŸ
ããŠããŸãã 工倫ããç¹ãšèŠåŽããç¹ 1 : Power ã®çºåçãäžãã工倫 Power ã« keywords ãèšå®ããŠåŒã³åºãã®å·¥å€«ãããŸããããæåŸ
éãã«çºåããªãã±ãŒã¹ããããŸãããäŸãã°ãStandard Dev Flow Power ã«ã¯ ["ã€ã·ã¥ãŒ", "ãã©ã³ã", "ã³ããã", "MR", "ããŒãžãªã¯ãšã¹ã", "ã¬ãã¥ãŒ", "ãã€ãã©ã€ã³", "å®è£
"] ãšãã£ãããŒã¯ãŒããèšå®ããŠããŸããããŠãŒã¶ãŒã®çºè©±ããããã®ããŒã¯ãŒãã«å®å
šã«äžèŽããªãå ŽåãPower ãçºåããªãããšããããŸããã 調æ»ã®çµæã Power ãç©æ¥µçã«æŽ»çšããããä¿ã Steering ãã¡ã€ã«ãäœæãã ããšã§ãå©çšçãåäžããŸãããSteering ã¯åžžã«ã³ã³ããã¹ãã«èªã¿èŸŒãŸããããããå©çšå¯èœãª Power ãããå Žåã¯ç©æ¥µçã«æŽ»çšããããšããšããã«ãŒã«ã Steering ã«èšè¿°ããããšã§ãPower ã®çºåçãæ¹åã§ããŸããAI ãšãŒãžã§ã³ãããŒã«ãçµç¹ã§æŽ»çšããéã«ã¯ããããããã¥ãŒãã³ã°ãéèŠã«ãªããŸãã 2: GitLab å
¬åŒ MCP ãµãŒããŒã®è£å® GitLabã®è¯ãã¯ãã®ã«ã¹ã¿ãã€ãºæ§ã®é«ãã«ãããŸãã å
¬åŒ MCP ãµãŒããŒãè£å®ããç¬èªã® MCP ãµãŒããŒïŒGitLab MCP EnhancerïŒãèªäœ ããŸããã gitlab-official-mcp-tools.md ãšããã¹ãã¢ãªã³ã°ãã¡ã€ã«ã« å
¬åŒ MCP ãµãŒã㌠ïŒBeta çïŒã®å
š 14 ããŒã«ã®ãã©ã¡ãŒã¿å®çŸ©ãšäœ¿çšäŸãèšè¿°ããKiro ãæ£ããããŒã«ã䜿ããããã«ã¬ã€ãããŠããŸããããã«ããMR ãã£ã¹ã«ãã·ã§ã³ã®ååŸã»è¿ä¿¡ã»è§£æ±ºãIssue ã®äžèЧã»ç·šéããã€ãã©ã€ã³ã®ãžã§ããã°ååŸãªã©ã GitLab ã®æäœã倧å¹
ã«åäžããã»ãŒ Kiro äžã§æäœãå®çµã§ããããã«ãªããŸããã ä»åŸã®å±æ çŽè¿ã§ã¯ãçŸåšäœæäžã® Playwright Power ã宿ãããE2E ãã¹ãçæã®å¹çåãæšé²ããŠãããŸãããŸããPlaywright Power ãšäžŠè¡ããŠãSonarQube ã® MCP ãµãŒããŒã掻çšããéçè§£æçµæã Kiro ã«ãã£ãŒãããã¯ããä»çµã¿ã®æ§ç¯ãæ€èšãå§ããŸãããããã«ãããã³ãŒãã¬ãã¥ãŒæã ãã§ãªããå®è£
段éããã³ãŒãå質ãé«ããããã®ä»çµã¿äœãã«ãåãçµãã§ããŸãããã®ããã«ãçµç¹ã§æŽ»çšãèŠèŸŒãŸãã OSS ã®æŽ»çšãæšé²ãã Power ãé æ¬¡äœæããAI ãæŽ»çšããŠãœãããŠã§ã¢éçºã楜ã«ãªãåå£ãåºããŠããæ¹éã§ãããŸããGitLab Duo ã®ã¬ãã¥ãŒèгç¹ãç¶ç¶çã«è²ãŠãŠãããé©çšç¯å²ãåºããããšã§ã¬ãã¥ãŒè² æ
ã®ãããªã軜æžãç®æããŸãã 1 : 广ã®å®éåãšç¶ç¶çãªæ¹å AI 掻çšã«ããéçºå¹çåã®å¹æãå¯èŠåãããããå®éçãªè©äŸ¡ææšã®æž¬å®ã«åãçµãã§ãããŸããIssue ããããŒãžãŸã§ã®ãªãŒãã¿ã€ã ãã¬ãã¥ãŒã€ãã¬ãŒã·ã§ã³åæ°ãšãã£ãéçºéåºŠã®ææšãGitLab Duo ã®ã¬ãã¥ãŒææã®ç²ŸåºŠãKiro ã® Playwright Power ã§çæãããã³ãŒãã®å質ãªã©ããå®éã«åããžãã¹ãŠããã (以éãBU)ã§äœ¿çšããŠããã ããªããè©äŸ¡ããŠãããŸãããããã®ãã£ãŒãããã¯ãåºã«ãPower ã®ã«ãŒã«å®çŸ©ã®æ¹åã MCP ãµãŒããŒã®æ©èœæ¡åŒµãªã©ãç¶ç¶çãªæ¹åãµã€ã¯ã«ãåããŠãããŸãã 2 : Power ãšãã€ãã©ã€ã³ã®ãšã³ã·ã¹ãã æ§ç¯ Power ã CI/CD ãã€ãã©ã€ã³ãçµç¹å
šäœã§æŽ»çšããŠãããããããŒãžã§ã³ç®¡çãšé
åžã®ä»çµã¿ãæ§ç¯ããŠãããŸããGitLab ã§ Power/MCP ã CI/CD ãã€ãã©ã€ã³ãã³ãã¬ãŒããäžå
管çããGitLab Pages ã§å°å
¥æ¹æ³ã»ã¢ããã°ã¬ãŒãæ¹æ³ãå
¬éããŸããããŒãžã§ã³æŽæ°æã«ã¯æŽæ°ããã·ã¥ããŒãã§ãŠãŒã¶ãŒã«éç¥ããå BU ããã®èŠæã¯ Issue ããã±ããã§åéããŠç¶ç¶çã«æ¹åããŸãããŸããæ¢åã®ç®¡çã·ã¹ãã ãšã®é£æºãèŠéã«å
¥ããéå®³å ±åããä¿®æ£ããªãªãŒã¹ãŸã§ã®éçºãµã€ã¯ã«å
šäœã®å¹çåãå³ããŸãã 3 : çµç¹å
šäœãžã®å±éãšã³ãã¥ããã£åœ¢æ äžé·æçã«ã¯ãé»åICTã»ã³ã¿ãŒå
ã®å BU ãžã®å±éãå éãããŠãããŸããç©æ¥µçãªæ
å ±çºä¿¡ãéããŠåšå²ãå·»ã蟌ã¿ãªãããå°éã«æŽ»çšã®èŒªãåºããŠãããŸããPower ãã«ãŒã«æŽåã®åãçµã¿ã¯é»åICTã»ã³ã¿ãŒã«éãã話ã§ã¯ãªããããããããã¯äžè±é»æ©å
šç€Ÿçãªåãçµã¿ãšããŠèªç¥ãããæŽ»ç𿹿³ã«ã€ããŠè°è«ã§ããã³ãã¥ããã£ã圢æãããããšãç®æããŠããŸãããŸãã¯è¶³å
ã®é»åICTã»ã³ã¿ãŒã®ãœãããŠã§ã¢éçºå¹çåã«ã€ãªããæŽ»åãã©ãã©ãé²ããŠãããããšèããŠããŸãã ãŸãšã äžè±é»æ© é»åICTã»ã³ã¿ãŒã§ã¯ãKiro ã® Steeringã»Powersã»MCP ãš GitLab ã®åæ©èœãçµã¿åãããããšã§ã ãAI ã«èãã°ã¯ãŒã¯ãããŒã«æ²¿ã£ãéçºãã§ããã ãã©ãããã©ãŒã ã®æ§ç¯ãé²ããŠããŸãã ãã®åãçµã¿ã®æ¬è³ªã¯ãåãªãããŒã«å°å
¥ã§ã¯ãããŸããã Steering ã§ãããžã§ã¯ã暪æã®ã°ã©ãŠã³ãã«ãŒã«ãå®çŸ©ã Powers ã§ã¯ãŒã¯ãããŒåºæã®è©³çްãªã«ãŒã«ã»æé ãåçã«åŒã³åºã MCP ã§ GitLab ãã¯ãããšããå€éšããŒã«ãšã·ãŒã ã¬ã¹ã«é£æºãã ãã® 3 å±€æ§é ã«ãããã¬ã€ãã©ã€ã³ã®å
容ã Powers ã«èœãšã蟌ã¿ãGitLab Pages ã§å
¬éããã¬ã€ããš AI ã®æ¯ãèããäžèŽãããããšã§ã ããã¥ã¡ã³ããèªãã§ã AI ã«èããŠãåãçµæã«ãã©ãçãã ä»çµã¿ãäœã£ãŠããŸããããã«ãKiro ã«ããã³ãŒãçæãš GitLab Duo ã«ããã¬ãã¥ãŒãšãã AI å士ã®ååã«ããã人éã®ã¬ãã¥ãŒè² æ
ã軜æžããªããå質ãæ
ä¿ããã¯ãŒã¯ãããŒãå®çŸããŠããŸãã ãœãããŠã§ã¢éçºã®å¹çåã¯ãããŒã«ã®å°å
¥ã ãã§ã¯å®çµããŸãããéçºã¯ãŒã¯ãããŒã®æšæºåãã¬ã€ãã©ã€ã³ã®æŽåããããŠãããã AI ãšãŒãžã§ã³ãã«èœãšã蟌ãããšã§ãåããŠçµç¹å
šäœã®éçºå¹çãåäžããŸããæ¬ããã°ããåæ§ã®èª²é¡ãæ±ããçæ§ã®åèã«ãªãã°å¹žãã§ãã èè
å°æ£® è£ä¹ é»åã·ã¹ãã è£œäœæ é»åããžã¿ã«ãšããžãŒã·ã¹ãã éçºéš ã·ã¹ãã åºç€èª²æå±ã ã³ãŒããŒãš Kiro ã倧奜ãã§ãïŒ é»åICTã»ã³ã¿ãŒå
ã®å
šããžãã¹ãŠãããã®éçºã»éçšã«è²¢ç®ãããããITIL4 ã«æºæ ããå°çšãã©ãããã©ãŒã ã®éçºã«æºãã£ãŠããã䞻㫠CI/CD ç°å¢ã®æ€èšã»æ§ç¯ã»å°å
¥ã AI ãšãŒãžã§ã³ãããŒã«ã掻çšããéçºã®ä»çµã¿ã¥ãããæ
åœããŠããŸãã çš²ç° å€§éž â ããªãã AWS Japan ã§åã Kiro ããããªãæããœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ãã2022 幎ããäžè±é»æ©ã°ã«ãŒããæ¯æŽããŠããŸãããã®æŽ»åã®åããæè¿ã¯ AI é§åéçºã©ã€ããµã€ã¯ã« (AI-DLC) ã®æ¥æ¬ã®ã客æ§ãžã®åžææŽ»åããã€ã€ã Kiro ã®ããã° ãªã©ãå·çããŠããŸãã å°æŸå ã€ãã GitLab ååäŒç€Ÿ ã·ãã¢ããŒãããŒãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã é·ãã«æž¡ããœãããŠã§ã¢éçºçµéšãæã¡ãããŒã¿ããŒã¹ãã»ãã¥ãªãã£ãããã°ããŒã¿ã®é åã§ã®æ·±ãå°éç¥èãæã¡ãŸãã2022 幎ã«GitLab ã«åå ããAI é§ååéçºããŒã«ãããããæ°ããéçºãã©ãã€ã ã®æ§ç¯ã«åãçµãã§ããŸãã
ã¯ããã« æ¬èšäºã¯SIOS Tech Labã¢ããã³ãã«ã¬ã³ããŒ23æ¥ç®ã®æçš¿ã§ãã ãµã€ãªã¹ãã¯ãããžãŒã®æœæ ¹ç°ã§ãã æ®æ®µã¯ãã¶ã€ã³ãããã³ããšã³ãã³ãŒãã£ã³ã°ããCMSã®ã»ãã¥ãªãã£ä¿å®ã®äžéšå¯Ÿå¿ãªã©ãè¡ã£ãŠããŸãã è¿å¹ŽãCopilotãGeminiãªã©ã®çæAIã®é²åã«ãããPhotoshop,Illustratorãªã©ã§ããããäœæ¥ããæéãçç¥ããŠã âããã³ããšã³ãã®ã¢ãã¯ã¢ããã§çŽã«ããžã¥ã¢ã«ãäœãâ ãšããããšãæè»œã«ã§ããããã«ãªã£ããšæããŠããŸãã ãã®èšäºã§ã¯three.jsã§ã®å®äŸã«ã€ããŠæžããŸãã three.jsã£ãŠïŒ three.js ã¯ãã©ãŠã¶äžã§ïŒD衚çŸãå®è£
ããã®ã«äŸ¿å©ãªJavaScriptã©ã€ãã©ãªã§ãã ãã©ãŠã¶äžã§ã®ãªãããªæŒåºãã²ãŒã å¶äœãŸã§ã«ããŒããŠããŸãã å
¬åŒããã¥ã¡ã³ã ãå
å®ããŠããŸãã ã¢ã€ãã¢ã®çš® çŸè¡å±ã奜ãã§ããè¡ãã®ã§ãããå
æ¬æšã«ãã 21_21 DESIGN SIGHT ãšããã®ã£ã©ãªãŒã®ã·ã§ããã§è³Œå
¥ããã ã¢ã¹ã¿ãªã¹ã¯ãïŒDåããŠïŒDããªã³ã¿ã§åºåãããªããžã§ã¯ããããªãã® ãçŽåŸã¯ïŒïœïœãããã§ããæºã«é£Ÿã£ãŠãããããã¢ã€ãã¢ã®çš®ã«ãªããŸããã ãã®ãªããžã§ã¯ããšthree.jsã䜿ã£ãŠäœããããªã€ã¡ãŒãžãšããŠä»¥äžãæµ®ãã³ãŸããã htmlã®äžéšã«ããžã¥ã¢ã«èŠçŽ ãšããŠåã蟌ããcanvasèŠçŽ é®®ãããªå€§ããªè²ã®ãšãªã¢ãè€éãªãã¿ãŒã³ã§åã åãã¯ãã£ãã ïŒDã«ãèŠãããïŒDçã§ããããå
šäœåã¯ã¯ã£ããããããªã èŠãŠããã ãã§é£œããªãäžè¯é¡ã®ãããªåã å®æåœ¢ã®ããžã¥ã¢ã«ã€ã¡ãŒãž åœå㯠Blender ã§ãã®ïŒDã¢ã¹ã¿ãªã¹ã¯ãã¢ããªã³ã°ãäœæãããããå€éšãã¡ã€ã«ãšããŠthree.jsã«åã蟌ãããæ¹ãæ€èšããã®ã§ããããªããžã§ã¯ãã幟äœåŠçã§ããã°æ°åŠçãªèšç®ã ãã§çæã§ããã¯ããªã®ã§ãäžæŠçæAIã®ããã³ããã®ã¿ã§äœãæ¹æ³ãéžã³ãŸããã ããããâVibe Codingâã®ãã§ãŒãºãž ä»åã®éçºããã»ã¹ã®ç¹åŸŽã¯ä»¥äžã®ãããªãã®ã§ãã AIãšã®å
±åäœæ¥ïŒ GeminiãšCopilotãšããè€æ°ã®çæAIãããã³ããã§å¶åŸ¡ããã³ãŒããçºå±ãããŸããã ãã¬ããžããŒã¹ã®é°å²æ°ã³ãŒãã£ã³ã°ïŒ éå»ã® three.js ã©ã€ãã©ãªã®ã³ãŒãã£ã³ã°çµéšãã Blender ãªã©ã®3Dãã¬ããžã掻ããããé°å²æ°ã§é²ããã³ãŒãã£ã³ã°ãã§ãã éçºãã§ãŒãº 1: ãªããžã§ã¯ãã®åºæ¬é
眮ãšåæããã³ãã é£ããããšãèãããããšã°ã®ã€ã¡ãŒãžã§ããããããšãäŒããŸãã 以äžãããªãæç€ºããã©ã³ã¯ã§ãããå¹³æ¥ã¯çæAIãšäŒè©±ããŠããæéãäžçªå€ããâ話ãéãã仲éâãšããæèŠãªã®ã§ãèªç¶ãšç ããå£èª¿ã«ãªããŸãç¬ abstractãªããŒããªãŽã³ã®ãªããžã§ã¯ããç»é¢ãã£ã±ãã«è¡šç€ºããããã£ãããšå転ãããããªããŠã§ããµã€ãã®ãã¡ãŒã¹ããã¥ãŒã€ã¡ãŒãžãäœããããthree.jsãæŽ»çšãèæ¯ã¯#feeb0bã«ããŠã»ãããã©ã€ãã£ã³ã°ã¯ãªã¢ã«ã§ã¯ãªããã©ããã§ãããã°ã©ããŒã·ã§ã³ãæãã£ãŠããæãã â ãªããžã§ã¯ãã¯æ·»ä»åçã®ãããªãâã¢ã¹ã¿ãªã¹ã¯ã®ïŒDçâã¿ããã«ããŠã»ããïŒé¢ããšã«è²ãéããè²ã®æåºŠãšåœ©åºŠãããïŒãæ£äºåé¢äœã®ãããªå¹ŸäœåŠå³åœ¢ã®ããããã®é¢ãå€åŽã«Extrudeãããããªåœ¢ãã«ã¡ã©ã¯ãŒã¯ã¯ãã£ãšãŽãªã£ãšæ¡å€§ãããã ãã€ãã³ãŒãã£ã³ã°ãªã®ã§ âãŽãªããšæ¡å€§ãããâ ãªã©ãé°å²æ°äž»äœã®æ¬é³ãçŽãããã®ãŸãŸæž¡ããŠã¿ãŸããããªããšãªãå¯ããŠãããŸãã äžèšã®ããã³ãã以å€ã«ã现ããæç€ºã¯ããã€ãäžããŠããŸããçç¥ããŠããŸãã éäžããšã©ãŒã§äžæãæç»ãããªãã±ãŒã¹ããããŸããããã®ãšãã¯éœåºŠä¿®æ£æç€ºãåºããŸãã ã»ãã®3~4ã¹ãããã®ããã³ããã§ã€ã¡ãŒãžã«è¿ãthree.jsã®åããå®è£
ããŠãããŸãããïŒD座æšç©ºéã§ãªããžã§ã¯ããå転ããŠããŸãã éäžçµéã®ãã£ããã£ããŸã è²ã
ãšå€ã Extrudeãšããçšèªã«ã€ã㊠ã¡ãªã¿ã«äžèšããã³ããã«ããâExtrudeâãšããã®ã¯BlenderãMayaãªã©ã®ïŒDäœæããŒã«ã®ããªãŽã³ã¢ããªã³ã°ã§äœ¿ãããã³ãã³ãã§ãâæŒãåºãâãæå³ããŸããããžã¥ã¢ã«çã«ã¯ä»¥äžã®ãããªã€ã¡ãŒãžã§ãã Extrudeã®å³è§£ãéžæããé¢ãæŒãåºãããŠããŸã éçºãã§ãŒãº 2: 圢ã»è²ã»ã©ã€ãã£ã³ã°ã®èª¿æŽ é¢åäœã§ã¯ãªããããªãŽã³æ¯ã«è²ãéã£ãŠããããé¢ãéãªã£ãŠãã«ãã«ããŠããããã®ãäœããããŽãŒã«ã®ã€ã¡ãŒãžãšç°ãªãã®ã§ãåŒãç¶ãããã³ããã§ä¿®æ£ããŠãããŸãã ã«ã©ãŒãªã³ã°ã ããããªãŽã³ããšã«å€ããã®ã§ã¯ãªãããªããžã§ã¯ãã®åäžå¹³é¢ã®é¢ã¯åãè²ã«ãããããšãé¢ãéãªã£ãŠããããšã§ã¡ãã€ããçºçããŠãããããªã®ã§è§£æ¶ããŠã»ãããè²ã®åœ©åºŠãšæåºŠããã£ãšäžããã ä¿®æ£åŸã以äžãã¡ãã€ããšã«ã©ãŒãªã³ã°ã¯è§£æ¶ãããŸãããã åœ¢ãæ°ã«é£ããªã ã ïŒã€ã®ã€ãªãã£ããªããžã§ã¯ãã«ãªã£ãŠããªãæ°ããããã¢ã¹ã¿ãªã¹ã¯ã®ïŒDçã ãã©ãäžã€ã®å€é¢äœã®åé¢ãåå¥ã«ExtrudeããŠäœãããã¢ã¹ã¿ãªã¹ã¯ããšããæãã«ã§ããªãïŒ ããšShadingãã©ã€ãã£ã³ã°ã®æãããã©ãããããŠé¢çœããªãã®ã§ã以äžã®ãããªããã³ããã§æ¹åãå ããŠã¿ãŸãã ãã£ãšâç
§æã£ãœãâé°åœ±ã«ããããflatShadingãããªããŠããã®ã§ã¯ãvertexColorsã䜿ãã°ïŒããšãã¹ãããã©ã€ãè€æ°äœ¿ã£ãŠãªããžã§ã¯ããç
§ããã°ãããã£ãœããªãããããªãïŒ é¢ã«ã°ã©ããŒã·ã§ã³ãä»ããã¹ãããã©ã€ãã«ããã©ã€ãã£ã³ã°ã§é°åœ±ãçãŸããŸããã 圢ã¯ã¬ã©ããšå€ãã ãâïŒDçã¢ã¹ã¿ãªã¹ã¯âã§ã¯ãªããã²ãã²ã®ã¹ã¿ãŒã®ãããªåœ¢ã«ãªããŸããããæ°åŠçèšç®ã«ãã£ãŠçæã§ããã·ãŒã ã¬ã¹ãªïŒã€ã®ãªããžã§ã¯ããšãªã£ãã®ã§OKãšå€æããŸããã æ¬²ããã£ãã®ã¯ã·ãŒã ã¬ã¹ãªãªããžã§ã¯ããšãè²ã®ã°ã©ããŒã·ã§ã³ã®æ¹ã§ãã æåŸã«ãã«ã¡ã©ã被åäœã«ãã£ãšè¿ã¥ããŠãèµ·åãããã³ã«æ¯åç°ãªãã«ã©ãŒãªã³ã°ãæœããããããªããã³ãããæž¡ããŸãã 宿çã®ãã£ãã㣠æãã§ããåãããŒããžã¥ã¢ã«èŠçŽ ãäœæã§ããŸããïŒ æçµææç©ïŒthree.jsã³ãŒã æçµçã³ãŒãã¯ä»¥äžã§ãã1æã®htmlãªã®ã§ã³ããããŠä¿åããéãã ãã§åããŸããthree.jsã¯å®éã«ãã©ãŠã¶ã§åãããªããšããããããªããšæããŸãã ãªããŒããããã³ã«ã©ã³ãã ã«ã«ã©ãŒãå²ãåœãŠãããŸãã3Dãªããžã§ã¯ãã¯æ°åŠçã«çæãããŠããã®ã§ãå€éšèªã¿èŸŒã¿ã®ïŒDãã¡ã€ã«ã¯äžèŠã§ãïŒãã ãããªã³ã©ã€ã³äžã®CDNã®three.jsã©ã€ãã©ãªãèªã¿èŸŒãã§äœ¿ã£ãŠããŸãïŒ äžå¿ã¢ãã€ã«å¯Ÿå¿ãèæ
®ããŠããã®ã§ãã¢ãã³ãªããã€ã¹ãªãã°åŠçèœã¡ãªã©ããã«åããšæããŸãã <!doctype html> <html lang="ja"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Extruded Poly Star â three.js</title> <style> html, body { height: 100%; margin: 0; } body { background: #feeb0b; /* æå®ã®èæ¯è² */ overflow: hidden; font-family: system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Noto Sans JP", sans-serif; } #hero { position: fixed; inset: 0; } </style> <!-- Import MapïŒæ£ããéãã¿ã°ïŒ --> <script type="importmap"> { "imports": { "three": "https://unpkg.com/three@0.160.1/build/three.module.js" } } </script> </head> <body> <canvas id="hero"></canvas> <script type="module"> import * as THREE from 'three'; // ===== ã©ã³ãã åãŠãŒãã£ãªãã£ïŒæ¯åéãç»ã«ïŒ ===== // seed 㯠URL ?seed=12345 ã§åºå®å¯èœãæªæå®ãªãæ¯åã©ã³ãã ã // FIX: URLSearchParams.get('seed') ã null ã®ãšã Number(null) 㯠0 ã«ãªãã®ã§ã // ãseedæªæå®ãªã®ã«æ¯å0åºå®ããšãããã°ãé¿ããã const params = new URLSearchParams(location.search); const seedParam = params.get('seed'); const urlSeed = (seedParam !== null && seedParam !== '') ? Number(seedParam) : null; const autoSeed = (crypto && crypto.getRandomValues) ? crypto.getRandomValues(new Uint32Array(1))[0] : Math.floor(Math.random() * 1e9); const SEED = (urlSeed !== null && Number.isFinite(urlSeed)) ? Math.floor(urlSeed) : autoSeed; function mulberry32(a){ return function(){ let t = a += 0x6D2B79F5; t = Math.imul(t ^ t >>> 15, t | 1); t ^= t + Math.imul(t ^ t >>> 7, t | 61); return ((t ^ t >>> 14) >>> 0) / 4294967296; } } const rand = mulberry32(SEED); const randRange = (min, max) => min + (max - min) * rand(); console.log('%c[Hero Seed]', 'color:#555', SEED, urlSeed !== null ? '(from URL)' : '(random)'); // ===== åºæ¬ã»ããã¢ãã ===== const canvas = document.getElementById('hero'); const renderer = new THREE.WebGLRenderer({ canvas, antialias: true, alpha: true, powerPreference: 'high-performance' }); // --- DPR äžéïŒPC/ã¢ãã€ã«ïŒ + reduced-motion å¯Ÿå¿ + äœFPSããŠã³ã°ã¬ãŒã --- const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Windows Phone/i.test(navigator.userAgent) || matchMedia('(pointer: coarse)').matches; const DPR_CAP_DESKTOP = 1.5; const DPR_CAP_MOBILE = 1.25; let dprCap = isMobile ? DPR_CAP_MOBILE : DPR_CAP_DESKTOP; const reduceMotion = matchMedia('(prefers-reduced-motion: reduce)').matches; function applyDPR(cap = dprCap) { const target = Math.min(window.devicePixelRatio || 1, cap); renderer.setPixelRatio(target); renderer.setSize(window.innerWidth, window.innerHeight); return target; } let currentDPR = applyDPR(); const scene = new THREE.Scene(); // ã«ã¡ã©ïŒå³åŽã倧ããèŠããã¬ãŒãã³ã° const camera = new THREE.PerspectiveCamera(48, window.innerWidth / window.innerHeight, 0.01, 100); // æ§å³ãæ¯å埮åŠã«å€ããïŒå°ãã ããžãã¿ãŒïŒ const camX = -1.0 + randRange(-0.15, 0.15); const camY = 0.12 + randRange(-0.12, 0.12); const camZ = 2.0 + randRange(-0.2, 0.2); camera.position.set(camX, camY, camZ); const lookX = 0.4 + randRange(-0.08, 0.08); camera.lookAt(lookX, randRange(-0.05,0.05), randRange(-0.05,0.05)); renderer.physicallyCorrectLights = true; // ===== ã©ã€ãã£ã³ã°ïŒè€æ°ã¹ãããã§âç
§æã£ãœãâé°åœ±ïŒ ===== const amb = new THREE.AmbientLight(0xffffff, 0.08); scene.add(amb); const keyColor = new THREE.Color().setHSL(0.08 + randRange(-0.03,0.03), 0.9, 0.7); const rimColor = new THREE.Color().setHSL(0.58 + randRange(-0.04,0.04), 0.6, 0.7); const fillColor= new THREE.Color().setHSL(0.9 + randRange(-0.03,0.03), 0.8, 0.7); const spotKey = new THREE.SpotLight(keyColor, 40 + randRange(-8,8), 6.0, Math.PI * (0.26 + randRange(-0.03,0.03)), 0.45, 1.0); spotKey.position.set(2.4 + randRange(-0.3,0.2), 3.2 + randRange(-0.3,0.2), 1.8 + randRange(-0.2,0.2)); scene.add(spotKey); const spotRim = new THREE.SpotLight(rimColor, 20 + randRange(-6,6), 6.0, Math.PI * (0.34 + randRange(-0.04,0.04)), 0.5, 1.0); spotRim.position.set(-2.8 + randRange(-0.2,0.2), 1.6 + randRange(-0.2,0.2), -1.6 + randRange(-0.2,0.2)); scene.add(spotRim); const spotFill = new THREE.SpotLight(fillColor, 12 + randRange(-6,6), 6.0, Math.PI * (0.44 + randRange(-0.05,0.05)), 0.8, 1.0); spotFill.position.set(0.0 + randRange(-0.3,0.3), -2.4 + randRange(-0.3,0.3), 2.2 + randRange(-0.3,0.3)); scene.add(spotFill); // ====== åäžã¡ãã·ã¥ã®ãå€é¢äœâåé¢ãå€åãã«ãšã¯ã¹ãã«ãŒãããã¹ã¿ãŒãçæ ====== const baseRadius = randRange(0.7, 0.95); const base = new THREE.IcosahedronGeometry(baseRadius, 0); // 20é¢ïŒãã¹ãŠäžè§åœ¢ïŒ function buildExtrudedStarFromTriPoly(geo, extrude = 1.2) { // éã€ã³ããã¯ã¹ã§ãåäœ const pos = geo.attributes.position; const idxArray = (geo.index && geo.index.array) ? geo.index.array : (function(){ const a = new Uint32Array(pos.count); for (let i=0;i<pos.count;i++) a[i]=i; return a; })(); const positions = []; const colors = []; const color = new THREE.Color(); // ã°ããŒãã«è²çžãªãã»ããïŒåŸé
æ¹åãã©ã³ãã const hueShift = randRange(0, 1); const gradDir = new THREE.Vector3(randRange(-1,1), randRange(0.3,1), randRange(-1,1)).normalize(); for (let f = 0; f < idxArray.length; f += 3) { const ai = idxArray[f], bi = idxArray[f+1], ci = idxArray[f+2]; const a = new THREE.Vector3(pos.getX(ai), pos.getY(ai), pos.getZ(ai)); const b = new THREE.Vector3(pos.getX(bi), pos.getY(bi), pos.getZ(bi)); const c = new THREE.Vector3(pos.getX(ci), pos.getY(ci), pos.getZ(ci)); const ab = new THREE.Vector3().subVectors(b, a); const ac = new THREE.Vector3().subVectors(c, a); const n = new THREE.Vector3().crossVectors(ab, ac).normalize(); const centroid = new THREE.Vector3().addVectors(a, b).add(c).multiplyScalar(1/3); const tip = new THREE.Vector3().copy(centroid).addScaledVector(n, extrude); pushTriWithFaceGradient(a, b, c, f); pushTriWithFaceGradient(a, b, tip, f + 1); pushTriWithFaceGradient(b, c, tip, f + 2); pushTriWithFaceGradient(c, a, tip, f + 3); } function pushTriWithFaceGradient(v1, v2, v3, seed) { const arr = [v1, v2, v3]; let minD = Infinity, maxD = -Infinity; const ds = arr.map(v => { const d = v.dot(gradDir); if (d<minD) minD = d; if (d>maxD) maxD = d; return d; }); const span = Math.max(1e-6, maxD - minD); const baseH = (hueShift + ((seed * 19.23) % 360) / 360) % 1.0; const S = 1.0; const L0 = 0.63; for (let i = 0; i < 3; i++) { const f = (ds[i] - minD) / span; // 0..1 const h = (baseH + f * 1.4) % 1.0; // è¹ã£ãœãåšå const L = THREE.MathUtils.clamp(L0 + (Math.cos((f - 0.5) * Math.PI) * 0.22), 0, 1); color.setHSL(h, S, L); positions.push(arr[i].x, arr[i].y, arr[i].z); colors.push(color.r, color.g, color.b); } } const out = new THREE.BufferGeometry(); out.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3)); out.setAttribute('color', new THREE.Float32BufferAttribute(colors, 3)); out.computeVertexNormals(); return out; } const starGeom = buildExtrudedStarFromTriPoly(base, 1.0); // ===== ãããªã¢ã«ïŒâç
§æã£ãœãâé°åœ±ïŒPBR ãããïŒ ===== const mat = new THREE.MeshStandardMaterial({ vertexColors: true, roughness: 0.85, metalness: 0.05, side: THREE.DoubleSide }); const star = new THREE.Mesh(starGeom, mat); // éå§è§åºŠïŒãµã€ãºã»äœçœ®ãã©ã³ãã åïŒå³å¯ãã¯ç¶æïŒ star.scale.setScalar(randRange(2.2, 2.8)); star.position.x = randRange(0.55, 0.9); star.rotation.x = randRange(0, Math.PI*2); star.rotation.y = randRange(0, Math.PI*2); star.rotation.z = randRange(0, Math.PI*2); scene.add(star); // ===== ã¢ãã¡ãŒã·ã§ã³ïŒåçŽãªãªãã¢åè»¢ïŒ + äœFPSããŠã³ã°ã¬ãŒã ===== const clock = new THREE.Clock(); let rafId = null; // FPS 枬å®çš let fpsFrames = 0; let fpsStart = performance.now(); let degradeSteps = 0; const MAX_DEGRADE_STEPS = 3; // --- FIX: ä¹±æ°ã¯ãæ¯ãã¬ãŒã ããããªããèµ·åæã«1åã ããæ±ºããïŒãã«ãã«é²æ¢ïŒ --- const rotX0 = star.rotation.x; const rotY0 = star.rotation.y; const rotZ0 = star.rotation.z; const rotXSpeed = randRange(0.015, 0.028); // x軞 [rad/s] const rotZSpeed = -randRange(0.012, 0.020); // z軞 [rad/s]ïŒéæ¹åïŒ function maybeDowngrade() { const now = performance.now(); const elapsed = now - fpsStart; if (elapsed >= 1000) { const fps = fpsFrames * 1000 / elapsed; fpsFrames = 0; fpsStart = now; // 45fpsãäžåã£ãã DPR ã 0.25 å»ã¿ã§äžããïŒæå° 1.0ïŒ if (fps < 45 && degradeSteps < MAX_DEGRADE_STEPS && currentDPR > 1.0) { dprCap = Math.max(1.0, +(dprCap - 0.25).toFixed(2)); currentDPR = applyDPR(dprCap); degradeSteps++; // 30fps ãèããäžåããªãã©ã€ããå°ã匱ãã if (fps < 30) { spotKey.intensity *= 0.9; spotFill.intensity *= 0.85; } } } } function renderFrame() { renderer.render(scene, camera); } function tick() { if (reduceMotion) { // åãã«åŒ±ããŠãŒã¶ãŒã¯éæ¢ renderFrame(); return; } const t = clock.getElapsedTime(); star.rotation.x = rotX0 + t * rotXSpeed; star.rotation.y = rotY0; // Yã¯åºå®ïŒéå§è§åºŠã¯ä¿æïŒ star.rotation.z = rotZ0 + t * rotZSpeed; renderFrame(); fpsFrames++; maybeDowngrade(); rafId = requestAnimationFrame(tick); } // ===== ãªãµã€ãºå¯Ÿå¿ïŒDPR ãåé©çšïŒ ===== function onResize() { currentDPR = applyDPR(); camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); } window.addEventListener('resize', onResize); document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'hidden') { if (rafId) cancelAnimationFrame(rafId); } else { tick(); } }); onResize(); tick(); // ====== ãã¹ãïŒDPRäžéã»reduced-motionã»äœFPSããŠã³ã°ã¬ãŒãã®åå°ãæ€èšŒïŒ ====== (function runTests(){ console.groupCollapsed('%c[Hero Tests] DPR cap + reduced-motion + perf', 'color:#111'); try { console.assert(renderer instanceof THREE.WebGLRenderer, 'renderer created'); console.assert(scene && camera && star, 'scene/camera/star exist'); console.assert(star.material instanceof THREE.MeshStandardMaterial, 'using MeshStandardMaterial'); console.assert(star.material.vertexColors === true, 'vertexColors enabled'); // DPR äžéã PC:1.5 / ã¢ãã€ã«:1.25 ãè¶
ããŠããªã const capExpected = isMobile ? DPR_CAP_MOBILE : DPR_CAP_DESKTOP; console.assert(renderer.getPixelRatio() <= capExpected + 1e-6, 'pixelRatio is capped'); // reduced-motion ãã©ã°ã boolean console.assert(typeof reduceMotion === 'boolean', 'reduceMotion flag present'); // ã远å ãseedæªæå®æã« urlSeed ã null ã«ãªãïŒ= 0 åºå®ãã°ãç¡ãïŒ const hasSeed = new URLSearchParams(location.search).has('seed'); if (!hasSeed) console.assert(seedParam === null, 'no-seed should not default to 0'); // ãšã¯ã¹ãã«ãŒãæžã¿ïŒé ç¹æ°å¢å ïŒ const vcount = star.geometry.getAttribute('position').count; console.assert(vcount > 60, 'geometry extruded (vertex count increased)'); // å転ãé²è¡ïŒreduced-motion ã§ãªãç°å¢ã®ã¿ãã§ãã¯ïŒ const rx0 = star.rotation.x, rz0 = star.rotation.z; setTimeout(() => { const rx1 = star.rotation.x, rz1 = star.rotation.z; if (!reduceMotion) console.assert(rx1 !== rx0 || rz1 !== rz0, 'rotation progressing over time'); console.log('All tests passed ✅'); console.groupEnd(); }, 350); } catch (e) { console.error('Test failure:', e); console.groupEnd(); } })(); </script> </body> </html> è£è¶³ ä»åãtech-lab.sios.jpã®ãã¶ã€ã³ãªãã¥ãŒã¢ã«ãæ
åœãããŠããã ããã®ã§ããããããããŒãžã®äžéšèæ¯ã«äžèšã®ããžã¥ã¢ã«ãç»åãšããŠäœ¿çšããŠããŸãã å
ã
ãããŒã®ãã£ã©ã¯ã¿ãŒã§ãããµã€ãããªãŽã³åããããšããã®ããã®three.jsã®å®éšããçæ³ããã¢ã€ãã¢ã§ããã çµå±ããã¡ãã®ãµã€ãã¡ã€ã³ã®ããŒããžã¥ã¢ã«ãšãã圢ã«ãªããŸããã ããªãŽã³åãããµã€ ãã¶ã€ã³æ¡ã®ããªãšãŒã·ã§ã³æ€èšïŒAdobe DXã®ãã£ããã£ïŒ ãããã« three.jsã¯ãªããã³ã³ãã³ãåãã§ããåãæ·å±
ãé«ãã䜿ãã©ãããé£ããããã«èŠãããããããŸããããããžã¥ã¢ã«ã€ã¡ãŒãžæ€èšã®ããã®ããŒã«ã®1ã€ãšããŠæ°è»œã«äœ¿ããšé¢çœããšæããŸãã ã芧ããã ãããããšãããããŸãïŒ ãã®æçš¿ã¯ã圹ã«ç«ã¡ãŸãããïŒ åœ¹ã«ç«ã£ã 圹ã«ç«ããªãã£ã 0人ããã®æçš¿ã¯åœ¹ã«ç«ã£ããšèšã£ãŠããŸãã The post Three.jsã®Vibe Codingã§ããžã¥ã¢ã«ã€ã¡ãŒãžãæ€èšãã first appeared on SIOS Tech Lab .
åç»
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã






