ä¾åé¢ä¿ã¨é層æ§é ã®è»
21ä¸ç´ç¾å¨ã®ããã°ã©ãã³ã°è¨èªã«ããã¦ãã¢ã¸ã¥ã¼ã«ã¨ããæ©è½ã¯ã»ã¼å¿ è¦ä¸å¯æ¬ ã§ãããã½ã¼ã¹ã³ã¼ããåå²ããæ示çãªä¾åé¢ä¿ãæå®ããä»çµã¿ã§ããã¢ã¸ã¥ã¼ã«ã¯ã以ä¸ã®ãããªæ§ã ãªæ©æµãããããã
- ã¤ã³ã¯ãªã¡ã³ã¿ã«ãã«ã: ã¢ã¸ã¥ã¼ã«ãã¨ã«ã³ã³ãã¤ã«çµæãä¿åããå¤æ´ããã¦ããªãé¨åãåã³ã³ãã¤ã«ããã®ãé²ãã
- å é¨ã®é è½: å®è£ ã®è©³ç´°ãé è½ããã¢ã¸ã¥ã¼ã«å¤ãã触ããªãããã«ãããããã°ã©ã ã®è¦éããããããããä¸æ£ãªæä½ãããæ©ä¼ãæ¸ããã
- ã¢ã¼ããã¯ãã£ã®æ´ç: ã¢ã¸ã¥ã¼ã«ã¯ä»ã®ã¢ã¸ã¥ã¼ã«ãåç §ã§ããããååã¨ãã¦ç¸äºåç §ã¯ããªããä¾åã®åããå®ãããã¨ã§ãé©åãªæ½è±¡åã¨ã ããã«åºã¥ããå®è£ ã®åé¢ãä¿ãã
ãã¦ããããã¢ã¸ã¥ã¼ã«ã便å©ã¨è¨ãã©ãæ°ãå¢ããããã¨ãããã«æ±ãã«ãã*1ããã®ããããã£ã¬ã¯ããªã®æ§é ãã¢ã¸ã¥ã¼ã«ã®é層æ§é ã¨ãã¦éç¨ããä»çµã¿ãåãã£ã¦ãããã¨ãå¤ãã ã³ã³ãã¤ã©ããè¦ãã°ãããããªã©ã§åºåãããã¢ã¸ã¥ã¼ã«åããã対å¿ãããã¡ã¤ã«ãæ¢ãã ãã®è©±ã ãããã¾ã§äººéã®é½åã§ãããä¸ã§æãããããªæ©æµã¨ã¯ãã¾ãé¢ä¿ãã¦ããªãââã ããæ¬å½ã«ããã§ããã®ã ãããã
è¥å¹²ããã¨ãããä¾ã§ã¯ããããæ²ç¤ºæ¿ã®ã¢ããªã±ã¼ã·ã§ã³ãå®è£ ããã«å½ããã以ä¸ã®ããã«ã¢ã¸ã¥ã¼ã«ãåå²ããã¨ãããã
Utilsã¨Modelã®äºã¤ã®ãã£ã¬ã¯ããªãè¨ãããModel.Commentã§ã¯ãæ稿ã表ããã¼ã¿åãããã¼ã¿ãã¼ã¹ã®æä½ãå®ç¾©ãããUtils.Miscã«ã¯éå¤ãªä¾¿å©é¢æ°ãã¾ã¨ããUtils.Markupã§ã¯ãæ稿ãHTMLã«å¤æããå¦çãè¨è¿°ããã
ããããã¾ãããããªãããã®æ§é ã«ã¯åé¡ããããã¨ããã®ããUtilsã¨Modelsã¯ããã£ã¬ã¯ããªåä½ã§è¦ãã¨ãåæ¹åã«ä¾åé¢ä¿ãæã£ã¦ããã®ã ã å è¿°ããéããã³ã³ãã¤ã©ããè¦ãã°ãã¢ã¸ã¥ã¼ã«ãã©ãã®ãã£ã¬ã¯ããªã«å±ãã¦ããããæ¬è³ªã¯å¤ãããªãããæ£ããå ¥åã§ãããããããéçºè ã¯ãã£ã¬ã¯ããªã®åå²ã«æå³ãè¦åºãã¦ããã¨ããé½é½¬ãçºçãã(ããã¦ãã³ã³ãã¤ã©ã¯ãããææãããããªã)ããã®é½é½¬ãæ¾ç½®ããã¾ã¾éçºãç¶ãã¦ããã¨ãæ³å®å¤ã«æ·±ãä¾åé¢ä¿ãçºçãã¦ãã«ããé ããªã£ããããModelã«ä¾åããUtilsãã¨ããåå¨ã¨è¾»è¤ãåãããããã«ãæ¬æ¥é è½ãã¹ã詳細ãã©ãã©ãæ¼ãåºããããã¦ãã¾ãã
ãããé²ãæ段ã¨ãã¦ãããããã®ãã£ã¬ã¯ããªãããã±ã¼ã¸åããä¾åé¢ä¿ãæ示ããã¨ãããã®ããããããã¯åæ¹åã®ä¾åãé²ãã¨ããæå³ã§ã¯å¹æçãªä¸æ¹ãããã±ã¼ã¸ãã¨ã®ã¡ã¿ãã¼ã¿ã管çããã³ã¹ããé«ã¾ã£ãããããã±ã¼ã¸åä½ã§ã®ãã£ãã·ã¥ã¯ã§ãã¦ããã¢ã¸ã¥ã¼ã«åä½ã®ã¤ã³ã¯ãªã¡ã³ã¿ã«ãã«ããå¹ãã«ãããªããªã©ããã¡ãªãããç¡è¦ã§ããªãã
ãªãã°ãæ°ãã«éç解æãå®è£ ãããããã£ãåé¡ãæ¤åºãããã§ã¯ãªãããã¾ãã¯ã¢ã¸ã¥ã¼ã«ã®ä¾åé¢ä¿ã®ã°ã©ããå¯è¦åãã¦è¦éããç«ã¦ããââdotå½¢å¼ã«å¤æããgraphvizã§è¡¨ç¤ºããã ãã®ç°¡åãªè©±ã ã
â¦â¦ã©ãããããããªç°¡åãªè©±ã§ã¯ãªãã£ãããã ã
ããå°ãããã£ã¬ã¯ããªå士ã®ä¾åé¢ä¿ã«çç®ãã¦èãã¦ã¿ãããFoo.Bar.A.BãFoo.Baz.C.Dã«ä¾åãã¦ããã¨ãããBarãBazã«ä¾åãã¦ãããã¨ããæ å ±ããæ®ãã°ãããããæ·±ãé¨åã®æ å ±ã¯åãã§ãæ§ããªããã¤ã¾ãã以ä¸ã®ãããªã¢ã«ã´ãªãºã ã§ã°ã©ããå°ãåºãã
- ä¾åå ãä¾åå ã®ã¢ã¸ã¥ã¼ã«åããããã§åºåãããªã¹ãã«ãã
- ã©ã¡ããã®ãªã¹ãã空ã«ãªã£ãããçµäºãã
- ãªã¹ãã®å
é ãè¦ã
- ååãåããªããå é ãåãé¤ã
- ååãéã£ã¦ãããã辺ãä½æãã
ãFoo.BarãFoo.Bar.Bazã«ä¾åãã¦ãããã®ãããªé¢ä¿ã¯ä»åã¯èæ ®ããªããããèæ ®ãããå ´åã¯ãããªã¹ãã空ã«ãªã£ããã辺ãä½æãããããã«æ¸ãæããã°ããã
ãã®ã¢ã«ã´ãªãºã ãå©ç¨ããã¨ã親ã®ãã£ã¬ã¯ããªãã¨ã«åå²ãããã°ã©ããã§ããgraphvizã®circoã使ãã¨å³ã®ããã«ãªããæåã®ã°ã©ãã¨ã¯ãããéãã ã
巨大ãªã³ã¼ããã¼ã¹ã«ãããã¢ã¸ã¥ã¼ã«éã®ä¾åé¢ä¿ã¯ãæç´ã«æç»ããã¨ããã§ã¹ãã²ããã£ã©ããã§ã¯ãªã度ãé£ãã¢ãã«ãããªããªããããã§ãé層ãã¨ã«ä¾åé¢ä¿ããå²ããââããªãã¡ãã¢ã¸ã¥ã¼ã«ãã¾ã¨ãããã©ã«ãå士ã«ãä¾åé¢ä¿ãè¦åºããå帰çã«è¦ç´ãããã¨ã«ãã£ã¦ãç¾ããå¯è¦åã§ãã pic.twitter.com/dwx3MA2DCH
— ãµã¿ a.k.a.DJ Monad (@fumieval) 2022å¹´4æ28æ¥
æåãã¯ãã¼ãºã¢ããããã¨ä»¥ä¸ã®ããã«ãªãããã£ã¬ã¯ããªã«è¦ç´ããã¦ãããããé¢ä¿ãèªã¿ããããªã£ã¦ããã®ããããã
ã ãæ¬é¡ã«æ»ããããã£ã¬ã¯ããªã®æ義ãä¿ã¤ããã«ã¯ãç¸äºä¾åããªãââãããããã«æåéè·¯ãåå¨ããªããã¨ãä¿è¨¼ããããã¤ã¾ããå¼·é£çµæåå解ããã°ããã®ã ãæ©éä¼ç¤¾ã®ã³ã¼ããã¼ã¹ã«é©ç¨ãã¦ã¿ãã¨ãããªãã®å¤§ç©ãé£ãããå辺ã®éã¿ã¯ã¤ã³ãã¼ãã®ä»¶æ°ã表ãã
ãã®ã°ã©ãã¯å¼·é£çµã§ãããããªãã¡ã©ã®é ç¹ã®éã«ãéãåå¨ãããæ¬æ¥ããã®ãããªãã¨ãçºçããªãããã«ããã±ã¼ã¸ãåå²ãã¦ããã¯ããªã®ã§å°ã é©ãã®çµæã ãããã±ã¼ã¸ãç´°ããããããã«ãæãéãã§ãã¦ãã¾ã£ãã®ã ããã
æåéå·¡åã°ã©ãã«ããããã«åãé¤ãã¹ã辺ã¯Feedback arc set(FAS)ã¨å¼ã°ãã¦ããã æå°ã®FASãæ±ããã®ã¯NPå°é£ã ããä»åã®ã±ã¼ã¹ã§ã¯æãéã®éã¿ãå§åçã«å°ããããã®ãããéã辺ããé ã«åæ§ç¯ãã¦ãããéè·¯ãçãåè£ã ãå¼¾ã貪欲æ³ã§å®ç¨çãªçµæãå¾ããããã ã
件ã®ã°ã©ãã«ã¤ãã¦ã¯ã以ä¸ã®åã¤ãé¤å»ããã¨DAGã«ãªãã幸ãã件æ°ã¯ããã»ã©å¤ããªãã®ã§ã循ç°ããªããã®ã¯ããã»ã©é£ãããªãããã ã
Queries -> QueryServices Effects -> JobWorker SendGrid -> Effects DomainObjects -> Effects
ããã¾ã§ã®å¦çãèªååãããããHaskellã³ã³ãã¤ã©ã®ãã©ã°ã¤ã³ã¨ãã¦å®è£
ããã¹ã¿ã³ãã¢ãã³ã®ã³ãã³ãã©ã¤ã³ãã¼ã«ã¨ãã¦å®è£
ããã orderorder src
ãå®è¡ããã¨ãsrc以ä¸ã®ã¢ã¸ã¥ã¼ã«å士ã®ä¾åé¢ä¿ã調ã¹ãå¼·é£çµæåãåæããããã®çµæãä¿åãã¦ããã¦å·®åãCIãªã©ã§ãã§ãã¯ããã°ãé¢ä¿ãç ´å£ãããããªä¾åé¢ä¿ãå¢ããéã«æ°ä»ããã¨ãå¯è½ã«ãªãã
ãã¡ãããããã¾ã§ã®è°è«ã¯Haskell以å¤ã«ãé©ç¨ã§ãããããä»ã®è¨èªã«ãåçã®ãã®ãå®è£ ãããã¨ã¯å¯è½ãªã¯ãã ã
ã¾ã¨ã
ä»ã¾ã§ã¯ã¢ã¸ã¥ã¼ã«ã®é層æ§é ã«æ確ãªã«ã¼ã«ããªããããæå³é£¾ãã ã£ãããããããã£ã¬ã¯ããªéã®ä¾åé¢ä¿ãã¨ããæ¦å¿µãå°å ¥ãããã¨ã§ãèªç¶ã«ãã¢ã¸ã¥ã¼ã«ã®ä¾åé¢ä¿ãDAGã§ããããã«ããã£ã¬ã¯ããªã®ä¾åé¢ä¿ãã¾ãDAGã«ãªããã¨ããå¶ç´ãå°å ¥ã§ããæã ã®ç´è¦³ã¨ã®ããåãããã§ããããã®ä»çµã¿ãã¯ãªã¼ã³ã¢ã¼ããã¯ãã£ã®ä¿é²ã»ä¿å®ã«æ´»ç¨ãã¦ããããã
PRæ
ããã¾ã§æ£ã é層æ§é ã®è©±ããã¦ããããHERPã¯ãªã¼ãã³ã§ãã©ãããªçµç¹ãæ¯ã¨ãã¦ãããç¾å¨ãç©æ¥µçã«æè¡è ãåéãã¦ãããèå³ã®ããæ¹ã¯ã以ä¸ã®è³æãåç §ããããã
*1:ã¯ã¤ã«ãã«ã¼ãã使ãã¨ãã³ãã³ãã©ã¤ã³å¼æ°ã®é·ããéçãè¶ ãã¦ãã¾ããªã©ãç¾å®çãªæ¯éãçºçãã