éæãã¯ã #15 ãããžããéŠãããããšæäœãèãŸãã
Hieronymus ããã°ã©ã æè¡
ããã¡ãã
ã¿ã€ãã«ãšOGPã¯ChatGPTãèãããã®ã§ãã
ããã®ãšãããããã°ãæžããTwitterãããŸããããã²ãããHieronymusãéçºããŠããŸãã
ä»ããããšããŠãã諞ã ãã ãããäžæ®µèœããããšããŠãã(ãã©ãŸã )ãšããã®ãçŸåšã®é²æã§ãã ããå°ãããããå ¬éã®GitHubã«çœ®ãäºå®ã§ãã
åã«ãã¡ãã£ãšæžããŸããããä»åã®å€§æ¹èšãå§ããåã«ããã¬ãŒã ã¯ãŒã¯ã®å€æŽãæ€èšããŸããã
- WebpackãViteã«å€æŽ
- SequelizeãPrismaã«å€æŽ
- ããã¯ãšã³ããESMå
ãããã®ãã¡ãViteåãšESMåã¯ç¡äºå®äºããŠããæãã«ãªã£ãŠããŸãããPrismaåã«ã€ããŠã¯9å²çšåºŠã§ãããšããã§èŽåœçãªåé¡ã«ã¶ã¡åœãããrollbackããŠSequelizeã«æ»ããŸããã ãŸãå®éã«ã¯gitæ»ãã ãã§ããã©ãã
ãã®èŸºã«ã€ããŠChatGPTãšéè«ããŠãŸãšããŠããã£ãã®ã§ããä»å±±ã®ç³ããšããŠãšã³ããªã«ããŠãããŸãã
æäœãè¬ãªã®ã¯ãChatGPTãããŒããŒãã³ã·ã§ã³ã ã£ããšããŒããšã§ãã
å説
æŽèµ°æ°å³ã®ChatGPTã®ãšã³ããªã®åã«ãå·éã ã£ãé ã®ChatGPTãšã®äŒè©±ãå ã«ããã®è©±ã®èæ¯ãæžããŠãããŸãã
ChatGPTããŸãšããŠãããŠãã®ã§ããã
| æ©èœ | Prisma | Sequelize |
|---|---|---|
| ã¢ãã«ãããã€ã°ã¬ãŒã·ã§ã³çæ | â
prisma migrate ã§èªåçæ |
â ææžã or å¥ããŒã« |
| ã¹ããŒãå®çŸ©ã®èŠéãã®è¯ã | â Prisma schemaã§äžå 管ç | â JS/TSã§åæ£ããã¡ |
| åæšè«ã»TypeScriptãšã®èŠªåæ§ | â è¶ åŒ·ãïŒtså®åç¯å²åºãïŒ | â³ å®çŸ©ã«ãã£ãŠãŸã¡ãŸã¡ |
| IDEè£å® | â ã¢ãã«ããã£ãŒã«ãã«è£å®ãå¹ã | â³ ã¢ãã«åæååãå€ã |
ãŸãã«ããã§ãPrismaã®éçºãããŒã¯ããŸãã¢ãã«æžããŠãããšã¯ prisma migrate devãã§å®äºãšããããããã
ORMãšDBã®æŽåæ§ãšãã§æ©ãäœå°ããããŸãããããééãäœå°ããããŸããã
ããããSequelizeã¯CommonJSæä»£ã®ãã®ã§ãã£ãŠããããéæã«è¡šããŸãã ã°ã°ãã°ãããã§ç¥èŠã沢山åŸããããšããç¹ã§ã¯éåžžã«éœåãè¯ãã®ã§ããããŸãäœãšèšãã⊠èŠããã«æä»£é ããšæããšãããå°ãªããããŸããã ãŸãäžçªå€§ããã®ã¯ESM察å¿ããããŠãªãã«çããããšã§ãããã ãããèŸãç¶æ³ã«ãããã®ã¯çè§£ããã®ã§ããããã®äžç¹ã ãã§ãéå»ã®ãã®æããæããŠããŸããŸãã
å®å®çšŒåããŠããã·ã¹ãã ã§ããã°ãå€å°ãéå»ã®ãã®æãããã£ãŠãæ¯ããŠããæ¹ãå¬ããã£ãããããããªã®ã§åé¡ã§ã¯ãªãã®ã§ããããããããã©ãã©ãã³ãŒãå¢ããŸãããªå Žåã§ããã°ããæ©ãã«æªæ¥ã®å€§ããªãã¬ãŒã ã¯ãŒã¯(ã©ã€ãã©ãª)ã«ç§»è¡ãããããšæããã®ã§ãã
Hieronymusã®æ¹è¯ã«åãå ¥ãå§ããã®ã¯ãå€ããã®åãåããããã£ãŠãããããå ã«ãã¿ãããªè©±ãçŸå®ã®ãã®ãšãªã£ãããã§ãã ãªã®ã§ããã¡ãããšåããŠããããšããçŸç¶ããããããããçºå±ããæªæ¥ãã®æ¹ã倧ãããšããåæããããŸãã ãããªããšããæ©ãã«å°æ¥æ§ã®ãããã¬ãŒã ã¯ãŒã¯ããšããæ¹åã«ãªãã®ã¯åœç¶ã®åž°çµã§ãããã
Sequelize以åŸã®Node.jsé¢ä¿ã®ããŒã¿(ããŒã¹)ãã¬ãŒã ã¯ãŒã¯(ã©ã€ãã©ãª)ã¯ã矀é岿 ãšèšã£ãŠãè¯ãç¶æ ã«ãããŸãã ãã®äžã§ã
- æ¯èŒçæ°ããããã€å®çžŸããã
- ESMãTypeScriptã«ã察å¿ããŠãã
- Sequelizeãšã®å·®åãå°ãªã
- æªãåãå°ãªã
ãšããåºæºã§æ¢ããŠãPrismaãè¯ãããããªãã®ïŒ ãšããçµè«ãåºããŠãç§»è¡ãå§ãã⊠ãšããã®ã話ã®çºç«¯ã§ãã
以äžã¯ãã®åŸã®æçŽãChatGPTã«ããåŸã§ããŸãšããŠãããŠããšæç€ºããŠåºããŠãããããŸãšããã§ãã
ð§ Prismaã¯éçºäœéšãæé«ãã§ãäŒèšã·ã¹ãã ã«ã¯èŽåœçãªç©Žããã£ãã
- Prismaã®å©ç¹ïŒ
- ã¢ãã«ã
schema.prismaã«äžå 管çã§ããŠã¹ãã㪠prisma migrate devã§DBå®çŸ©ãäžçºåæ ãçééçº- TypeScriptè£å®ãè¶ å¿«é©ã§ãå®å šæ§é«ã
generateã ãã§åä»ãã®ã¯ã©ã€ã¢ã³ãçæ â æžããŠãŠæ°æã¡ãã
- ã¢ãã«ã
ð€© ãããããSequelizeæšãŠãŠPrismaã§ãããããã£ãŠãªã£ãŠãç§»è¡äœæ¥ã«çªå ¥
ð ã§ããæå»ãªãæ¥ä»ïŒDATEONLYïŒããªãã
- äŒèšã·ã¹ãã ã«ãããŠããæ¥ä»ã®ã¿ãã¯æ»ã¬ã»ã©éèŠ
| 䜿çšäŸ | æå»ãªãæ¥ä»ãå¿ èŠãªçç± |
|---|---|
| ä»è𳿥ãäŒç¥šæ¥ | æå»ãå ¥ããšæ¯èŒãéèšããºã¬ã |
| 決ç®ã»ç· æ¥ | 2025-03-31T00:00:00Z ã«ãªããšæå³éãã«ãªããªã |
| çšåºååæ¿æ¥ | ç§åäœã§ããºã¬ããšå€§äºæ |
- Prismaã§ã¯
DateTimeãã䜿ãããçŽç²ãªæ¥ä»ã ãã®ã«ã©ã ãäœããªã@db.Dateç㪠workaround ãããããåã厩ãããæ±ããé¢å- çµæçã«ããžãã¯ãäžå®å® or æžãã«ãã or ãã°ã
ð ãæåŸã®æåŸã«
DATEONLYãç¡ãããšã«æ°ã¥ããŠãå šæ» ã
â ïž çµæãç§»è¡å€±æïŒåæãããäœæ¥ãç¡é§ã«
- Prismaç§»è¡ã¯9å²å®æããŠãïŒã³ãŒããããã¥ã¡ã³ããïŒ
- ã§ãæåŸã«
DATEONLYã®åé¡ã«çŽé¢ããŠå®å šæ€é - Gitã§å ã«æ»ããŠãæ³£ããªããSequelizeã«æ»ããã¡ã«âŠ
ð© Sequelizeãå°å³ã«ããã©ããã©âŠ
- ESM察å¿ãäžå®å
šïŒ
sequelize-cli㯠CommonJSåæïŒrequire,module.exportsïŒ- ESMã§ãããªãå
šéšæçŽããå¿
èŠïŒ
import,export,import.meta.urlâŠïŒ
- CLIçæã³ãŒãã¯å šéšæä¿®æ£ïŒå°å³ã«ãã©ãïŒ
- ãšã¯ãããæ¥åèŠä»¶ïŒç¹ã«DATEONLYïŒã«èããããã®ã¯Sequelizeãããªã
ð 察çã»æ¹åæ§ïŒçŸå®çã«ïŒ
| å 容 | 察ç |
|---|---|
| ã¢ãã«ãšmigrationã®åæ | æåã§äžå¯§ã«ç¶æãCLIè£å©ã¯äœ¿ãéããªã |
| ESMå¯Ÿå¿ | CLIã¯æšãŠãŠãumzugãªã©ã®ã¢ãã³ãªmigration管çã«ç§»è¡ããã®ãã¢ãªïŒãã ãä»ã¯ç§»è¡å°é£ïŒ |
| ããã³ããšã®ã³ãŒãå ±æ | å šäœESMåããŠãå ±éutilsãtypesãimportã§å ±æããèšèšãçŸä»£ç |
| Prismaã®æŽ»çšç¯å² | æ¥å系以å€ïŒWebç³»ãå人éçºãªã©ïŒã«ã¯è¶ åªç§ãæ¥ä»åšãã䜿ããªããã°OKã |
ð€ æçµçµè«
â äŒèšã·ã¹ãã ãæ¥åã¢ããªã§ã¯ãPrismaã¯äœ¿ããªãDATEONLYãç¡ãæç¹ã§èŽåœçã
â Sequelizeã¯ã€ãããã©ãDATEONLYã䜿ããŠãèŠä»¶ã«èãããšããæå³ã§ã¯å¯äžã®éžæè¢ã
â ESMãšSequelizeã¯ä»²ãæªããã©ãæã§ãªããšããããããªãçŸå®ã
â äžéãçµãã£ããã
umzugãžã®ç§»è¡ããSequelizeã®ESMãã³ãã¬æŽåãæ€èšãã¹ãã
以äžãç§ã®è©±
âã«æžããŠããããã«ãSequelizeããPrismaãžã®ç§»è¡ã«ã€ããŠã¯ãä»ã®ã¢ããªã§ããããããšæã£ãã®ã§ããã®ããã®ããã¥ã¡ã³ããŸã§æŽçããŠæžããŸããã æåã®ãšã£ã€ãã¯å¥ã«ããŠããDBãšã¢ãã«ã®æŽåæ§ã«ã€ããŠã¯Prismaã®æ¹ã楜ã§ããããã
ãšã¯èšãããã£ãDATEONLYåã®æ±ãããã¡ãªã ãã§ãå šéšrollbackã§ãã GitHubã®issueã«ãããªãåããæãã£ãŠããããšãªã®ã§ãããæŸçœ®ããããŸãŸã§ãã ãŸããªãŒãã³ãœãŒã¹ã§ããããæå¥èšãæããã£ããçŽããã£ãŠè©±ã¯æ£è«ãšããŠããã®ã§ãããå¥ã«ä»ãããããããªãã§ããã
ãšããããšã§ãChatGPTãåºããŠãçµè«ããä»ã®ãšããã¯åŠ¥åœãªçµè«ãªã®ã§ã¯ãªãããªãšæããŸãã
ORMãDATEONLYåã«å¯Ÿå¿ããŠããªããŠãã
- èªåã§é 匵ã£ãŠå¯Ÿå¿ããã
- STRINGãšããŠæ±ã
- DATEåã«ããŠããŸã
ãšãããããªè§£æ±ºããªãããã§ã¯ãããŸããã ãšèšããããã°ããèªåã§ãé 匵ã£ãŠã¿ãã®ã§ããããçŸæç¹ã§ãããããã®ã¯åŸåŽããšããçµè«ã«è³ã£ãŠãPrismaç§»è¡èšç»ãäžæ¢ããŸããã
éäžã®ã³ãŒããç§»è¡æé æžã¯æ®ããŠããã®ã§ãPrismaã®DATEONLYåãããã¢ã«ãªã£ãæã«ããããããŠåéãããŠãè¯ãããªãšã¯æã£ãŠããŸãã ãããããŠãã®æã¯ãã£ãšè¯ããã¬ãŒã ã¯ãŒã¯ãããããç¥ããŸãããã