
ãAIÃ瀟å ã·ã¹ãã éçº #1ããªãŒããŒããŸãæ¯ããå¥çŽã»åæ¯ã®ã·ã¹ãã ããAI ãšäžç·ã«å€§é²åãããå幎 | NOT A HOTEL
ãã®èšäºã¯ãNOTAã®ãã¯ãããžãŒé£èŒãTech Behind the Scenesãã§ãã
ããã«ã¡ã¯ãäžå°Ÿ(@nakaohiroshi)ã§ããNOTA(æ§ NOT A HOTEL)ã§ãœãããŠã§ã¢ãšã³ãžãã¢ãããŠããŸãã
æ°ã¥ãããåã®æçš¿ãã3幎ãçµã£ãŠãããã§ããã
ãã®å¹Žéœ¢ã«ããªããš3幎ãªããŠãã€ã2,3æ¥åã®ããšã®ããã§ãã
æè¿ã¯èçŒã«æããªãã(æããŠããªããã©)ãæ¥ã
ç»é¢ãšåãåã£ãŠãããŸãã
ç»é¢ã¯ãã«ããã°ãã«ãã»ã©ããã§ãã

ããŠã3幎åã«ãéå¶ã·ã¹ãã ããŒãããäœãããã·ããæžããŸãããäºçŽæ©èœç·šãç¶ããŠæžããŠããŸãããã®ãšãæ åœããŠãã宿æ³ã®éçšã·ã¹ãã ã¯ãããŸã¯åŸä»»ã®ã¡ã³ããŒã«èšããŠããŸãã
ãããŠæè¿ã¯ããªãŒããŒããŸã®å¥çŽã忝ãè«æ±ãªã©ã管çãã瀟å ããŒã«ã®éçºãã¡ã€ã³ã§ãã
ã¡ãªã¿ã«å°éã¯ããã¯ãšã³ã(BE)ã§ãååã®èšäºããBackend API æ åœããšããŠæžããŠããŸãã
ãã㪠BE ãšã³ãžãã¢ãããã®å幎㯠BE ã«å ããŠãããã³ããšã³ã(FE)ãã¬ãããªããããšã«ãªããŸããã
ãã®ããŒã«ã AI(Claude Code)ãšäžç·ã«éçºããŠããŠãç¹ã«ç»é¢ãŸããã¯ãæ°ã¥ãããèŠéããã»ã©å€§ããé²åããç¶æ ã«ãªã£ãŠããŸããã
ä»åã¯ãã®ããã·ããåºãã£ãç¯å²ãšã確ããæ¹ã®å€åãäžå¿ã«æžããŠã¿ãŸãã
ç®æ¬¡
3幎ã¶ãã® note
ååã¯ããŒãããäœã楜ããããæžããŸãããä»åã¯éã§ããã§ã«ãããã®ãé²åãããæ¥œãããã§ãã
ãŒãããäœããšãã¯ãçœçŽã®èªç±ãããããŸããé²åããããšãã¯ãããŸã®éçšãæ¥åãæ¢ããªããŸãŸãåããŠãããã®ã«æãå ¥ããŠãããšãããå¥ã®é¢çœããšé£ããããããŸãã
ããŒãããäœã£ããã®ããæ¬¡ã®äººãè²ãŠãŠãããã®ã¯ããšãŠãå¥å šãªåœ¢ã ãšæã£ãŠããŸãã
3幎åã® note ã䜵ããŠèªãã§ããã ãããšã
BE ã®èªåããFE ãã¬ãããªãã£ãŠã¿ã
æ£çŽã«èšããšãFE ã¯ãèªãããã©ãæ¬è·ã§ã¯ãªããé åã§ããã
React ã®ããŒãžã§ã³ãäžãã£ãããCSS ã®ãã¬ãŒã ã¯ãŒã¯ãå€ãã£ãããããã³ã«ãé ãããçºããŠããŸããã
ããããAI ãšçµãã ããšã§å€ãããŸããã
ç»é¢ã®èšèšã¯ãUI/UX ãã¶ã€ããŒåœ¹ã® AI ããäºäŸã調ã¹ãããã§æ¡ãåºããŠãããŸã
å®è£ ã¯ãããã³ããšã³ãæ åœã® AI ãæžããŸã
èªåã¯ãBE ã§éãããããŒã¿ã®æµãããšãå£ãæ¹ãã®ç®ã§ã¬ãã¥ãŒããŸã
ããšãã°ãåãã§ãã¯ãéã£ãŠããã®ã«ãç»é¢ã§ã¯ã°ã©ãã空ã«ãªãã
ãã®æã®äžå ·åã¯ãAPI ãè¿ãå€ã®åœ¢(æ°å€ãæååã§è¿ã£ãŠãããªã©)ãç¥ã£ãŠãããšãããåå ã®èŠåœãã€ããŸãã
BE ã®çµéšããFE ã®ã¬ãã¥ãŒã§å¹ããšããã®ã¯ããã£ãŠã¿ãŠåããŠåãã£ãçºèŠã§ããã
ãã¡ãã BE ã®ä»äºããªããªã£ãããã§ã¯ãããŸããããã®ããŒã«ã§ã¯ãèŠä»¶ã®æŽçãã APIãç»é¢ãŸã§ãäžæ°éè²«ã§æ åœããŠããŸãã
OMT ãšã¯ïŒ
ãã®ããŒã«ãã瀟å ã§ã¯ãOMT(Owner Management Tool)ããšåŒãã§ããŸãã䜿ãã®ã¯éå¶åŽã®ã¡ã³ããŒã§ãã
ãªããåã®å®¿æ³ã®éçšã·ã¹ãã ã¯ãPMSããšåŒãã§ããŸãã
NOT A HOTEL ã®ãªãŒããŒã·ããã¯ãèªç€Ÿãªãã§ã¯ã®ä»çµã¿ãªã®ã§ã管çããŒã«ãããã«åãããŠèªç€Ÿã§äœã£ãŠããŸãã
æ±ãã®ã¯ã忝ã®ã¬ããŒããè«æ±ãå£åº§æ¯æ¿ããªãŒããŒããŸã®å¥çŽã宿æ³å¯èœãªæ¥æ°ãªã©ããéãšã«ãŒã«ããããé åã§ãã
ã ãããããç»é¢ã®èŠãããããæäœã®ãããããããã®ãŸãŸæ¥åã®æ£ç¢ºãã«ã€ãªãããŸãã
å幎ã§äœãå€ãã£ãã(æ°åã§èŠã)
4æ23æ¥ãš10æ24æ¥ã®æç¹ããç»é¢åŽã®ãªããžããª(ãœãŒã¹ã³ãŒãã® src é äž)ã§æ¯ã¹ãŸãããAPI åŽã¯å«ã¿ãŸããã
æ°åã䞊ã¹ãŸãããäŒãããã®ã¯ãã³ãŒããå¢ãããããšã§ã¯ãããŸããã確ãããªããé²ããããç¯å²ããåºãã£ãããšã§ãã
ãœãŒã¹ãã¡ã€ã«æ°(ãã¹ããšãéšåãèŠãŠç¢ºããã Storybook ãå«ã): 148 â 1,469(çŽ10å)
ãã¡ããã¹ããš Storybook ãé€ããæ¬äœã®ã³ãŒã: 148 â 900(çŽ6å)
æ©èœã®ãŸãšãŸã(ã¢ãžã¥ãŒã«): 9 â 34
ãã¹ããã¡ã€ã«: 0 â 551
React: 18 â 19
Tailwind CSS: 3 â 4

