2024幎11æçŸåšã®ææ°ã®æ§æã«é¢ããèšäºããã¡ãã«æžããŸããã
ãããããã°ãã¡ãããåç
§äžããã
ïŒQiita ã®æ¬èšäºã¯ã2022幎4ææç¹ã®æ§æã«é¢ããŠã®èšäºã§ãå€å°å€ãå
容ãå«ãŸããŠããŸããïŒ
å人éçºã§ è³è²žç©ä»¶ã®æ€çŽ¢ãµãŒãã¹ Comfy ãäœããŸãã1ãã°ã©ããå°å³ã§ãµã¯ãµã¯çµã蟌ãã UI ãç¹åŸŽã®ãµãŒãã¹ã§ãããšã«ããæ°æã¡è¯ã䜿ãåæãå®çŸããããã«è²ã 工倫ããŠããŸãã
æ¢ã«ãªãªãŒã¹ãã㯠4 ã¶æä»¥äžçµã£ãŠããã®ã§ãããæ¹ããŠãµãŒãã¹ã®æŠèŠããã·ã¹ãã æ§æåã³äœ¿çšããæè¡ã»ãµãŒãã¹ãã玹ä»ããããšæããŸãã2ã
ãµãŒãã¹ã®æŠèŠ
Comfy ã¯æ¥æ¬å
šåœã®è³è²žç©ä»¶ãæ€çŽ¢ã§ãã Web ãµãŒãã¹ ã§ããç»é¢ UI ã¯äžã® GIF ç»åã®ãããªæãã§ãã
ãã ãã£ããã€ã³ããè²ã
æžããããå®éã«ããã£ãŠé ããæ¹ãæ°æèŠã® UI ãæ°æã¡ãããäœæé ããããšæããŸãã®ã§ã å®éã®ãµãŒãã¹ ããã²ã詊ãé ããã°å¹žãã§ãïŒ
ã·ã¹ãã æ§æ
å³ã®éããã·ã¹ãã ã¯å€§ãã 3 ã€ã«åããããŸãã
- ããã³ããšã³ã
- ããã¯ãšã³ã
- ããŒã¿åºç€
äœ¿çšæè¡ã¯å³ã®éãã§ã¯ããã®ã§ãããããã³ããšã³ããšããã¯ãšã³ãã«ã€ããŠã¯ããå°ã詳现ã«ç޹ä»ããããŸãã
ããã³ããšã³ã
Comfy ã¯ããŒãžé·ç§»ã®ãªã SPAïŒSingle Page ApplicationïŒ ãšããŠäœã£ãŠããŸãã
ãã¬ãŒã ã¯ãŒã¯
ãã¬ãŒã ã¯ãŒã¯ãšã㊠Next.js ãš Preact ã䜿çšããŠããŸãã
Preact ã¯ãReact ãšå
šãåãã·ã³ã¿ãã¯ã¹ã§æžãã軜éç React ãšãã£ããã¬ãŒã ã¯ãŒã¯ã§ããå€å React ã«çœ®ãæããŠãå
šãåé¡ãªãåäœããŸãã
ç¶æ
管ç㯠React ã®æšæºæ©èœã§ãã Props ãš State ã®ã¿äœ¿çšããŠããŸãã
ReduxãRecoil çã®ç¶æ
管çã©ã€ãã©ãªã React ã® Context ã¯ãç¹ã«å¿
èŠãšæããŠããªããã䜿çšããŠããŸããã
䜿çšã©ã€ãã©ãª
-
Leaflet
å°å³ã®è¡šç€ºã«äœ¿çšããŠããŸããGoogle Maps çãªã©ã€ãã©ãªã§ãããGoogle Maps API ãææã§ããä»ãç¡æã§äœ¿ããå°å³ã©ã€ãã©ãªã®æ°å°ãªãéžæè¢ã§ããGoogle Maps API ã«äŒŒã API ãæŽåãããŠãããããã¥ã¡ã³ããéåžžã«èª¿ã¹ããããã€åãããããæžãããŠããŠãçŽ æŽãããã©ã€ãã©ãªã§ãã
Leaflet ã§ã¯è¡šç€ºããå°å³ãéžæã§ããã®ã§ãããOpenStreetMap ãšããããªãŒã®å°å³ãœãŒã¹ã䜿çšããŠããŸãã -
chart.js
æ£ã°ã©ãã®è¡šç€ºã«äœ¿çšããŠããŸããæè»ãªè¡šçŸåãæã¡ãçŸãã API ãåããçŽ æŽãããã©ã€ãã©ãªã§ãã -
React Slick
ç©ä»¶ããšã®ç»åãã¥ãŒã¢ã«äœ¿çšããŠãããã«ã«ãŒã»ã«ã®ã©ã€ãã©ãªã§ããåæãªãªãŒã¹ã® 1 æ¥åã«éžå®ããããŸã䜿ãããªããŠããªããŸãŸä»ã«ããããŸãâŠãããå°ãã¹ã ãŒãºã«åäœããããã£ããããŸããããŸã ãŸã 䜿ãåãå¿ èŠãããããã
ãã®ä»ãã¹ã©ã€ããŒãã¢ãŒãã«ãã»ã¬ã¯ãããã³ããŒã¬ãŒã¡ãã¥ãŒçã¯å šãŠèªäœã³ã³ããŒãã³ãã§ãã
ãããã€å
éçãµã€ãã®ãã¹ãã£ã³ã°ãµãŒãã¹ã§ãã Cloudflare Pages ã䜿çšããŠããŸãã
Vercel ã Netlify ãªã©ä»ãµãŒãã¹ãä»ãŸã§äœ¿çšããŠããŸããããç¡æãã©ã³ã§åž¯åå¶éããªãã®ã¯ Cloudflare Page ã®ã¿ã ã£ãããšãä»åã®éžå®çç±ã§ããå®éã䜿çšåž¯åå¹
ã¯ãªãªãŒã¹åŸ 1 é±é匷㧠80 GB ã»ã©ãã£ãã®ã§æ£è§£ã ã£ããšæã£ãŠããŸãã
Cloudflare Pages ã¯äœ¿ãåæãæé«ã§ããå人çã«ã¯ãããã¯ãšã³ãã® API ãµãŒããžã® DNS ãšåãããŠäœ¿ãã®ã«ã¯ç¹ã«æé«ã ãšæããŸãã3ã
ããã¯ãšã³ã
ããã¯ãšã³ãã¯ããã³ããšã³ãããã®ãªã¯ãšã¹ããåŠçãã API ãµãŒããšããŠæ©èœããŸãã
èšèªã»ãã¬ãŒã ã¯ãŒã¯
Python3 ã§åäœãããŠããŸã4ãWeb ãã¬ãŒã ã¯ãŒã¯ãšã㊠Python ããŒã¹ã® FastAPI (+ Uvicorn + Gunicorn) ã䜿çšããŠããŸãã
é«éåã®å·¥å€«ãããªãè²ã
ãšé 匵ã£ãŠããŸããElasticsearch ã Solr ãªã©ã®ã©ã€ãã©ãªã Algolia çã®ãµãŒãã¹ã¯äœ¿ã£ãŠããŸãã5ãè²ã
ãªãã¥ãŒãã³ã°ãšåæ§ãããã«ããã¯ãšãªãåŠçã«å¯ŸããŠæ§ã
ãªé«éåã詊è¡é¯èª€ããŠã¿ãŠã现ãããã¥ãŒãã³ã°ãããããç©ã¿äžããŠãã£ãæãã§ã6ããªãªãŒã¹åŸããããã察çã宿œããŠããããŸã ãŸã ãããªãé«éåã®äœå°ãããããããã®ã§ãä»åŸãåŒãç¶ããã¥ãŒãã³ã°ããŠããããšæããŸãã
工倫ã¯éåžžã«å€å²ã«æž¡ãã®ã§ããã«ã¯æžããããŸãããã匷ããŠããã°ã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã®æ§ã
ãªç¥èãšãæžç±ããã€ããã©ãŒãã³ã¹ Python ãã®å
容ããšãŠã圹ã«ç«ã¡ãŸãã7ã
䜿çšã©ã€ãã©ãª
Python ã«æšæºã§å
¥ã£ãŠãã RDBMS ã® SQLite ã䜿ã£ãŠããŸãããã ã SQLite ã¯å¿
èŠæå°éã®äœ¿ãæ¹ããããŠããŸãã8ãèªã¿èŸŒãããŒã¿ã¯ãªãã¹ãã¡ã¢ãªã«ä¹ãããã«ããŠãã¡ã¢ãªã«ã¯ä¹ããããªãäžéšã®ããŒã¿ã®ã¿ SQLite ã«ä¹ããŠãã£ã¹ã¯ãåç
§ããããã«ããŠããŸãã
ãã®ä»ããã¯ãšã³ãã«é¢ããŠã¯å
šãŠèªåå®è£
ã§ãïŒãããâŠæžãå¿ããŠããã远èšããŸãâŠïŒã
ãããã€å
ããã¯ãšã³ã㯠GCP (Google Cloud Platform) äžã® GCE (Google Compute EngineãAWS ã§ãã EC2) ã§åãããŠããŸãã
GCP ã§äœ¿çšããŠãããµãŒãã¹ã»æ©èœã¯äžèšã®ãšããã§ãã
- Google Compute Engine
- Google Cloud Storage
- Google Cloud Load Balancing
- Google Cloud Logging
åœå㯠Docker ã³ã³ããããŒã¹ã®å®è¡ç°å¢ãæ³å®ããŠããã®ã§ãããã³ã³ãããéãèµ·åæéããããããšããã¹ã±ãŒã«ã¢ãŠãæã®èµ·åã®é ããå¿é ãªãããGCE ã€ã³ã¹ã¿ã³ã¹äžã§ãã®ãŸãŸã¢ããªã±ãŒã·ã§ã³ãèµ°ãããŠããŸãããŸããManaged instance groups ã䜿ã£ãŠãè² è·ã«ãã£ãŠãªãŒãã¹ã±ãŒã«ããããã«ããŠããŸãã
ã¡ãªã¿ã«ãGCE ã®ã€ã³ã¹ã¿ã³ã¹ã¯ e2-small (2vCPU, 2GB RAM) ã䜿çšããŠããŸããe2-micro (2vCPU, 1GB RAM) ã§ãååé«éã«åäœããã®ã確èªããã®ã§ãããäžåºŠæ¬çªç°å¢ã§äœ¿çšããŠã¿ããšããããããããã¹ã±ãŒã«ã¢ãŠãããŠã€ã³ã¹ã¿ã³ã¹æ°ã倧å€ãªããšã«ãªã£ãŠããŸã£ãã®ã§ïœãããä»¥æ¥æã㊠e2-small ã«ããŠããŸãïŒãã®ãã¡èª¿æ»ã»å¯Ÿå¿ã㊠e2-micro ã«ããããšã¯æã£ãŠããŸãïŒ
ãŸãšã
å人éçºã§ãæ°ããè³è²žç©ä»¶æ€çŽ¢ã® web ãµãŒãã¹ Comfy ãäœããŸããã
ãŸã ãŸã è²ã
æ¹åãã¹ãç¹ãçãã ããã9ã§ãåŒãç¶ãé²åãããŠããäºå®ã§ããä»åŸã¯æè¡é¢ã§ãç©æ¥µçã«çºä¿¡ããŠãããããšæã£ãŠããã®ã§ãçåç¹ãèãããããšãªã©ããã°ããã®èšäºã®ã³ã¡ã³ãã Twitter ã® DM ãªã©é ããã°ãšæããŸãã
ãããŸã§ãèªã¿é ãããããšãããããŸããã
ãããããã°ãã²ããããããªãã€ãŒããªã©é ãããšãšãŠãå±ã¿ã«ãªããŸãïŒïŒ
ãããããé¡ãããããŸãïŒïŒïŒ
-
2021幎㮠7 æã«æåã®ãªãªãŒã¹ãããã®ã§ãããè²ã ãã£ãŠãã£ããééããåŸ 11 æã«åãªãªãŒã¹ããŸããã â©
-
ãã®èšäºã¯ã2021幎7æã®åæãªãªãŒã¹ã®çŽåŸã« Zenn ã«æçš¿ããèšäºã®å€§å¹ ãªæ¹èšçã«ãªããŸãã Zenn ã®èšäºã¯ 7 æã®ãµãŒãã¹ééåŸãã°ããããŠéå ¬éã«ããã®ã§ããã倿¹é¢ããåå ¬éã®ãèŠæãé ããã®ã§ããã®åºŠæ°ãã«æžãçŽããŠå ¬éããããšã«ããŸããã â©
-
ãªããéžå®ã«åœãã£ãŠã¯ãã®èšäºãåèã«ããŸããã â©
-
Python 倧奜ããªã®ã§ãã â©
-
ãããã®ã©ã€ãã©ãªããµãŒãã¹ãã¬ãã¬ãã«ãã¥ãŒãã³ããã«äœ¿ãããã¯éãåäœãããšæããŸããïŒãã³ãããŒã¯åã£ãããã§ã¯ãªãã®ã§ã¯ã£ãããšã¯åãããŸãããâŠãããã³ãããŒã¯ã«èå³ããæ¹ããããã²ã³ã¡ã³ããªã©é ããã°ãšæããŸãïŒïŒ â©
-
ãã¡ãããã©ããªã«é 匵ã£ãŠãé床åºãªãã ãããšããæ¹éã¯æåããæé€ããŠããŸãããããŠçµæçã«ã¯ã·ã³ãã«ãªæ€çŽ¢ãšã³ãžã³ãèªåå®è£ ããŠãããããªæãã«ãªã£ãŠããŸãããã â©
-
é«éåã«é¢ããŠæžãããã¿ã»è©±ãããã¿ã¯ããããããã®ã§ãä»åŸã®èšäºå·çãã€ãã³ãç»å£ãªã©ã§ã¡ããã¡ãã衚ã«åºããã°ãšæã£ãŠããŸãã â©
-
ãªãªãŒã¹ããæ°æ¥åãããåãŸã§ã¯ãSQLite ã¯äœ¿çšããå šãŠãã¡ã€ã«ã·ã¹ãã ããŒã¹ã§ããããšæã£ãŠãããããã â©
-
ãŸã ãŠãŒã¶ããã®æ¹åèŠæã«é¢ããŠã察å¿ããããŠããŸããâŠé 匵ããŸãïŒ â©

