AIã«ä»»ããE2Eãã¹ãã俺TUEEEãšåããŠããã®ã§ãå®ãã¬ã€ç±æ¥ã®ã»ãŒãããŒã¿ã§äœãçŽãã話
以åãClaude Code ãš Unity CLI LoopïŒæ§ uLoopMCPïŒãçµã¿åãããŠãéçºäžã®ã¢ãã€ã«ã²ãŒã ã®ãã¥ãŒããªã¢ã«E2Eãã¹ããèªååããè©±ãæžããŸããã
ãã®åŸãE2Eãã¹ãã®ã·ããªãªãå¢ããç¶ããçµæãåœæã®æ§æã§ã¯ç«ã¡è¡ããªã課é¡ãããã€ãé¡åšåããŸãããæ¬èšäºã¯ããã®è§£æ±ºãšããŠE2Eãã¹ãåºç€ã2段éã§äœãçŽããæçµçã« ãã»ãŒãããŒã¿ã¹ãããã·ã§ãããããŒãããã ãã§æ€èšŒæ¡ä»¶ãå³åçŸãããæ¹åŒãžç§»è¡ãã話ã§ãã
å ã«åæãæžããŠãããšã察象ã¯å°ãäžèŠæš¡ã®ã¢ãã€ã«åãã«ãžã¥ã¢ã«RPGã§ãã倧ããã®ã²ãŒã éçºã§ããã°ãã»ãŒãããŒã¿ã®ã¹ãããã·ã§ããã䜿ã£ãŠãã¹ãããããšèªäœã¯æ®éã«ããããŠããã¯ãã§ãææ³ãšããŠç®æ°ãããã®ã§ã¯ãããŸããã
æ¬èšäºã®äž»çŒã¯ããã§ã¯ãªããã人éãæåã§E2Eãã¹ããå®è¡ã»æ€èšŒãããäœå¶ãããAIãèªåã§E2Eãã¹ããåãããã¹ãã®è¿œå ãä¿®æ£ãŸã§ä»»ãããããäœå¶ãžããã®èŠæš¡ã®éçºã§ã©ãåãæ¿ãããã«ãããŸããã¹ãããã·ã§ããã¯ãã®ããã®åå°ã§ãã
åååæ§ãå®éã«ãã£ãããšã»å€ããããšããŒã¹ã§ãç§»è¡ã®ã¡ãªããã ãã§ãªããã¡ãªãããéçšäžã®æ³šæç¹ãæžããŠãããŸãã
å®è¡ç°å¢
æ¬èšäºã®å 容ã¯ãå·çæç¹ã®ä»¥äžç°å¢ã«ããããã®ã§ãã
- macOS Sequoia 15.7.7
- Unity 6000.3.10f1
- Unity CLI Loop v2.1.10
- Claude Code v2.1.215
ååã®ãããããšããã®åŸ
ååã®èšäºã§ç޹ä»ããã®ã¯ãã»ãŒãããŒã¿åæå â èµ·å â å©çšèŠçŽåæ â ã¡ã€ã³ãã¥ãŒããªã¢ã«å®èµ°ããŸã§ãèªåã§æµãE2Eãã¹ãã§ãããæ§æã¯æ¬¡ã®4å±€ã§ãã
| å±€ | åœ¹å² |
|---|---|
| Claude Code Skill | ã·ããªãªèªã¿èŸŒã¿ã»å®è¡é åºå¶åŸ¡ã»çµæå€å® |
| ã·ã§ã«ã¹ã¯ãªãã | ãã¹ããããŒå¶åŸ¡ïŒã«ãŒãã»sleepã»ãªãã©ã€ïŒ |
| Unity CLI Loop | Unity Editor ãžã®åœä»€éä¿¡ïŒexecute-dynamic-code ã§C#åçå®è¡ïŒ |
| Unity å C# | ãã¿ã³ã¯ãªãã¯ã»ç¶æ æ€ç¥ |
ãAIã«æ¯ã¹ããã倿ããããã®ããããŠããžãã¯ãã·ã§ã«ã¹ã¯ãªããã«åºããããšã§ãããŒã¯ã³æ¶è²»ãšå®è¡æéïŒ240ç§â104ç§ïŒã倧ããåæžã§ããããšããã®ãååã®çµè«ã§ããã
ãã ãåå察象ã«ããã®ã¯ååèµ·åãã¥ãŒããªã¢ã«ã ãã§ãããããã¯ãE2EãšããŠã¯ãã¡ã°ã決å®åãããã顿ã§ããã»ãŒãããŒã¿ãæ¶ãã°æ¯åå¿ ããŸã£ãããªç¶æ ããå§ãŸãã®ã§ãåæç¶æ ã®æºåã«æ©ãå¿ èŠããããŸããã
ãããã²ãŒã ã®æ¬çªã¯ãã¥ãŒããªã¢ã«ã®å ã«ãããŸããç¹å®ã¬ãã«ã§æ©èœãè§£çŠãããè£ åãã¹ãã«ãè²ã¡ãé²è¡åºŠã«ãã£ãŠæåãå€ããããã®ãé²è¡ãã¹ããã«æãåºããç¬éããæ¯ååãé²è¡ç¶æ ãã©ãçšæãããããšãããååèµ·åã«ã¯ååšããªãã£ãåé¡ã«çªãåœãããŸããã
ãã®åé¡ãæ±ãã€ã€ãã·ããªãªãå¢ããç¶ããçµæãçŸåšã¯ãã¥ãŒããªã¢ã«ä»¥å€ã«20æ¬è¶ ã®ã·ããªãªïŒããã«ããã³ãžã§ã³ãã¬ãã£ãæŸçœ®å ±é ¬ããã€ãªãŒããã·ã§ã³ãªã©ïŒãåãããã«ãªããŸãããæ¬èšäºã§ç޹ä»ããã¹ãããã·ã§ããæ¹åŒã¯ããã®é²è¡ãã¹ãçŸ€ãæ¯ããåå°ã§ãã
é¡åšåãã課é¡
E2Eãã¹ãã®ã·ããªãªãå¢ããã«ã€ããŠãåœæã®æ§æã®éçãã¯ã£ãããšèŠããŠããŸããã
課é¡1: bash ã«åã蟌ãã C# æååãå£ãããã
ã·ããªãªããžãã¯ã®å®äœã¯ bash ã¹ã¯ãªããïŒèšçŽ4,100è¡ïŒã«æååãšããŠåã蟌ãã C#ã³ãŒãã§ããããããæ§é çã«èãç¶æ ã§ããã
-
æååããŒã¹ã®ãªãã¬ã¯ã·ã§ã³:
GetField("_claimButton", NonPublic)ã®ãããªåŒã³åºãã¯ã察象ãã£ãŒã«ãã®ãªããŒã ã§å³æ»ããã®ã«ãå®è¡æãŸã§å£ããããšã«æ°ã¥ããªã -
ååã»GameObjectåã®æååäžèŽ:
GetType().Name == "DailyMissionItem"ã®ãããªå€å®ã¯UIãªãã¡ã¯ã¿ã§å³åº§ã«ç Žå£ããã - bash+C#æååã®ãšã¹ã±ãŒãå°çãã·ã§ã« sleep ããŒãªã³ã°ãCLIåŒã³åºãããŸããã§ç¶æ
ãåãæž¡ãããã®
__E2E_BRIDGE__GameObject ããã¯
å£ãããšãã«äœãèµ·ããããšãããšãAIãå®è¡æãšã©ãŒãèŠãŠããã¶ããã®ãã£ãŒã«ãåã«å€ãã£ãã®ã ããããšæšè«ã§è£ãå§ããŠããŸããã§ãããã
ããã§çŽãããšããããŸãããã·ããªãªå®è¡ã®ãã³ã«æšè«ãšãªãã©ã€ãæãŸã£ãŠé ãäžå®å®ã«ãªããææªããã¹ããéãããã«ã誀ã£ãä¿®æ£ãããããªã¹ã¯ããããŸãã
課é¡2: ãã¹ãã®åæç¶æ ãäœãã³ã¹ããé«ããã
ãã£ãšæ·±å»ã ã£ãã®ããã¡ãã§ãã
- ã»ãŒå šã·ããªãªãããã¥ãŒããªã¢ã«å®èµ°æžã¿ã»ãŒãããæé»ã®åæãšããŠãããç¡ãå Žåã¯æ¯åãã¥ãŒããªã¢ã«ãå®èµ°ããŠäœã£ãŠãã
- è§£çŠã¬ãã«ãåæã®ã·ããªãªïŒãã³ãžã§ã³ç³»: Lv6ã仲é: Lv4 çïŒã¯ãã¬ãã«ã¢ããAPIã®å埩å®è¡ + PlayMode åèµ·åãšããé«ã³ã¹ããªã»ããã¢ãããããŠãã
- ããã«ã®åæã決å®åããããã« Lv1000è£ åã®åŒ·å¶ããã¹çŽæµã®åŒ·å¶æå®ã䜿ã£ãŠãããã€ãŸããéåžžãã¬ã€ã§ã¯å°éãåŸãªãç¶æ ãã§ãã¹ãããŠãã
- ã»ãŒãããŒã¿ã®éé¿/埩å
ã macOS å°çšã®ã·ã§ã«æé ïŒ
cp/rm/defaults deleteïŒã«äŸåããŠãã - ã»ãŒãããŒã¿ã®ãã€ã°ã¬ãŒã·ã§ã³æ€èšŒã¯ EditMode ã®åæããŒã¿ãã¹ãã®ã¿ã§ãå®ãã¬ã€ç±æ¥ã®æ§ããŒãžã§ã³ã»ãŒãã«å¯Ÿããæ€èšŒææ®µããªãã£ã
ç¹ã«3ã€ç®ã¯ããã¹ããšããŠããªãçãæªãç¶æ ã§ãããå®ã¯ãããããã«ã·ããªãªã®èšèšããš Claude Code ã«ä»»ããããããªã£ãŠããããšãããã®ã§ãã
ãåæã決å®åãããããšããèŠæ±ã«å¯ŸããŠãAIã¯æ¢åã®ãããã°æ©èœãçµã¿åãããŠãæŠåãšæµã匷å¶ããããšããæççµè·¯ãéžã³ãŸããã
確ãã«æ¯ååãçµæã«ã¯ãªããŸãããã ããããªãLv1000ã®è£ åãåŒã£æããŠåºç€ã®æµãç¬æ®ºããŠããå§¿ã¯ã宿åã®ãã¹ããšããããããŒãèœåãæãã£ãç°äžç転çäž»äººå ¬çãªä¿ºTUEEEã§ããæåã±ãŒã¹ã«è³ã£ãŠã¯ããã¹çŽã®æµã匷å¶åºçŸããããåºç€ã®è¡ã«éç襲æ¥ãæ¹åŒã§ããã
AIã¯å€§çé¢ç®ã«ãåå©ã±ãŒã¹PASSããšå ±åããŠããã®ã§ãããããã§ã¯å®éã®ãã¬ã€ã€ãŒãéãåå©ã»æåãããŒãæ€èšŒããããšã«ã¯ãªããŸããã
ç§»è¡ãã®1: bash+åçã³ãŒã â ã³ã³ãã€ã«æžã¿ C# E2E API
ãŸã課é¡1ãè§£æ¶ãããããã·ããªãªããžãã¯ã bash ãã Editor éå®ã¢ã»ã³ããªã®ã³ã³ãã€ã«æžã¿C# ã«å šé¢ç§»è¡ããŸããã
- E2Eå°çšã¢ã»ã³ããªïŒEditoréå®ã»
!RELEASE_BUILDïŒãæ°èšããå ±éåºç€ïŒE2EContext/E2ESession/E2EAsyncOps/E2EUiQuery/E2EDialogsçïŒãšã·ããªãªå¥APIïŒE2EGameEvent/E2EBattle/E2EDailyMissionâŠïŒãå®è£ -
E2EContextã¯ããŒãæžã¿ã·ãŒã³ããDIã³ã³ããã解決ããService ã Model ãžåå®å šã«ã¢ã¯ã»ã¹ãã - View ã® internal ããããã£ã¯
<Type>.E2E.csã® partial +InternalsVisibleToã§å ¬éãããªãã¬ã¯ã·ã§ã³æååãå šå» - æ§
__E2E_BRIDGE__GameObject ããã¯ã¯ãéå§ãšçµæååŸãåé¢ãã2段APIïŒE2EAsyncOps.Status()ãPENDING/DONE:<result>ãè¿ãïŒã«çœ®ãæã - bash ã¹ã¯ãªãããšå ±é颿°ã©ã€ãã©ãªã¯å šåé€
ãšãŒãžã§ã³ãïŒClaude CodeïŒã®åãæ¹ã¯ãã¹ãã«ã® SKILL.md ã«æžãããæé ã«åŸããuloop execute-dynamic-code ã§E2E APIã1è¡åŒã³åºããããã«å€ãããŸããã
uloop execute-dynamic-code --code 'return MyGame.Tests.E2E.E2EGameEvent.GetState();'
# => "STAMINA:50|COIN:12345|..."
ããã§ãªããŒã ã»ãªãã¡ã¯ã¿ã«ããç Žå£ã¯ã³ã³ãã€ã«æã«æ€ç¥ãããããã«ãªããŸããAIãå®è¡æãšã©ãŒããæšè«ã§è£ãå Žé¢ã¯æ¿æžãããã³ã³ãã€ã«ãéãããšããæ±ºå®çãªãã£ãŒãããã¯ã«ãŒãã«çœ®ãæãããŸããã
ã¡ãªã¿ã«åäœãã¹ã㯠Unity Test FrameworkïŒEditModeïŒã§æ®éã«æžããŠããŸããE2E ããã¹ãã©ã³ããŒïŒPlayModeãã¹ãïŒã«èŒããéžæè¢ã¯ãããŸããããã¹ã¯ãªãŒã³ã·ã§ããã®ç®èŠç¢ºèªã»é²ç»ã»åæ»æã®ç¶æ³å€æãªã©ããã¹ãã©ã³ããŒã®æ ã«åãŸããªãæ€èšŒãAIã«ããããããããæ¬¡ã®åºåããæå³çã«ç¶æããŠããŸãã
- åäœãã¹ã = Unity Test FrameworkïŒEditModeïŒ
- E2Eãã¹ã = ã¹ãã«é§åã®ãšãŒãžã§ã³ãå®è¡ïŒClaude CodeïŒ
UIæäœã®ã«ãŒã«ããã®ç§»è¡ã§åºããŸããã
第äžéžæã¯ uloop simulate-mouse-ui ã«ãã EventSystem çµç±ã®å®ã¯ãªãã¯ã§ããonClick.Invoke() ã¯é衚瀺ã»ç¡å¹åããããã¿ã³ã§ãçºç«ããŠããŸãããããæŒããªãã¯ãã®ãã¿ã³ãæŒããŠããŸããç³»ã®äžå
·åãŸã§æŸãã«ã¯ãã¬ã€ãã£ã¹ãã interactable ã®å®æåãéãå®ã¯ãªãã¯ãå¿
èŠã§ãã
äŸå€ãšããŠãã¯ãªãã¯ã§ç Žæ£ããããã€ã¢ãã°ã ãã¯ãç Žæ£æžã¿ãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ã§ãšã©ãŒã«ãªãããšããã£ããã onClick.Invoke() çŽåŒã³ã«ãã©ãŒã«ããã¯ããŠããŸãã
| æäœå¯Ÿè±¡ | ææ®µ | çç± |
|---|---|---|
| éåžžã®UIãã¿ã³ |
simulate-mouse-uiïŒå®ã¯ãªãã¯ïŒ |
ã¬ã€ãã£ã¹ãã»interactable ã®å®æåãŸã§æ€èšŒãã |
| ã¯ãªãã¯ã§ç Žæ£ããããã€ã¢ãã° |
onClick.Invoke() çŽåŒã³ |
ç Žæ£æžã¿ãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ã§ãšã©ãŒã«ãªãããšããããã |
| ååèµ·åã®é²è¡ã²ãŒãïŒèŠçŽåæã»ãªãŒããã³ã°SkipïŒ | GameObjectåæ€çŽ¢ + onClick.Invoke()
|
åäžïŒç Žæ£åæã®ãã¿ã³ïŒ |
ãã©ãŒã«ããã¯å¯Ÿè±¡ã®ãã¿ã³ã¯å®ã¯ãªãã¯æ€èšŒã諊ããŠããããšã«ãªããããããã¯æ€èšŒã®ç©ŽãšããŠèªèŠãã€ã€ãããã€ã¢ãã°ãéãããã»å ±é ¬ãæ£ããä»äžããããããšããã²ãŒã å ç¶æ ãšæåŸ å€ã®çªåã§æ¬è³ªã®æ€èšŒãæ ä¿ããŠããŸãã
ç§»è¡ãã®2: ã»ãŒãããŒã¿ã¹ãããã·ã§ãã
ãããããæ¬é¡ã§ãã課é¡2ãåæç¶æ ã®æ§ç¯ã³ã¹ããããæ€èšŒå¯Ÿè±¡ã®é²è¡ç¶æ ãååä»ãã»ãŒãããŒã¿ã¹ãããã·ã§ãããšããŠãªããžããªã«ä¿åããããŒãããã ãã§åçŸããæ¹åŒã§è§£æ±ºããŸããã
ãã®ã²ãŒã ã®ã»ãŒãããŒã¿ã¯ã¯ã©ã€ã¢ã³ãå ã®SQLiteåäžãã¡ã€ã«ãšãªã£ãŠããŸãããã®ããã¹ãããã·ã§ããã®å®äœããDBãã¡ã€ã«ã®ã³ã㌠+ ã¡ã¿ããŒã¿JSONãã ãã§æžã¿ãŸãã
ãã£ã¬ã¯ããªæ§æãš E2EFixture API
Tests/E2E/Fixtures~/
âââ README.md # 玢åŒã»éçšã«ãŒã«
âââ v1.2.0/ # æ®åœ±æã®ã¢ããªããŒãžã§ã³å¥ãã£ã¬ã¯ããª
âââ tutorial-completed.db # ã¹ãããã·ã§ããæ¬äœïŒå¹³æSQLiteïŒ
âââ tutorial-completed.manifest.json # DBãšå¯Ÿã«ãªãã¡ã¿ããŒã¿
âââ lv06-dungeon-unlocked.db
âââ battle-win-ready.db
âââ ...
- ãã£ã¬ã¯ããªæ«å°Ÿã®
~㯠Unity ã®ã€ã³ããŒã察象å€ã«ããããã.metaãçæããããEditoréå®ã¢ã»ã³ããªé äžã§ããã«ãæ··å ¥ã®å¿é ããªãïŒã¢ã¯ã»ã¹ã¯ File I/O ã®ã¿ïŒ - ãããã©ãã: ã°ããŒãã« gitignore ã®
*~ãã¿ãŒã³ãšè¡çªããã®ã§ãåéå±€ã®.gitignoreã§æç€ºçã«è¿œè·¡å¯Ÿè±¡ãžæ»ãå¿ èŠããããŸãã - Editor å°ç𿩿§ãªã®ã§DBã¯å¹³æã®ãŸãŸïŒãªãªãŒã¹ãã«ãã®ã¿æå·åãããèšèšïŒ
æäœAPI㯠E2EFixture ã«éçŽããŸããããã¹ãŠ uloop execute-dynamic-code ãã1è¡ã§åŒã³ãŸãã
| API | åäœ |
|---|---|
List() |
ã¹ãããã·ã§ãããããŒãžã§ã³å¥ã«åæïŒJSONïŒ |
Load(name) |
çŸè¡ã®ã»ãŒãDBãéé¿ã¹ããããžéããŠãããã¹ãããã·ã§ãããæ¬æ¥ã®ãã¹ãžã³ããŒããæå»ãªããŒã¹ãå®è¡ |
Capture(name, description) |
çŸè¡DBãã¹ãããã·ã§ãããšããŠæ®åœ±ããmanifest ãèªåèšå ¥ã§æžãåºã |
BackupCurrent() / RestoreBackup()
|
çŸè¡DBã®éé¿ãšåŸ©å ïŒæ§ã·ã§ã«æé ã®APIåïŒ |
ResetToFirstLaunch() |
éé¿ããããã§ååèµ·åç¶æ ïŒDBãªãã»PlayerPrefsãªãïŒãäœã |
GetQuarantineState() |
ãã€ã°ã¬ãŒã·ã§ã³å€±ææã®éé¢ãã¡ã€ã«ïŒSave.corrupted-*.dbïŒã®æç¡ãç¢ºèª |
# ããã ãã§ããã³ãžã§ã³è§£çŠæžã¿ã»Lv6ãã®æ€èšŒæ¡ä»¶ãæŽã
uloop execute-dynamic-code --code 'return MyGame.Tests.E2E.E2EFixture.Load("lv06-dungeon-unlocked");'
# => "OK:loaded:v1.2.0/lv06-dungeon-unlocked:rebased_columns=42"
# ïŒrebased_columns ã¯åŸè¿°ã®æå»ãªããŒã¹ã§æŽæ°ããåã®æ°ïŒ
# ããšã¯ PlayMode ãéå§ããã°ãBoot æã«æªé©çšãã€ã°ã¬ãŒã·ã§ã³ãèªåé©çšãã㊠Main ã«å°éãã
Load ã®1ã³ãã³ãã®è£ã§ã¯ã次ã®äžé£ã®åŠçãèµ°ã£ãŠããŸãã
ãã€ãŠ macOS å°çšã·ã§ã«ã§æžãããŠããéé¿/埩å ã API åããã®ã§ãè±ã·ã§ã«ã»OSéäŸåã«ãªããgit worktree ã§äœæ¥ã³ããŒãåãããšãã® Unity Editor ã®ä¿åå ãã¹åé¢ã«ãèªå远åŸããããã«ãªããŸããã
manifest ã¯ãããªå
容ã§ããCapture() ãæ®åœ±æã®DBå®å€ïŒãã€ã°ã¬ãŒã·ã§ã³IDã»ãã¬ã€ã€ãŒEXPïŒãèªåèšå
¥ããæ®åœ±è
ã説æãšäžå€æ¡ä»¶ã远èšããŸãã
{
"name": "tutorial-completed",
"appVersion": "1.2.0",
"capturedAtUtcTicks": 639192654667712070,
"lastMigrationId": "Migration202601011200",
"pointExpCount": 210,
"description": "ãã¥ãŒããªã¢ã«å®èµ°çŽåŸïŒLv2ã»èªååšåè§£çŠæžã¿ïŒãå
šã·ããªãªã®åºç€",
"generation": "e2e-fixture-capture Phase 1ïŒåæç¶æ
âãã¥ãŒããªã¢ã«å®èµ°ïŒ",
"invariantItemCounts": [],
"invariantUnlockedFeatures": [
"LockedFeature01_IdleRewards",
"LockedFeature02_AutoPlay"
]
}
ã¹ãããã·ã§ããã»ãã
çŸè¡ããŒãžã§ã³ã®ã»ããã¯ä»¥äžã®ãããªåœ¢ã§ããæ©èœã®è§£çŠã¬ãã«å¢çã«åãããŠæ®åœ±ããŠãããã·ããªãªã®åæç¶æ ã«ã¯ããããã¹ãããã·ã§ãããçšæããŠããŸãã
| ã¹ãããã·ã§ãã | ç¶æ | çšé |
|---|---|---|
tutorial-completed |
Lv2ã»èªååšå/æŸçœ®å ±é ¬ è§£çŠ | å šã·ããªãªã®åºç€ |
lv03-equipment-unlocked |
Lv3ã»è£ å è§£çŠ | è£ åç²åŸ/è£ çã·ããªãª |
lv04-companion-unlocked |
Lv4ã»ä»²é è§£çŠ | ã¹ãã«/仲é匷åã·ããªãª |
lv05-pre-daily-mission |
ãã€ãªãŒããã·ã§ã³è§£çŠçŽå | è§£çŠå¢çã®æ€èšŒ |
lv06-dungeon-unlocked |
Lv6ã»ãã³ãžã§ã³è§£çŠ | ãã³ãžã§ã³ç³»ã»ãã€ãªãŒããã·ã§ã³ |
battle-win-ready |
Lv6ã»ä»²é/ã¹ãã«è£ åã®åŒ·ãç¶æ | ããã«åå©ã±ãŒã¹ |
battle-lose-ready |
仲é/ã¹ãã«æªè£ åã®åŒ±ãç¶æ | ããã«æåã±ãŒã¹ |
lv07-pre-next-feature |
次ã®å€§åæ©èœè§£çŠçŽå | è§£çŠå¢çã®æ€èšŒ |
ãè§£çŠçŽåãã®ã¹ãããã·ã§ãããããã®ããã€ã³ãã§ããLv+1ãããæ©èœãè§£çŠãããŠãã¥ãŒããªã¢ã«ãçºç«ããããšããå¢çãã®ãã®ãæ€èšŒããã®ã«äœ¿ããŸãã
èšèšåå: ã¹ãããã·ã§ããã¯ãå®ãã¬ã€ç±æ¥ãã§äœã
ãã®æ©æ§ã§ãã¡ã°ã倧äºã«ããã®ãçæåŽã®ã«ãŒã«ã§ããã¹ãããã·ã§ããã¯åæç¶æ ããã®å®ãã¬ã€ã§å®éã«å°éããç¶æ ã ããåé²ããããšæ±ºããŸããã
æ¹éã¯ãå®ãã¬ã€ã§å°éãåŸãªãç¶æ ãäœãæäœã¯çŠæ¢ãæéãããããã°å®ãã¬ã€ãšåãçµæã«ãªãå éã¯èš±å®¹ãã§ãã代衚äŸãæããŸãã
| æäœ | å€å® | çç± |
|---|---|---|
| ãã¬ã€ã€ãŒEXPãã¢ã€ãã åæ°APIã§çŽæžã | çŠæ¢ | ã¬ãã«ã¢ããæã®ã¹ãããè§£æŸã»ããŒä»äžãªã©ã®ä»éåŠçãèµ°ãããéåžžãã¬ã€ã§ã¯ååšããªãäžæŽåç¶æ ã«ãªã |
| ã¬ãã£ãçµãã«ã¹ãã«/仲éã®ææãçŽæ¥æ³šå ¥ | çŠæ¢ | å®ãã¬ã€ã§ã¯å¿ ãã¬ãã£ãçµç±ãããããéåžžãã¬ã€ã«ååšããªãææç¶æ ã«ãªã |
| Lv1000è£ åã»ãã¹çŽæµæå®ãªã©ã®åŒ·å¶ | çŠæ¢ | éåžžãã¬ã€ã§åºçŸãåŸãªãå€ã«ãªã |
| åéã®èªååšå | 蚱容 | å®éã®æœéžã»å®éã®å ±é ¬ã§ããã¡ã€ã³ã³ãŒããã¹ã¯éåžžãã¬ã€ãšåäž |
| EXPå ç®APIã«ããã¬ãã«ã¢ãã | 蚱容 | éåžžã®ç²åŸãšåäžã³ãŒããã¹ïŒã¬ãã«éŸå€ãäžæ°ã«é£ã³è¶ãã1éŸå€ãã€ïŒ |
ãæœéžã¯åºå®ããŠãããçµæã¯æé ããªãã
蚱容ãšçŠæ¢ã®ç·åŒããäžè¬åãããšããåå²ãæœéžã®è¡ãå 㯠Debug æ©èœã§åºå®ããŠããããã ããã®çµæçããç¶æ ã¯ãå®ãã¬ã€ãšåãã³ãŒããã¹ã§çºçãããã ãšãªããŸãã
-
蚱容: ã©ã³ãã ã€ãã³ãã®æœéžçµæã
ForceGameEvent("Battle")ã§ããã«ã«åºå®ãããã©ã®ã€ãã³ããåºãããåºå®ããã ãã§ããã®ããã«ã®æµãåæãå®ãã¬ã€ãšåãïŒå®æŠã»å®çµæïŒ - çŠæ¢: Lv1000è£ åã»ãã¹çŽæµã®åŒ·å¶ãçµæïŒæŠåã»æµã®åŒ·ãïŒãã®ãã®ã®æé
ãã®ææ³ã®ä»£è¡šäŸãæåçšã¹ãããã·ã§ãã battle-lose-ready ã®çæã§ããèªç¶ã«é²è¡ãããšè£
åãè²ã£ãŠéåžžããã«ã«ã¯åã¡ç¶ããŠããŸãããéåžžããã«ã§è² ããç¶æ
ããäœããŸããã
ããã§ãæ¬¡ã®æé ãèžã¿ãŸããã
- ã€ãã³ãæœéžãããã«åºå®ã«ããŠè£ åãäžåç²åŸãããã«é²è¡ããïŒè£ åã¯åæå€ã®ãŸãŸïŒ
- 仲é/ã¹ãã«ã¯è£ åãããŸãŸãã¹ãçªç Žããã¹ããŒãžã ãé²ãã â è£ åãã¹ããŒãžçžå¿ã®æµã«è¿œãã€ããªããªã
- ååé²ãã ã仲é/ã¹ãã«ãå€ã â éåžžããã«ã®é£æŠã§HPãåããã2ã3æŠç®ã«èªç¶æåãã
ãã®æåã¯å®éã®æµãšã®å®æŠã®çµæã§ãã£ãŠããã¹çŽæµåŒ·å¶ã®ãããªæé ã§ã¯ãããŸãããã²ãŒã èšèšïŒä»²é/ã¹ãã«ïŒäž»èŠæŠåãè£ åïŒéåžžæŠã®åæããã¹ïŒé²è¡ã®å£ïŒãå©çšããŠãèªç¶ã«è² ããç¶æ ããäœã£ãŠããã®ããã€ã³ãã§ãã
ãªãããã®ç¶æ ã§ããäœæŠç®ã§è² ããããã¯2ã3æŠã®å¹ ã§ãã¬ãŸãããã®ããã·ããªãªåŽã¯ ãè² ãããŸã§æœéžãç¹°ãè¿ããæçã«ãŒãåã«ããŠãã¬ãåžåããæ±ºå®åããã®ã¯ãå¿ ãæåã«åæããããšããæ¹åã ãã«çµã£ãŠããŸãã
åå©åŽã® battle-win-ready ã¯éã«ä»²é/ã¹ãã«ãè£
åããç¶æ
ã§æ®åœ±ããåæãã¢ãã仲é/ã¹ãã«ã®æç¡ãã§å¯Ÿç§°ã«æ±ºå®åããŸãããããã«ã·ããªãªã®æé æžãã㯠Lv1000 è£
å匷å¶ã»ãã¹çŽæµåŒ·å¶ãå®å
šã«æ¶ããŠããŸãã
ã¡ãªã¿ã«ãã®ãã¢èšèšã¯ãæåããçã£ãŠããããã§ã¯ãããŸãããåœåã®åå©ã±ãŒã¹ã¯ãèªç¶ã«è²ã£ãè£ åã§ãã¹ã«åã€ãæ³å®ã ã£ãã®ã§ãããæ®åœ±äžã®å®æž¬ã§åãŠãªãããšã倿ãåæãå·Šå³ããã®ã¯è£ ååã ãã§ã¯ãªã仲é/ã¹ãã«ã掻çšãããåŠãã ãšåãããã仲é/ã¹ãã«ã®æç¡ãã®ãã¢èšèšã«æ¹é転æããŸããã
ç°åžžå€ã§æ±ºå®åããŠããé ã«ã¯èŠããŠããªãã£ãã²ãŒã ãã©ã³ã¹ã®å®æ ããå®ãã¬ã€ç±æ¥ã«åãæ¿ããããšã§èŠããŠããããšããå¯ç£ç©ã§ããããŸããã
æå»ã®ãªããŒã¹
ã¹ãããã·ã§ããæ¹åŒç¹æã®åé¡ãã²ãšã€ãããŸããã»ãŒãããŒã¿å ã®æå»ïŒæŸçœ®å ±é ¬ã®æçµååããã€ãªãŒããã·ã§ã³ã®ãªã»ããçïŒã¯çµ¶å¯ŸUTCæå»ã§ä¿åãããŠããããnow â ä¿åæå»ãã§çµéãç®åºããŸããã€ãŸãæ®åœ±ããæéãçµã£ãã¹ãããã·ã§ããããã®ãŸãŸããŒããããšãæŸçœ®å ±é ¬ãæºã¿ã³ã«ãªã£ãŠãããªã©æ®åœ±æãšéãç¶æ ã«ãªã£ãŠããŸããŸãã
察çãšããŠãLoad ã¯DBã³ããŒçŽåŸã«ãæ®åœ±æå»ãšçŸåšæå»ã®å·®åããå¯Ÿè±¡ã®æå»åãžäžåŸå ç®ããŸããçžå¯Ÿé¢ä¿ãä¿ã£ããŸãŸãããŸæ®åœ±ãããããšã«ããããã§ãã
ã¹ãããã·ã§ããã®çæãE2Eã§èªèµ°ãã
ã¹ãããã·ã§ããã¯æäœæ¥ã§äœãã®ã§ã¯ãªããçæãã€ãã©ã€ã³èªäœã Claude Code ã®ã¹ãã«ïŒæé æžïŒã«ããŸããã
-
ResetToFirstLaunch()ã§ååèµ·åç¶æ ãäœã - æ¢åã®ãã¥ãŒããªã¢ã«E2EïŒååèšäºã®ã·ããªãªã®åŸç¶ïŒã§ãã¥ãŒããªã¢ã«ãå®èµ° â
Capture("tutorial-completed", ...) - 以éã¯åã®ãã§ãã¯ãã€ã³ãããç¶ç¶ãã¬ã€ã§å·®åçæãåéã®èªååšåã§ã¬ãã«ãäžããè§£çŠã¬ãã«ã®éŸå€ããšã«åæ¢
- è§£çŠãã¥ãŒããªã¢ã«ãçºç«ãããå®éã«æ¶åããŠããæ®åœ±ïŒãã¥ãŒããªã¢ã«ã®æã¬ã€ã座æšãè¿ãAPIãå©ããè¿ã£ãŠãã座æšã
simulate-mouse-uiã§ã¿ãããã®ã«ãŒãïŒ
4ã¯å°å³ã«éèŠã§ãPlayMode åèµ·åã§ãã¥ãŒããªã¢ã«ãã¹ãããããŠæ®åœ±ããããšã¯çŠæ¢ã«ããŠããŸããã¬ã€ãäžã®å®æäœïŒã¬ãã£ãåŒãã»è£ åããïŒãã»ãŒãã«åæ ããããéåžžãã¬ã€ãšä¹é¢ããã¹ãããã·ã§ããã«ãªã£ãŠããŸãããã§ãã
ãã®çæãããŒãå³ã«ãããšæ¬¡ã®ããã«ãªããŸããåã®ãã§ãã¯ãã€ã³ãããç¶ç¶ãã¬ã€ããè§£çŠå¢çããšã«åæ¢ããŠæ®åœ±ããã«ãŒãæ§é ã§ãã
å¯ç£ç©: æ§ããŒãžã§ã³ã®ã¹ãããã·ã§ããããã€ã°ã¬ãŒã·ã§ã³æ€èšŒã®ãã¹ãããŒã¿éã«ãªã
ã¹ãããã·ã§ãããããŒãžã§ã³å¥ãã£ã¬ã¯ããªã«ä¿ç®¡ããæ§ããŒãžã§ã³ã®ã»ããã¯åé€çŠæ¢ãšããã«ãŒã«ã«ããããšã§ãæãã¬åŒ·åãªå¯ç£ç©ãçãŸããŸããã
èµ·åæã®ãã€ã°ã¬ãŒã·ã§ã³ã¯æªé©çšåãèªåé©çšããã®ã§ãæ§ããŒãžã§ã³ã®ã¹ãããã·ã§ããã¯ãã®ãŸãŸãå®ãã¬ã€ç±æ¥ã®æ§ã»ãŒãããŒã¿ããšããŠãã€ã°ã¬ãŒã·ã§ã³ã®ååž°æ€èšŒã«äœ¿ããŸãã
æ€èšŒã¯2å±€ã§ãã
-
EditMode ãã¹ãïŒé«éã»å
šæ°ïŒ: å
šããŒãžã§ã³ã®å
š
.dbãåæ â tempã³ã㌠â ãã€ã°ã¬ãŒã·ã§ã³å®è¡ â ãäŸå€ãªãã»é©çšæžã¿IDãææ°ã»manifest ã®äžå€æ¡ä»¶ïŒEXPå€ã»ææã¢ã€ãã ã»è§£çŠæ©èœïŒãæç«ãã assertããã€ã°ã¬ãŒã·ã§ã³ã远å ãããšèªåã§ååž°ã²ãŒãã«ãªã -
E2E ããŒãã¹ã¢ãŒã¯ïŒå®çµè·¯ïŒ: æ§ã¹ãããã·ã§ããã
Loadâ å®éã« Boot â Main å°éã»Errorãã°0ä»¶ã»ç Žæéé¢ãã¡ã€ã«ïŒSave.corrupted-*.dbïŒãçæãããŠããªãã»é²è¡ããŒã¿ãç¶æãããŠãããã確èª
åŸæ¥ãåæããŒã¿ã® EditMode ãã¹ãã®ã¿ãã ã£ããã€ã°ã¬ãŒã·ã§ã³æ€èšŒããå®ãã¬ã€ç±æ¥ã®ããŒã¿ã§èªåååž°ããäœå¶ã«ãªããŸããã
ç§»è¡ããŠåŸããããã®
åœåçã£ãŠãã芳ç¹ãšããã£ãŠã¿ãŠåãã£ã广ããŸãšããŸããååã¯å®è¡æéã®ççž®ãææãšããŠåŒ·èª¿ããŸããããä»åã®ç§»è¡ã§ã¯å®è¡æéãããŸãéèŠããŠããŸããã
ãã㯠git worktree ã§äœæ¥ç°å¢ãåããŠAIã«ãã¹ããèªåå®è¡ãããéçšãå®çãã人éãå®äºãåŸ ã£ãŠåŒµãä»ãå Žé¢èªäœãæžã£ãããã§ããæéã®ãããããŒã¿çæåŽãåéãããã°æ©èœã§èµ°ããããäœæäžã®ããã«ããã¯ã«ãªã£ãŠããŸããã
1. æšè«ã«å§ããéšåã®æžå°
- ã·ããªãªããžãã¯ã¯ã³ã³ãã€ã«æžã¿C#ã«ãªãããªããŒã ç Žå£ã¯ã³ã³ãã€ã«æã«æ€ç¥ãAIãå®è¡æãšã©ãŒããããã¶ãããçŽãã°ããšæšè«ããå Žé¢ãã»ãŒæ¶ãã
- åæç¶æ
ã®æ§ç¯ã
Load("battle-lose-ready")ãªã©ã®1ã³ãã³ãã«ãªãããã¬ãã«äžããè¶³ããŠãããããåæã»ãŒãããããããAIã倿ããäœå°ããªããªã£ã - AIã®åœ¹å²ã¯ ãSKILL.md ã®æé ãé ã«å®è¡ããæ±ºå®çãªAPIã®æ»ãå€ïŒ
OK:/ERROR:ïŒãæåŸ å€ãšçªåããŠçµæãå ±åãããã«éçŽããã - 課é¡1ã§æããããã¹ããéãããã«èª€ã£ãä¿®æ£ããããããªã¹ã¯ããããžãã¯ãã³ã³ãã€ã«æžã¿ã³ãŒããšã¬ãã¥ãŒå¯Ÿè±¡ã®æé æžïŒSKILL.mdïŒã«åºå®ãããããšã§ãæžãæããå¿ ã PR ã®å·®åãšããŠå¯èŠåãããããã«ãªã£ã
2. åçŸæ§ã®ç¢ºç«
- å šã·ããªãªãæ¯ååäžã®DBãã¡ã€ã«ããéå§ããããå®è¡ã®ãã³ã«åŸ®åŠã«éãã»ãŒãç¶æ ã§èµ°ãããšããªããªã£ã
- åæã®ãããªç¢ºççã«èŠããçµæãããåãŠãé²è¡ç¶æ ããè² ããé²è¡ç¶æ ãã®ã¹ãããã·ã§ãããã¢ã§æ±ºå®åããããç°åžžå€ã§ã¯ãªãå®ãã¬ã€ç±æ¥ãªã®ã§ãæ€èšŒããŠããã®ã¯æ¬ç©ã®åå©/æåãããŒ
- æå»ãªããŒã¹ã«ãããæéäŸåã®ç¶æ ïŒæŸçœ®å ±é ¬ã»ãã€ãªãŒãªã»ããïŒãæ®åœ±æã®ãŸãŸåçŸããã
3. ãã¹ã远å ã»å€æŽã®ãããã
æ°ã·ããªãªã®è¿œå ããåæã¹ãããã·ã§ããåã®æå® + æ€èšŒæé ã® markdown + å¿ èŠãªãå°ããªE2E APIãã ãã«ãªããŸãããåæç¶æ ã®æ§ç¯ã³ãŒããæžãå·¥çšãäžžããšæ¶ããŠããŸãã
å®éãç§»è¡å®äºåŸã«ã¯ãããšããšè¿œå ãæ³å®ããŠããåºæ¬æ©èœã®æ€èšŒã·ããªãªãç¶ãããŸã«è¿œå ã§ããŸãããããããåæã¯ã¹ãããã·ã§ããã® Load ã ãã§ãåææ§ç¯ã®ã³ãŒãã¯æžããŠããŸãããæåæ¡ä»¶ãæ¢åã·ããªãªãšåãããæåŸ
å€ãšã®å³å¯äžèŽã»Errorãã°0ä»¶ãã§ãã
4. AIã®èªå·±ã«ãŒã匷å
å人çã«äžçªå¹æãæããŠããã®ãããã§ããE2Eã®åæã»æé ã»æ€èšŒããã¹ãŠã¹ãã«ïŒæé æžïŒãšã³ã³ãã€ã«æžã¿APIã«æ§é åãããããšã§ãClaude Code ãèªåŸçã«åããã«ãŒãã倪ããªããŸããã
- æ°æ©èœã®å®è£ ãäŸé Œãããšãæ¢åã®E2Eã¹ãã«ãåèã«å¯Ÿè±¡æ©èœã®E2Eãã¹ãã远å ããé¢é£ããæ¢åãã¹ããå®è¡ããŠå垰確èªãŸã§ãã£ãŠããããããã¹ããæžããŠããšèšããªããŠããé£ã®ã·ããªãªã®åœ¢åŒã«å£ã£ãŠæããŠãã
- äžå ·åæ€åºã®è³ªãäžãã£ããå®ãã¬ã€ç±æ¥ã®ç¶æ ã§åãã®ã§ãç°åžžå€ãã¹ãã§ã¯èžããªãã£ãæ¬ç©ã®ã³ãŒããã¹ïŒè§£çŠãã¥ãŒããªã¢ã«ãå ±é ¬ãªãŒããŒã¬ã€ãã¹ãã¢ã¬ãã¥ãŒèŠæ±ã®å²ã蟌ã¿âŠïŒãèžã
-
ä¿®æ£âæ€èšŒã®ã«ãŒããéããäžå
·åãèŠã€ããã該åœã¹ãããã·ã§ããã
LoadããŠå³åçŸãä¿®æ£ããŠåãæé ã§åæ€èšŒãåçŸæé ã®æ§ç¯ãäžèŠ
ããã宿ãããšããœãŒããã²ãšã€ç޹ä»ããŸãã
ã¹ãããã·ã§ããæ®åœ±ã®ããã«åéã®èªååšåã§æŸçœ®ãã¬ã€ããããŠãããšãããUnity Editor ãç¹°ãè¿ãããªãŒãºããåé¡ã«ééãClaude Code ãšäžç·ã«ãã°è§£æãšã¹ã¿ãã¯ãã³ãæ¡åã§è¿œç©¶ããçµæãçå ã¯ãã¥ãŒããªã¢ã«ã®æã¬ã€ãå®è£ ã«æœãã§ããç¡éã«ãŒããã°ã§ã宿©ã§ããã¬ã€ã€ãŒãèžã¿åŸããã®ã§ããã
ã€ãŸãããã¹ãããŒã¿ããå®ãã¬ã€ç±æ¥ãã§äœãæ¹éã«ãããããã§ãæ®åœ±èªäœãé·æéæŸçœ®ãã¬ã€ã®ã¹ãã¬ã¹ãã¹ããšããŠæ©èœããæ¬çªã§èµ·ãåŸããã°ãäºåã«æ€åºã»ä¿®æ£ã§ããããã§ãã
ç°åžžå€æ³šå ¥ã§ã¹ãããã·ã§ãããäœã£ãŠãããããããããã®ãã°ã¯èžããŠããŸããã
ãã¡ãªããã»éçšäžã®æ³šæç¹
ããããšã°ããã§ã¯ãªãã®ã§ãææ¡ããŠããã³ã¹ãã䞊ã¹ãŠãããŸãã
- ãã€ããªã³ããã: SQLiteãã¡ã€ã«ã¯PRã§å·®åã¬ãã¥ãŒã§ããªããmanifest ã®äœµèšãšãçæãã€ãã©ã€ã³ã§åçŸå¯èœãã§ããããšã§è£ã£ãŠããããã¬ãã¥ãŒäœéšã¯ç¢ºå®ã«æªåãã
- ãªããžããªã®è¥å€§: ããŒãžã§ã³ã»ãããå¢ããã»ã©ãªããžããªã¯èšããããã ããµã€ãºã¯1æ¬ããã200KB匱ã»çŸè¡ã»ããå šäœã§ãçŽ1.5MBãªã®ã§ããã¹ããä»åŸå¢ããŠãåœé¢ Git LFS çã®å¯Ÿçãèããå¿ èŠã¯ãªãèŠæš¡
- ããŒãžã§ã³ã¢ããããšã®åæ®åœ±ã³ã¹ã: ã¢ããªããŒãžã§ã³ãäžãããã³ã«ææ°ã»ãããçæãã€ãã©ã€ã³ã§æ®ãçŽãéçšãå¿ èŠãèªèµ°ãããšã¯ããå®ãã¬ã€ç±æ¥ãªã®ã§æéã¯ããã
- ã²ãŒã ãã©ã³ã¹èª¿æŽãšã®ä¹é¢ãªã¹ã¯: ãbattle-win-ready ã§èªç¶ã«åãŠãããšããæ§è³ªã¯ãã©ã³ã¹èª¿æŽã§åŽ©ãåŸããã·ããªãªåŽã®åæã¢ãµãŒãïŒæåŸ ç¶æ ã§ãªããã°ãåæ:ãã¡ãã»ãŒãžã§æç€ºçã«å€±æïŒã§æ€ç¥ããèšèšã«ããŠããããæ ¹æ¬çã«ã¯åæ®åœ±ã§è¿œåŸãããããªã
-
æå»åã®è¿œåŸéçš:
DateTimeãä¿åããæ°ããååã远å ãããããªããŒã¹å¯Ÿè±¡åã®äžèŠ§ãæŽæ°ããå¿ èŠããããã»ãŒãããŒã¿ä»æ§ã®æŽæ°ãã§ãã¯é ç®ã«çµã¿èŸŒãã§éçšã§ã«ã㌠- ãšãã£ã¿E2Eå°çš: 宿©ãã«ãã¯DBæå·åã»ãã¹å·®ç°ããããã察象å€ã宿©ã§ã®æ€èšŒã¯å¥ã®ææ®µãå¿ èŠ
- ããŒã«ã«å®è¡åæ: çŸç¶ã¯æå ã® Unity Editor + Unity CLI Loop ã§å®è¡ããåæã§ãCI ã«ã¯çµã¿èŸŒãã§ããªããCI çµã¿èŸŒã¿ã¯å°æ¥çã«ã§ããã°ãšèããŠããæ®µéã§ãå®çŸæ¹æ³ã¯ãŸã æ·±æãããŠããªã
Before / After ãŸãšã
| èŠ³ç¹ | Before | After |
|---|---|---|
| ã·ããªãªããžã㯠| bash çŽ4,100è¡ã«C#æååãåã蟌㿠| ã³ã³ãã€ã«æžã¿C#ïŒEditoréå®ã¢ã»ã³ããªïŒ |
| ç Žå£ã®æ€ç¥ | å®è¡æïŒAIãæšè«ã§ãªã«ããªïŒ | ã³ã³ãã€ã«æ |
| åæç¶æ ã®æ§ç¯ | ãã¥ãŒããªã¢ã«å®èµ° / ã¬ãã«ã¢ããå埩 + PlayMode åèµ·å |
E2EFixture.Load("...") 1ã³ãã³ã |
| ããã«åæã®æ±ºå®å | Lv1000è£ åã»ãã¹çŽæµã®åŒ·å¶ïŒããããªãç¶æ ïŒ | å®ãã¬ã€ç±æ¥ã®åŒ·/匱ã¹ãããã·ã§ãããã¢ïŒå®æŠã»å®çµæïŒ |
| ã»ãŒãéé¿/埩å | macOSå°çšã·ã§ã«æé | C# APIïŒOSéäŸåã»git worktree 远åŸïŒ |
| ãã€ã°ã¬ãŒã·ã§ã³æ€èšŒ | åæããŒã¿ã® EditMode ãã¹ãã®ã¿ | + å®ãã¬ã€ç±æ¥ã®å šã¹ãããã·ã§ããååž° + å®èµ·åã¹ã¢ãŒã¯ |
| æéäŸåã®ç¶æ | å®èµ°ãªã®ã§åžžã«ãä»ãïŒããããäœããªãç¶æ ãïŒ | æå»ãªããŒã¹ã§æ®åœ±æã®ç¶æ ãåçŸ |
ãããã«
ååã®èšäºã§ã¯ããã¹ãããžãã¯ãAIã®æšè«ããæ±ºå®çãªã³ãŒãã«å¯ãããããšã§é床ãšåçŸæ§ãåŸãŸãããä»åã¯ãããããã«é²ããŠããã¹ãã®åæç¶æ ãŸã§æ±ºå®çãªææç©ïŒã¹ãããã·ã§ããïŒã«å¯ããããšã«ãªããŸãã
æ¹éã¯äžè²«ããŠãããAIã«å§ããç¯å²ããAIãäžçªåŸæãªéšåïŒæé ã®å®è¡ãšçµæã®è§£éã»å ±åïŒãŸã§çµã蟌ãããšãã圢ã§ããç¶æ æ§ç¯ãããžãã¯ã決å®åãããçµæãé説çã§ãããAIã¯æ°ãããã¹ãã®è¿œå ãäžå ·åã®èª¿æ»ãšãã£ãåµé çãªä»äºã«éäžã§ããããã«ãªããèªå·±ã«ãŒãã¯ããã匷åãããŠããŸãã
ãE2Eãã¹ãã®ã»ããã¢ãããéããŠã·ããªãªãå¢ãããªãããAIã«ãã¹ããä»»ããããå®è¡ã®ãã³ã«æåãæºããããšããæ¹ã«ã¯ãã»ãŒãããŒã¿ã¹ãããã·ã§ããæ¹åŒã¯ããªãããããã§ããŸããSQLiteåäžãã¡ã€ã«ã®ãããªããŒã¿ãã«ãªã»ãŒã圢åŒãæ¡çšããŠããã²ãŒã ãªããå°å ¥ã®ããŒãã«ã¯ããã»ã©é«ããªãã¯ãã§ãã
ãªããä»å玹ä»ããä»çµã¿ã®æè»œãã¯ãã»ãŒãããŒã¿ãããŒã«ã«å®çµããŠãããããšã«æ¯ããããŠããŸããåè¿°ã®ãšããæ¬ã¿ã€ãã«ãå°æ¥çã«ã¯SaaSã¯ã©ãŠããžã®ã»ãŒãããŒã¿ç§»è¡ãæ€èšããŠããããã®éã¯ãDBãã¡ã€ã«ã®ã³ããŒããšããã¹ãããã·ã§ããã®å®äœã¯æç«ããªããªããŸãã
ããã§ããååä»ãã®é²è¡ç¶æ ãå®ãã¬ã€ç±æ¥ã§æ®åœ±ããããŒãããã ãã§æ€èšŒæ¡ä»¶ãåçŸããããšããèãæ¹èªäœã¯ãµãŒããŒåŽã®ãã¹ãããŒã¿èšèšã«ãã®ãŸãŸæã¡èŸŒããã¯ãã§ãç§»è¡æã«ã¯ãã®æ©æ§ãã©ãåŒãç¶ãããèšèšé ç®ã®äžã€ã«ãªãäºå®ã§ãã
åè
Discussion