å ãããã£ã148ãã¡ã€ã«ã®çŽ9å²ã«ãæ¹åã®æãå ãããŸããã
ã€ãŸãããŒãããæžãçŽããããšãããããå ã®éªšæ Œãæ®ãããŸãŸããã¹ããå«ããŠ10åã«è²ãŠã圢ã§ãã
ç¹ã«ããã¹ãã0ãã551ãã¡ã€ã«ã«ãªããŸããããã®ãã¹ãã®ç¶²ããã£ããããã§ãæ¹åãé²ãããããªããŸããã
äžèº«ã¯ãVitest ãš Testing Library ã«ãããã¹ããäžå¿ã§ããåãã§ãã¯ãš ESLint ããCI ã§æ¯ååããŠããŸãã
ãã®éãåã«ããŠåŒ·ãæ®ã£ãŠãã宿ã¯ããéããããã確ããããã®ãå¢ãããããšã§ããã
BE ãå°éã®èªåããAPI ããç»é¢ããã¹ããŸã§äžæ°é貫ã§é²ããããã®ãããã®ç¢ºãããä»çµã¿ããã£ãããã§ããããã§ããã®èŠæš¡ãŸã§æ¥ãããã®ã¯ãAI ã®ããŒã ã®ãããã§ããæžãåœ¹ãšæ±ºãã人ãåãããŠããŠãåºãåã«ã¯ãã¹ããšå¥ã® AI ã®ã¬ãã¥ãŒãéããæåŸã¯äººã確èªããŠããããã ãšæããŸãã
æããšã«æ¯ãè¿ã
å幎ã®åãããæããšã«ãã£ãã䞊ã¹ãŠã¿ãŸãã

