
ãã³ãŒãå²åŠãšãã»ã€ã å ¬é API ã¯æ©èœãããªãçŽæã®çªã
å éšãšå€éšã®å¢çãå®ãèšèš
äžæã®æããšã¢ã³ã³ã®é³ã ããéšå±ã«æ®ã£ãŠããã
Slack ã«å°ããªéç¥ãå±ãã
ã飿ºå ã®ç»é¢ã§ããŠãŒã¶ãŒåãåºãªããªããŸããã
åã¯ããã«ãã°ãéããã
ãµãŒããŒã¯çããŠããã
ã¹ããŒã¿ã¹ã³ãŒãã 200ã
å£ããŠããã®ã¯ãèŠããªããšããã ãã ã£ãã
ãšã³ããã€ã³ããå¢ããã°é²ãã§ãããšæã£ãŠãã
è¥ãé ãAPI èšèšãšããèšèãèããšãé ã®ãªãã§ã¯ãã翻蚳ãããŠããŸããã
æ©èœãå€ã«åºãäœæ¥ã
å»çç³»ã®çŸå Žã§ã Web ã®æ¡ä»¶ã§ãããã䌌ãå
æ¯ããããŸããã
ããŒãã«ã®åããã®ãŸãŸ JSON ã«ããã
JOIN ããçµæãããšããããè¿ãã
ãããšã§æŽããããšå£ã«ããªãããå
éšã®å°å³ãå€ã«äžžããšæž¡ãã
åœæã®åã«ãšã£ãŠãå
¬é API ã¯ååº«ã®æ¬åºå£ã§ããã
äžã«äœããããã¯ãç¥ã£ãŠãã人ã ããç¥ã£ãŠããã°ããã
å€ããèŠããã®ã¯ããšããããåºãŠããç®±ã
éããæ¥œã ã仿¥ã®ã¿ã¹ã¯ã¯æžãã
ãã®ä»£ãããçŽæã¯çãŸããªãã
ããã®åœ¢ã§è¿ãããšæžããŠããªããããå€ããŠãçœªæªæãèãã
å€ããã®ã¯èªåã ãã ãšæã蟌ããã
å éšã®éšå±ããã®ãŸãŸçªã«ããŠããŸã
ããªãŒã©ã³ã¹ã«ãªã£ãŠæ°å¹Žãå°ã㪠SaaS ã® API ãè§Šã£ãããšããããŸãã
ãŠãŒã¶ãŒäžèЧãè¿ããšã³ããã€ã³ãã
å®è£
ã¯åçŽã§ãORM ã®çµæããã®ãŸãŸ res.json() ããŠããã
瀟å
ã®ç®¡çç»é¢ã§ã¯åé¡ã«ãªããªãã
åãããŒã ããåãé ã®ãªãã®èŸæžãå
±æããŠããããã ã
ãšããããå€éšã®é£æºå
ãã€ããã
çžæã¯åã® DB ãç¥ããªãã
ç¥ãå¿
èŠããªãã
ãããªãªãŒã¹ã§ã衚瀺åã®ãã£ãŒã«ããå€ãã£ãã
userName ãã displayName ãžã
äºæã®ããããã°ããäž¡æ¹è¿ãã€ããã ã£ãã
å
éšã®è©±ã§ã¯ãããèšãåããŠããã
ããã©ãã¬ã¹ãã³ã¹ã®åœ¢ã«çŽæãæžãããŠããªãã£ãã
åãèãã£ãã
ããã¥ã¡ã³ããå€ãã£ãã
çžæã®ç»é¢ã ããååãæ¶ããã
ãšã©ãŒã¯åºãªãã
ãã°ãéãã ã
çŽæãæŽæ°ãããŠããªãçªã ãããç©ºãæ ããŠããã
ãã®å€ãåã¯å
æã®ãšãã»ã€ãæãåºããã
åã¯çŽæã®å¯èŠåã ããšæžãããã®è©±ã ã
API ã®ã¬ã¹ãã³ã¹ã«ããåãæ§é ããã£ãã
çªã¯å®¶ã®ãã¹ãŠãèŠãããããããªã
ããŸã®åã¯ãå ¬é API ãããæããŠããŸãã
å éšãå€ã«éã¶ç©Žã§ã¯ãªããæªæ¥ã®å©çšè ãšäº€ããçŽæã®çªã ã
å®¶ã®çªã¯ãå£ããªããããã§ã¯ãªãã
å€ã®å
ãåã蟌ã¿ãäžã®æ§åãéžãã§èŠããããã®è£
眮ã ã
å
šéšæãçªã¯ãéšå±ã§ã¯ãªãå±ç€ºå Žã«ãªãã
README ãçé¢ã ãšæžããããšãããã
API ã¯ããã®å®¶ã®å€å£ã«éããçªã«è¿ããšæãã
çé¢ã§ç€ŒåãäŒããçªã§æ¯è²ãæž¡ãã
奥ã®éã®è·ç©ã®çœ®ãæ¹ãŸã§ã客人ã«ç¥ãããå¿
èŠã¯ãªãã
æ©èœäžèЧãšçŽæäžèЧã¯éã
仿§æžãæžããšããåã¯æãããã䞊ã¹ãŠããã
ð ãŠãŒã¶ãŒãååŸãã
ð ãŠãŒã¶ãŒãæŽæ°ãã
ð ãããžã§ã¯ããåé€ãã
ã§ããããšã®ãªã¹ãã
ããã¯æ©èœã®æ£åžãã«ã¯ãªãã
ããã©ãå©çšè
ãæ¬åœã«ç¥ãããã®ã¯ããããŠãããäžæ©å
ã ã
ã©ã®åœ¢ã§è¿ããã
äœãå€ãã£ãããèªåã®ã³ãŒããå£ãããã
å€ãããšãããã€ã»ã©ãç¥ããããã
ãããŸã§æžããŠåããŠãæ©èœã¯çŽæã«ãªãã
å人éçºã®ããŒããã©ãªãª API ã /api/v1 ã«ããã®ããåãæèŠã ã£ãã
ããŒãžã§ã³ã¯é£Ÿããããªãã
ãã®çªã®æ ã¯ããã°ããå€ããªããšãã宣èšã ã
Hono ã§ API ãçµããšãããå
¬éåããšç®¡çåãã§ç©ã¿æšãå€ããã
èªèšŒã®å±€ããå
šéšã®ã«ãŒãã«èŒããªãã
ããã¯ã»ãã¥ãªãã£ã®è©±ã ããããªãã
å€ããèŠããçªãšãå
åŽã ãã®æãæ··ããªãããã ã
æ©ãã®ããã«å¢çãé£ã°ãã代å
æ£çŽã«èšããšãå¢çãåŒãäœæ¥ã¯é
ãã
DTO ãäžã€è¶³ãã ãã§ãããã¡ã€ã«ã¯å¢ããã
ãå
éšã®åœ¢ã§ååããšæããæ¥ãããŸã ããã
ããã§ããå¢çãé£ã°ãããšãã®ä»£åã¯ãã ãããä»äººã®æã«ãã£ãŠããã
èªåã®ããã³ããªããåããªããžããªã§çŽããã
飿ºå
ã®æ
åœè
ã¯ãåã®é ã®ãªãã«ã¯ããªãã
圌ãã«ãšã£ãŠãå£ããçªã¯çªç¶ã®å€©æ°ã®å€åã ã
æã£ãã®ããéšãªã®ãã説æããªããã°åãããªãã
èšå®å€ãå¢çã ãšæžããå
æã
åãçŽæã®å°å³ã ãšæžããå
æã
ãã®å»¶é·ã« API ã®çªãããã
é ãããã®å£ã§ããæ©èœã䞊ã¹ãæ£ã§ããªãã
責任ãå€ã«æž¡ãç¬éã«ãç·ãåŒãå Žæã ã
çªãéããåã«åã眮ãäžã€ã®åã
ãšã³ããã€ã³ããå¢ããåã«ãåã¯äžã€ã ãåããŸãã
ãã®ã¬ã¹ãã³ã¹ã¯ãå
éšã®éœåããå€ãžã®çŽæãã
圢ãå€ãããšããèª°ãæ°ã¥ããä»çµã¿ããããã
ããŸèŠããŠããçªã¯ãæ¬åœã«å€ã«å¿
èŠãªæ¯è²ãã
çããã¯ã£ããããªããã®ã¯ããŸã å
¬éããªããŠããã®ãããããªãã
瀟å
ã ãã§äœ¿ããªããæã®å
åŽã«çœ®ãã°ããã
äžåãåã圢ã®å€æŽãæ¥ãããçªã®æ ã倪ãããã
å
æã«æžãã DRY ã®è©±ãšãåãæž©åºŠã ã
// å€ã«èŠããçŽæ: äžèЧã§å¿
èŠãªåœ¢ã ãã«çµã
type PublicUser = {
id: string;
displayName: string;
};displayName ã®äžè¡ãããã®æã®ç©ºæ¬ãæªæ¥ã®èªåããé ãããŠãããã
çªã¯ãäžçã®ãã¹ãŠãæ ãå¿
èŠã¯ãªãã
å€ã®äººãç«ã¡æ¢ãŸããªãæ¯è²ã ããéžãã§æž¡ãã°ããã
å£ããããšã«è²¬ããããã å ã«æžã
çŽæã®çªãå®ãã®ã¯ãæåããå®ç§ãª API ãèšèšããããšãããªãã
å£ããããšã«ãçŽæãèšèã«æ»ãããšã§ãããã
倿Žãã°ãæ®ãã
äºææéãæ±ºããã
ãããããå
ã¯å€ãããŸãããšãçªã®å€ã«å°ããªæã貌ãã
ãšã©ãŒãæ¡å
圹ã ãšæžããäºæã®èªåã«ãä»ã§ãå©ããããŠããã
API ãåãã ã
404 ã 400 ã¯ãæµãããªãã
çŽæãéããªãã£ãå ŽæãæããŠãããã
責ããããå
ã«ãå°å³ãæŽæ°ããã
ããããå€ã®äººãžã®ç€Œåã ãšæãããã«ãªããŸããã
äžæã®ãšãã£ã¿ã®åã§åãæãããš
äžåæãå§ãŸãäžæãæ°ããæ©èœãåºããããªãå£ç¯ã§ãããã
ãšããããå
¬éãããããããã«èããããšãã
ãã®ãã³ãåã¯æã®èªåã«å£°ããããŸãã
ãããã¯æ©èœãå¢ãããŠããã®ã
ãçŽæã®çªãéããŠããã®ãã
åè
ãªããäžåºŠç«ã¡æ¢ãŸãã
åŸè
ãªããæ ã®åœ¢ãäžå¯§ã«æ±ºããã
å
¬é API ã¯ãååº«ã®æ¬åºå£ãããªãã
å€ã®èª°ããããŸã èŠã¬æã®ããã«æ®ãçªã ã
åãããã«ãå éšã®å°å³ããã®ãŸãŸå€ã«æž¡ããŠããŸã£ã誰ãã«å±ãã°ããããã§ãã
ã²ãšãããš
ãšã³ããã€ã³ãã䞊ã¹ã仿§æžããæã¯éææã§éããŠããŸããã
å¢ããæ°ã ããã鲿©ã«èŠããŠããã®ãããããŸããã
ããŸã¯ãå°ããªã¬ã¹ãã³ã¹åãäžã€æžãã»ãããèžã®å¥¥ãéãã«ãªãããšãããã
ããã¯é
ããããªãã
å€ã®äººã®æéããå
ã«å®ã£ãŠããæèŠã«è¿ãã
äžæã®æãã®ãªãã§ããçªã®å€ã«å±ã空æ°ãæ³åããªãããç·ãåŒããŠããããã§ãã