6æ: åå°ã¥ãã
ããŒã¯ã¢ãŒããã³ãã³ããã¬ãããªã©ãç»é¢ã®ãåå°ãã®æŽåã«æ¬æ Œçã«åãããããŸããã
7æ: 䜿ãå¿å°ã®çµ±äž
ãµã€ãããŒãæ€çŽ¢ãæ¡å ãã詳现ç»é¢ã®èŠãæ¹ãçµ±äžããŸãããèšºææ©èœããæ®µéçã«è²ãŠå§ããŸããã
8æ: å®çãšç£šã蟌ã¿
ãç¥ããã®èªåçæãå®çãã眫ç·ãèããããªã©ããè¶³ãããããåŒãã調æŽã«åãçµã¿ãŸããã
9æ: æ¥åæ©èœã®æ¡å
ãªãŒããŒç»é²ãŸããã®ç»é¢ããå£åº§æ¯æ¿ã®ç»é¢ãæŽçããŸããã
10æ: è¶³å ã®åŒ·å
React 19 ãš Tailwind CSS 4 ãžã®æŽæ°ãReact Compiler(ç»é¢ã®æç»ãèªåã§å¹çåããä»çµã¿)ã®å°å ¥ãCI ã®é«éåãªã©ãéçºãã®ãã®ã®è¶³è °ã«æãå ¥ããŸããã
æ¯ãè¿ããšããäœããâãæãããâã磚ããâãè¶³è °ãéããããšãèªç¶ã«æ®µéãèžãã§ããŸããã
ã©ããé²åãããã®ã
倧ãããåå°ããšãæ©èœãã«åããŠããšããœãŒãã玹ä»ããŸãã
åå°
ããŒã¯ã¢ãŒã
è²ããããŒã¯ã³ã(æå³ãæã£ãååã®å€æ°)ã§ç®¡çããæ¹åŒã«ããŠãç»é¢åŽã§ã¯ã©ã€ãçšãšããŒã¯çšãæžãåããªãã«ãŒã«ã«ããŸããã
æ°ããç»é¢ã¯ãäœã£ãç¬éããããŒã¯ã¢ãŒãã«å¯Ÿå¿ããŸããAI ãæžãã³ãŒãã«ãããã®ã«ãŒã«ãæããŠãããŸãã
ã³ãã³ããã¬ãã(âK)
管çããŒã«ã¯ç»é¢æ°ãå€ããã¡ãã¥ãŒããã©ãã®ã倧å€ã§ããããã§ãâK ã§ç»é¢ã顧客ã«çŽæ¥é£ã¹ãã³ãã³ããã¬ãããå ¥ããŸããã
æåã¯ç»é¢ã®æ€çŽ¢ã ãã§ããããæ®µéçã«è²ãŠãŠãä»ã®ããŒã«(PMS)ãžã®ç§»åãã§ããããã«ããŸããã
ã¢ãã¡ãŒã·ã§ã³
ãåããã¯ãµã€ããæ¥åããŒã«ã§ã¯åŸåãã«ãããã¡ã§ããã§ããç»é¢ã®åãæ¿ããããã«ã®ééã«èªç¶ãªåãããããšãä»ã©ãã§äœãèµ·ããããåããããããªããŸãã
åºç€ãæŽããŠãåãã«é ãããã人ã®ããã®ãåããæžããèšå®ãã«ã察å¿ããŸããã
ããŒã¿ã®èŠãæ¹
財åã®ç»é¢ã¯ãããšããšæ°åã®è¡šãäžå¿ã§ãããããã«ã°ã©ã(æšç§»ããŠã©ãŒã¿ãŒãã©ãŒã«ãªã©)ãè¶³ããŠãæ°åã®èæ¯ã«ããæµããèŠããããã«ããŸããã
詳现ç»é¢ã«ããå°ããªæšç§»ã°ã©ã(ã¹ããŒã¯ã©ã€ã³)ãæšªå±éããŠããŸãã
å ±ééšåãšãã¶ã€ã³ã®ã«ãŒã«å
空ã®ç¶æ ãçµã蟌ã¿ãéé¡ã®è¡šç€ºãé ç®ã®äžèЧãªã©ãç»é¢ããšã«äœãããŠããéšåããå ±ééšåã«ãŸãšããŸããã
ãã®ããã§ãã«ãŒã«ãææžã«æ®ããAI åãã®èŠçŽç(DESIGN.md)ãçšæããŸããã
æ©èœ
ãã³çããšæè¿éããããŒãž
ãã䜿ãç»é¢ãããµã€ãããŒã«ãã³çãã§ããŸããæè¿éããç»é¢ããããã«æ»ããŸãã
æ¥ã ã®éçšã§ããã®ç»é¢ã©ãã ã£ãããæžããããã®æ©èœã§ãã
éå¶åŽã®ãªãã¬ãŒã¿ãŒã¯ãæ åœããšã«äž»ã«äœ¿ãæ©èœã決ãŸã£ãŠããŸãã䜿ãé ç®ã«ãããã©ãçããããã«ãããã£ãã®ãããã£ããã§ãã
忝ããŒã¿ã® CSV åºåãš PDF ãã¬ãã¥ãŒ
忝ã®ããŒã¿ã CSV ã§åãåºããããã«ããPDF ãç»é¢äžã§ç¢ºèªã§ããããã«ããŸããã
çµçãéå¶ã®ã¡ã³ããŒããä»ã®ããŒã«ã«æž¡ãåã«äžèº«ã確ãããããããã«ãªããŸããã
ãç¥ããã®èªåçæ
æ°æ©èœããªãªãŒã¹ãããšãããã®ããŒã«ã®å©çšè ãžã®ãç¥ãããæžãã®ã¯å°å³ã«æéã§ãããããã§ããªãªãŒã¹ããã£ããã«ããç¥ããã®äžæžããèªåã§äœãããä»çµã¿ãäœããŸããã
ããŸã¯æ¯é±ã®ããã«ããç¥ãããå±ããŠããŸãã
èšºææ©èœ
ããŒã¿ããããã¹ã圢ãã«æã£ãŠãããã確ãããèšºææ©èœã¯ã段éçã«è²ã¡ãŸããã
ããŒã¿ãæã£ãŠãããã®ç¢ºèªããå§ãŸããæŽåæ§ã®ãã§ãã¯ããããŠãèšç®æ ¹æ ãŸã§å¯èŠåããæ©èœãŸã§ã
ããšãã°ããªãŒããŒããŸã®åæ¯ã¬ããŒãã®æ°åã«ãã©ã®äºçŽã®å©çšãèšäžãããŠãããããšãã£ãå èš³ãŸã§ç»é¢ã§ç¢ºãããããŸãã
éå¶ã¡ã³ããŒããããŒã¿ã®ç¶æ ããã°ãã確ãããããããã«ããã®ãçãã§ãã
äžèЧç»é¢ã®è¿œå
ããŠã¹(ãªãŒããŒããŸãææããç©ä»¶)ãã¬ã¬ãŒãž(NOT A GARAGE ã§ãªãŒããŒããŸãææããä¹ãç©)ã®äžèЧããç»é¢ãšããŠæ°ããäœããŸããã宿æ³å¯èœãªæ¥æ°ã®ç®¡çãªã©ãéå¶ã«å¿ èŠãªç¯å²ã§å©çšç¶æ³ã確èªããç»é¢ããããŒã¿çãšããŠæäŸããŠããŸãã
ãããŸã§åããã®ã¯ãAI ã®ããŒã ããäœã£ããã
Claude Code ã«å šéšãä»»ããŠããããã§ã¯ãªãã圹å²ããšã« AI ãåããŠããŸãã
PM(äœãäœãããæŽçãã)
UI/UX ãã¶ã€ããŒ(ã©ãäœãããèšèšãã)
ããã¯ãšã³ãæ åœ
ããã³ããšã³ãæ åœ
QA(確èªé ç®ãäœã)
ã³ãŒãã¬ãã¥ãŒæ åœ
ããã¥ã¡ã³ãæ åœ
èª¿æ»æ åœ(ä»ç€ŸäºäŸãªã©ã調ã¹ã)
ã€ãŸãããŒãããããããããããããã®éçºããŒã ããAI ã§çµãã 圢ã§ãã(ååã®ããŒãããããããããããããã®PMSãã®ãªããŒãžã¥ã§ã)
èŠä»¶ã®æŽçãã APIãç»é¢ãŸã§äžæ°é貫ã§é²ããããã®ã¯ããã®åœ¹å²åæ ã®ãããã ãšæã£ãŠããŸãã
äœã£ã AI ã«ãã®ãŸãŸã¬ãã¥ãŒãŸã§ãããã®ã¯ãããŠãå¥ã® AI ã®ç®ã§ã¬ãã¥ãŒã確èªãããŠããããŸãã

圹å²ã®åãæ¹ããå圹å²ã®åããæ¹ã«ã€ããŠã¯ã次å以éã®èšäºã§è©³ããæžããŸãã
倱æããä»çµã¿ãã«å€ããŠãã
ãã¡ãããããŸããããªãããšããããããããŸããããã®ãã³ã«ãåã倱æãèµ·ããªãããã«ä»çµã¿ã«å€ããŠããã®ã§ããã®äžéšã玹ä»ããŸãã
AI ã®å ±åã¯ã仮説ããšããŠæ±ã: ãã§ããŸããããšèšãããŠããå®è¡çµæã§ç¢ºããããŸã§å®äºã«ããŸããã
å®äºæ¡ä»¶ãå ã«æ±ºãã: äœãå§ããåã«ãäœãã§ãããçµããããã1è¡ã§æžããŸãã
PR(倿Žã®ææ¡)ã¯1ã€ã®é¢å¿äºã ã: å°ããåãã»ã©ãã¬ãã¥ãŒãéããçŽãããããªããŸãã
èªåã¬ãã¥ãŒã¯2å·¡ã§åºåã: 现ããææã远ãç¶ãããšçµãããªãã®ã§ãå®å®³ã®ãããã®ã ãçŽããŸãã
äœæ¥ããšã«äœæ¥å Žæãåãã: 䞊è¡ã§åãããŠãããäºãã®å€æŽãæ··ãããŸããã
å ·äœçãªå€±æäŸãã1ã€ç޹ä»ããŸãã
éä¿¡äžã¯éããªãã¯ãã®ç¢ºèªã¢ãŒãã«ã«ã€ããŠãAI ããå€åŽãã¯ãªãã¯ããŠãéããªãããšããã¹ãããŸãããéã£ãŠãŸãïŒããšå ±åããŠãããŸãããã§ãããšã§ãéããªãããã«ããŠããã³ãŒãããããšå€ããŠã¿ããšããã¹ãã¯æ®éã«éããŸããã
èŠããšããã¹ãã確ãããŠããã®ã¯ãã¢ãŒãã«ã®æåãç»é¢ã«ããããã ãããã®ã¢ãŒãã«ãéããããšãæåã¯è£ã«æ®ã£ãŠããã®ã§ãéããŠãéããªããŠããããããã§ããããäœããã£ãŠãéããã¹ãã§ããã
ãã以æ¥ããéããªãããåºãªããç³»ã®ãã¹ãã¯ãå®ã£ãŠããã³ãŒããå€ããŠãã¡ãããšèœã¡ããšãããŸã§èŠãŠãããã§ãããã«ããŠããŸãã