ãnote 質åç®±ãâ» æ°æ©èœ
ãèããããã©ãèããªãã
ãããã質åã»ã©ã
å®ã¯èª°ãã®åœ¹ã«ç«ã€ã
note質åç®±ã
éããŸããã
ããªãŒã©ã³ã¹ 15 幎ç®ã®ãšã³ãžãã¢ã«
ãªãã§ãèããŠã¿ãŠãã ãã ð®
ðïž ãã©ãã¯ãŒéå®
ïŒåŸã ãã¡ã³ããŒã·ããã®ã¿ã«ãªãäºå®ïŒ
https://note.com/qa/digiangler777
Substack ã¯ãããŸãã
ãããŸã§èªãã§ãã ãããããããšãããããŸããã
X ã§ã¯çãèšèã§ãnote ã§ã¯æŽçããæç« ã§çºä¿¡ããŠããŸãããSubstack ã§ã¯ããã£ãšéäžçµéã®æèãåããããªãã£ãèè€ãæè¡è ãšããŠæ¥ã èããŠããããšãæžããŠããŸãã
ããèå³ãããã°ãèŠããŠã¿ãŠãã ããã
äŒç€Ÿå¡ïŒå
ã·ã¹ãã ãšã³ãžãã¢ïŒããããªãŒã©ã³ã¹ãšãªãã
15 幎ç®ã«çªå
¥ããŸããã
çŽæãšé害察å¿ã«è¿œãããæ¯æ¥ã®äžã§ã
ããã£ãšèªç±ã«ããã£ãšæ¬è³ªçã«ãã®ã¥ããããããã
ããæã£ãã®ãç¬ç«ã®ãã£ããã§ãã
çŸåšã¯ãæè¡ãšæç« ã軞ã«ã
ä»äºãã©ã¯ã«ãªãä»çµã¿ãç¶ããããåãæ¹ãçºä¿¡ããŠããŸãã
ãããªãŒã©ã³ã¹ã«ãªã£ãŠ15幎ç®çªå ¥ã
â ãããšãïœããªãŒã©ã³ã¹éçºè à ã¹ããŒãªãŒãã©ãŒ (@digiangler) March 3, 2026
14幎ãšããææ¥ã¯é·ãããã§ã
ãã£ãšããéã ã£ãã
æåãããšèšããã»ã©ã®æŽŸæãã¯ãªãããã©ã
仿¥ãŸã§ãšã³ãžãã¢ãšããŠã飯ãé£ã¹ã
æ°ããã³ãŒããæžããŠããã
ããã ãã§åå幞ããªããšãªãã ãšæãã
ææ¥ã¯ææ¥ã§ããŸãæ·¡ã ãšãâŠ
ããããŠèªã¿ãã
âŒ çŽæã圢ã«ãã話ãšããŠäžŠã¹ãŠèªã¿ãããšãã«
API ã®çªã«ããåãšããå°å³ãããã
å
æã®ãšãã»ã€ãšãåãçŽæã®èªåœã§ã€ãªãããŸãã
⌠å¢çãåŒãèšèšã®ããäžæ¬ã®ç·ãšããŠ
é ãå Žæãšæž¡ãå Žæã
責任ãåãæ¿ããç·ã®åŒãæ¹ããå¥ã®è§åºŠããæããŠããŸãã
⌠å€ããå ¥ã第äžå°è±¡ãšããŠ
çé¢ãšçªã
å€ã®äººãè¿·ãããªããåºè¿ãã®èšèšã®è©±ã§ãã
次ã®äžæ©ãäžç·ã«æ±ºããäœæŠäŒè°å®€ãž
API ã®å¢çããå€ã«æž¡ãçŽæã®æžãæ¹ã
äžäººã§æ±ãããšãå
éšã®éœåãåã¡ãããã
äœæŠäŒè°å®€ã§ã¯ãçŸå Žã§äœ¿ããåãæ¹ãå°ããåãåããå Žæã«ãããã§ãã
çªã®æ ãäžç·ã«å€ªããããæ¹ã¯ãã®ãããŠã¿ãŠãã ããã