ããšãã° CI(èªåãã¹ããªã©ã®åŸ ã¡æé)ããæž¬ããšããããå§ããŠæ¹åããŸããã
宿ž¬ããŠã¿ããšããã¹ããæ³å®ããå°ãªã䞊å床ã§åããŠããããšãåãããèšå®ãèŠçŽãããšããã確èªäœæ¥ã®åŸ ã¡æéã¯ã1åãã€ã®æ¯èŒã§ããã3ã4å²ã»ã©çããªããŸãã(å®è¡ç°å¢ã®æºãã倧ããã®ã§ãç®å®ã§ã)ã
人éã®ä»äºãå€ãã£ã
ãã®å幎ã§äžçªå€ãã£ãã®ã¯ãèªåã®ä»äºã®äžèº«ã§ãã
å: ã³ãŒããæžã
ããŸ: äœããã£ãŠå®äºãšããããæ±ºããŠã確ããã
æžãéã¯æžããŸããããæ±ºããã»ç¢ºãããããšã®éã¿ã¯ããããå¢ããŸãããããã»ã©ã®ãã°ã©ãã空ã«ãªãããããªäžå ·åã«æ°ã¥ãããã©ãããè ã詊ãããå Žæããã³ãŒããæžãæãããèŠãç®ã«ç§»ããŸããã
ãããã
PMS ãš OMT ã§ãéçºã®é²ãæ¹ãæããŠããåãçµã¿ãé²ããŠããŸããçæ¹ã§èŠã€ããããä»çµã¿ããããçæ¹ã«ãå ¥ããŠãããŸãã
PMS ãåŒãç¶ãã§ãããã¡ã³ããŒãšãããäºãã®ç¥èŠãæã¡å¯ããé¢ä¿ã§ããããšæã£ãŠããŸãã
ä»åã¯å šäœã®ããã·ã§ããããæ¬¡å以éã¯ãAI ã®å ±åã仮説ãšããŠæ±ãç¿æ £ãAI ã®ããŒã ã®äœãæ¹ãèšæ¶(ãã¬ããž)ã®æ®ãæ¹ãç»é¢ããã£ãšäœ¿ããããããããã®æž¬ãæ¹ãªã©ããããå°ãæãäžããŠæžããŠãããŸãã
æè¡ç°å¢
ããã³ããšã³ã: TypeScript / Next.js / React 19 / Tailwind CSS 4 / Ant Design
ããã¯ãšã³ã: Go / gRPC / Protocol Buffers
ã€ã³ãã©: Google Cloud (Cloud RunãCloud SpannerãBigQuery ã»ã)
ãã¹ã: Vitest
éçºç°å¢: Claude Code / GitHub / Notion / Slack
NOTAã§ã¯ãäžç·ã«åã仲éãåéããŠããŸããæ°ã«ãªã£ãæ¹ã¯ããã²æ¡çšããŒãžãã®ãããŠã¿ãŠãã ããã