1. Clojureãšã¯ïŒ
Clojureã¯ããªããã»ããããŒã«ãã£ãŠèšèšããããåçãã€é¢æ°åã®ããã°ã©ãã³ã°èšèªã§ãããªã¹ããäžå¿ã«æ®ãã匷åãªéå ·ãšããŠãã¯ããæã¡åãããŠããŸãããŸãJavaä»®æ³ãã·ã³ïŒJVMïŒäžã§åäœããããšãåæã«èšèšãããŠãããJavaãšã®ã·ãŒã ã¬ã¹ãªé£æºãå¯èœã§ãã
1.1 Clojureã®ç¹åŸŽ
Clojureã®æ倧ã®ç¹åŸŽã¯ãé«ã¬ãã«ãªæœè±¡åãšç°¡æœãªæ§æãçºãããé¢æ°åããã°ã©ãã³ã°ãã®ãã©ãã€ã ãæã£ãŠããããšã§ãã ããŒã¿ã®äžå€æ§ãšãé¢æ°ã®äžçŽåžæ°ãšããŠã®æ±ãããClojureãæäŸããé«åºŠãªæœè±¡åãå¯èœã«ããŠããã®ã§ãã ãŸããClojureã¯JVMäžã§åäœãããããæ¢åã®Javaã©ã€ãã©ãªãå©çšã§ãããšããç¹åŸŽãæã¡ãŸãã ããã«ãããJavaãè±å¯ãªã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãæã€ããšãããClojureã§ããããã掻çšããããšãå¯èœãšãªããŸãã ããã«ããªã¹ãåŠçãåŸæãªèšèªã§ããããã倧éã®ããŒã¿ãé«éã«åŠçããããšãå¯èœã§ãã
1.2 Clojureã®å©ç¹
Clojureãæã£ãŠããæ倧ã®å©ç¹ã¯ãé«åºŠãªæœè±¡åãšç°¡æœãªæ§æãéããŠè€éããæžããããšãã§ããç¹ã§ãã ãŸããClojureãJavaã®æ¢åã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã掻çšã§ãããããéçºå¹çã®åäžã«å¯äžããŠããŸãã ããã«ãClojureã¯é«åºŠãªæœè±¡åãå¯èœã«ããããã倧éã®ããŒã¿ã®é«éåŠçããåæå€çºçãªåŠçïŒäžŠè¡åŠçïŒã容æãšãªããŸãã ãããã®ç¹é·ã«ãããWebãµãŒãã¹ãªã©ã®ããã¯ãšã³ãéçºã«å€ãçšããããŠããŸãã
2. ClojureãåŠã¶ããã®æºå
ããã°ã©ãã³ã°èšèªãåŠã¶ããã®ç¬¬äžæ©ã¯ãé©åãªåŠç¿ãªãœãŒã¹ãéããåŠç¿ç°å¢ãæŽããããšã§ããããŠãããã§ã¯Clojureã®åŠç¿ã«å¿ èŠãªãã®ã¯äœã§ããããã
2.1 Clojureã®åŠç¿ãªãœãŒã¹
Clojureã®åŠç¿ãªãœãŒã¹ãšèšãã°ããŸããŸããã®çš®é¡ã¯å¢ãç¶ããŠããŸããåããŠClojureã«è§Šããåå¿è ãããæ·±ãç¥èãæ±ããŠããäžçŽè ãŸã§ãå¿ èŠãšããæ å ±ã¯äººããããã ããã§ãã
ãšã¯ãããåºç€ããåŠã¶ã«ã¯ãªã³ã©ã€ã³ã®ãã¥ãŒããªã¢ã«ãã¬ã€ããéåžžã«äŸ¿å©ã§ããäŸãã°ãClojureå ¬åŒãŠã§ããµã€ãã§ã¯ãåºæ¬çãªæ§æãæäœæ¹æ³ãéèŠãªæŠå¿µã詳ãã解説ãããŠããŸããããã«ãClojure for the Brave and Trueã¯ãç¥èããŒãã®ç¶æ ããã§ãå§ãããããéåžžã«äººæ°ã®ããåŠç¿æžç±ã§ãã
ãŸããClojureã®ã³ãã¥ããã£ã¯éåžžã«æŽ»åçã§ã質åãçžè«ã«ãå¿«ãçããŠãããŸããäŸãã°ãSlackã®Clojuriansã°ã«ãŒãããRedditã®Clojureã°ã«ãŒãã¯ãClojureã®è³ªåãè°è«ãè¡ãã®ã«æé©ãªå Žæã§ãã
2.2 Clojureã®ç°å¢æ§ç¯
Clojureã®ç°å¢æ§ç¯ã¯ãé©ãã»ã©ç°¡åãªããã»ã¹ã§ããåºæ¬çã«ã¯JVMïŒJava Virtual MachineïŒäžã§åäœãããããJavaãã€ã³ã¹ããŒã«ãããŠããç°å¢ã§ããã°ããããã®ãã·ã³ã§ã䜿çšã§ããŸããããå ·äœçã«ã¯ã以äžã®ã¹ãããã«åŸãããšã§ãClojureã®ç°å¢ãæŽåã§ããŸãã
1. Javaã®ã€ã³ã¹ããŒã« 2. Leiningenã®ã€ã³ã¹ããŒã« 3. ãããžã§ã¯ãã®äœæãšå®è¡
ãŸãæåã«ãJava Runtime EnvironmentïŒJREïŒãææ°ã®ããŒãžã§ã³ã«æŽæ°ããŸãããããŠãLeiningenãšããClojureã®ãããžã§ã¯ã管çããŒã«ãã€ã³ã¹ããŒã«ããŸãããã®ããŒã«ã¯ãæ°ãããããžã§ã¯ãã®äœæããã¹ãããã«ãããããã€ãªã©ãClojureã®ãããžã§ã¯ã管çã«å¿ èŠãªã¿ã¹ã¯ãå šãŠã«ããŒããŠããŸãã
ã€ã³ã¹ããŒã«ãå®äºããããæ°ãããããžã§ã¯ããäœæããå®è¡ããŠã¿ãŸããããããã¯äžäŸã§ããã以äžã®ãããªã³ãã³ããå®è¡ããããšã§ãæ°ãããããžã§ã¯ããäœæã§ããŸãã
lein new app my-first-clojure-app cd my-first-clojure-app lein run
ãã®ããã«ãClojureã®åŠç¿ã®ããã®ç°å¢ãæŽåããããšã¯ãåå¿è ã§ã容æã«è¡ãããšãã§ããŸãã
3. Clojureã®åºæ¬
Clojureã¯ãLispã®äžæ¹èšã§Javaä»®æ³ãã·ã³ïŒJVMïŒäžã§åäœããŸãã®ã§ããã®åºæ¬çãªæ§æã¯Lispã«äŒŒãŠããããšãèŠããŠãããšè¯ãã§ãããã詳ããèŠãŠãããŸãããã
3.1 Clojureã®åºæ¬æ§æ
Clojureã®åºæ¬æ§æã¯å€å°ä»ã®èšèªãšç°ãªããŸãããç¿åŸããã°éåžžã«é«éãã€å¹ççã«ã³ãŒãã£ã³ã°ã§ããŸããäžè¬çãªåŒïŒexpressionïŒã¯é¢æ°åŒã³åºããšããŠè§£éãããæ¬åŒ§ ()
ã§å²ãŸããäžã®æåã®èŠçŽ ãé¢æ°ãšããŠæ±ãããŸãã以äžã«äžäŸã瀺ããŸãã
(user=> (+ 1 2 3) 6
åºåçµæãšããŠã6ããåŸãããŸããããã¯ãæ°åŠçè¡šçŸãšã¯ç°ãªããæŒç®åãæ°å€ã®åã«æ¥ãŠããããšã«æ³šæãå¿ èŠã§ãã
3.2 Clojureã§ã®ããŒã¿æäœ
Clojureã§ã¯ãããŒã¿æäœãä»ã®ããã°ã©ãã³ã°èšèªãšã¯ç°ãªãã¢ãããŒããåãããŸããå šãŠã®ããŒã¿åã¯äžå€ïŒimmutableïŒã§ãããŒã¿ã®å€æŽãšããæŠå¿µãå®è³ªçã«ã¯ååšããŸããããããæ°ããããŒã¿ãäœæãããŸããããã¯å®å šãªäžŠè¡åŠçãå¯èœã«ããããã°ã©ã ã®äºæž¬å¯èœæ§ãé«ããŸãã
(def my-list (list 1 2 3)) ;;=> #'user/my-list (def my-new-list (conj my-list 4)) ;;=> #'user/my-new-list my-list ;;=> (1 2 3) my-new-list ;;=> (4 1 2 3)
äžèšäŸã§ã¯ãæ°ããèŠçŽ ‘4’ ããªã¹ãã«å ããŸããããå ã®ãªã¹ã my-list ã¯å€æŽãããŠããŸãããæ°ãããªã¹ã my-new-list ãäœæãããŸããã
3.3 Clojureã®ã³ã¬ã¯ã·ã§ã³
Clojureã¯ããªã¹ãããã¯ã¿ãã»ãããããããªã©ã®åŒ·åãªã³ã¬ã¯ã·ã§ã³åããµããŒãããŠããŸãããããã¯ãã¹ãŠäžå€ã§ã匷åãªæäœæ©èœãåããŠããŸãã
(def my-map {:key1 "value1" :key2 "value2"}) ;;=> #'user/my-map (assoc my-map :key3 "value3") ;;=> {:key1 "value1", :key2 "value2", :key3 "value3"}
äžèšäŸã§ãæ°ããã㌠:key3 ããããã«è¿œå ããŸããããå ã®ããã my-map ã¯å€æŽãããŠããŸãããæ°ããããããäœæãããŠããŸãã
ãããã®ç¹åŸŽã«ãããClojureã¯å¹ççã«ãããããŒã¿ãæäœããããã°ã©ã ãèšè¿°ããããšãå¯èœã§ãã
4. Clojureã®ãã¬ãŒã ã¯ãŒã¯ã«ã€ããŠ
ãã®ã»ã¯ã·ã§ã³ã§ã¯ããã¬ãŒã ã¯ãŒã¯ã®æŠå¿µãClojureã®ãã¬ãŒã ã¯ãŒã¯ã®ç¹åŸŽããããŠãã¬ãŒã ã¯ãŒã¯ã䜿ãã¡ãªããã«ã€ããŠè©³ãã解説ããŸãã
4.1 ãã¬ãŒã ã¯ãŒã¯ãšã¯
ãã¬ãŒã ã¯ãŒã¯ãšã¯ããœãããŠã§ã¢ã®æ§é ãçµã¿ç«ãŠãããã®ãæ çµã¿ãã®ããšãæããŸããå ·äœçã«ã¯ãéçºè ãç¹å®ã®ã¿ã¹ã¯ãæ©èœãå¹ççã«å®è£ ã§ããããã«ãæ¢ã«äžéšã®ã³ãŒããæžãããŠããèšèšã®ãã¿ãŒã³ã®ããšãèšããŸãããã¬ãŒã ã¯ãŒã¯ã¯ãã³ãŒãã®åå©çšæ§ãé«ããããšã§ãéçºè ãæ°ããªã¢ããªã±ãŒã·ã§ã³ããŒãããäœæããéã®ããŒãã«ãäžããŸãã
4.2 Clojureã®ãã¬ãŒã ã¯ãŒã¯ã®ç¹åŸŽ
Clojureã®ãã¬ãŒã ã¯ãŒã¯ã¯ããã®é¢æ°åããã°ã©ãã³ã°èšèªãšããŠã®ç¹æ§ã掻ãããŠéçºãããŠããŸããé¢æ°åããã°ã©ãã³ã°ã¯ãããŒã¿ã®äžå€æ§ãšçŽç²ãªé¢æ°ãã€ãŸãå¯äœçšã®ãªãé¢æ°ã®äœ¿çšãéèŠããŸããããã«ãããClojureã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãããã°ã©ã ã®ç¶æ ãäžå 管çããããšã§ãã°ã®çºçãé²ãããŸãã䞊è¡åŠçãå¹çããè¡ãããã®æ§é ãçšæãããŠããŸãããããã®ç¹æ§ã¯ãClojureã®ãã¬ãŒã ã¯ãŒã¯ã倧èŠæš¡ãªããŒã¿åŠçãè€éãªããžãã¹ããžãã¯ã®å®è£ ã«é©ããŠããçç±ã§ãã
4.3 ãã¬ãŒã ã¯ãŒã¯ã䜿ãã¡ãªãã
ãã¬ãŒã ã¯ãŒã¯ã䜿ãæ倧ã®ã¡ãªããã¯ãäžè²«æ§ãšå¹çæ§ã®åäžã§ãããã¬ãŒã ã¯ãŒã¯ãæäŸããèšèšãã¿ãŒã³ãæ¢åã®ã³ãŒããå©çšããããšã§ãäžè²«ããéçºã¹ã¿ã€ã«ãšé«åºŠãªåå©çšæ§ãå®çŸãããŸããããã«ãããéçºè ãåãã¿ã¹ã¯ã«ç¹°ãè¿ãæéãè²»ããããšãªããæ°ããæ©èœã®éçºã«ããéäžããããšãã§ããŸãããŸãããã¬ãŒã ã¯ãŒã¯ã«ã¯ããããã»ãã¥ãªãã£ã®åé¡ãåé¿ããããã®ã¡ã«ããºã ãçµã¿èŸŒãŸããŠããããšãå€ããããã«ããå®å šæ§ãåäžããŸãã
5. Clojureã®äººæ°ãã¬ãŒã ã¯ãŒã¯
ãã¬ãŒã ã¯ãŒã¯ãšã¯ãã¢ããªã±ãŒã·ã§ã³ãç°¡åã«æ§ç¯ããããã®ããŒã«ã®1ã€ã§ããã䟿å©ãªé¢æ°ãã©ã€ãã©ãªãéããŠããã±ãŒãžåãããã®ã§ããããã§ã¯ãClojureã§äœ¿ãããŠãã人æ°ã®ãã¬ãŒã ã¯ãŒã¯ã«ã€ããŠèŠãŠãããŸãããã
5.1 Ring
Ringã¯ãClojureã§Webã¢ããªã±ãŒã·ã§ã³ãäœæããããã®ãã¬ãŒã ã¯ãŒã¯ã§ããHTTPã®ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ãæ±ãæ¹æ³ãç°¡åã«æœè±¡åããŠãããéçºè ã¯ããã«ããçŽæçã«ç解ãããããªããŸãããŸããRingã¯ããã«ãŠã§ã¢ãšããä»çµã¿ãããããªã¯ãšã¹ããã¬ã¹ãã³ã¹ãæè»ã«åŠçããããšãã§ããŸããããã«ãRingã¯Clojureã®ã³ã¢ãªéšåã«ç§ã§ãŠããããããã®ç¹æ§ãæ倧éã«æŽ»ããããšãã§ããŸãã
5.2 Compojure
Compojureã¯ãClojureã®äžã§åäœããã«ãŒãã£ã³ã°ã©ã€ãã©ãªã§ããããã«ããURLãã¿ãŒã³ã«å¯Ÿããã«ãŒãã®å®çŸ©ã容æã«ããããšãã§ããŸããCompojureã¯Ringãšäžç·ã«äœ¿ãããããšãå€ãã§ãããå®éã«ã¯Ringã®äžéšã§ã¯ãªãç¬ç«ããã©ã€ãã©ãªã§ãããã®ãããCompojureã䜿çšããããšã§ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ããžãã¯ãæè»ã«çµã¿åãããŠç®¡çããããšãã§ããŸãã
5.3 Luminus
æåŸã«ãLuminusã¯Clojureã§ãã€ã¯ããµãŒãã¹ãWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ãã¬ãŒã ã¯ãŒã¯ã§ããLuminusã¯ããããã¬ãã«ã®éçºè ãå©çšã§ããããèšèšãããŠãããClojureã§ã®Webéçºãç°¡åã«å§ããããšãã§ããŸãããŸããLuminusã¯ããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ããã³ãã¬ãŒããšã³ãžã³ãå®çŸ©ãããRESTfulãªURLã®çµè·¯èšå®ãªã©ãé«åºŠãªæ©èœãåããŠããŸããããã«ããããœãããŠã§ã¢éçºã«å¿ èŠãªè€éãªéšåãç°¡çŽ åããå¹ççã«éçºãé²ããããšãã§ããŸãã
6. ããããã®ãã¬ãŒã ã¯ãŒã¯ã䜿ã£ãéçºäºäŸ
ããããã® Clojure ãã¬ãŒã ã¯ãŒã¯ãã©ã®ããã«éçºã§æŽ»çšãããŠããã®ããå ·äœçãªäºäŸãéããŠèŠãŠãããŸãããã
6.1 Ringã䜿ã£ãéçºäºäŸ
Ringã¯ãClojureã§äœãããã·ã³ãã«ã§æ±çšçãªWebã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã§ãããã®ã·ã³ãã«ããããã«ãæ§ã ãªçš®é¡ã®ãããžã§ã¯ãã«æŽ»çšãããŠããŸãã
äžäŸãšããŠã倧èŠæš¡ãªããŒã¿è§£æãã©ãããã©ãŒã ãéçºãããããžã§ã¯ãã§Ringã掻çšãããŠããŸãããã®ãã©ãããã©ãŒã ã¯ããŠãŒã¶ãŒãç¬èªã®ããŒã¿è§£æããŒã«ãçµã¿èŸŒãããšãã§ããããã«ãWebAPIãæäŸããŠããŸããRingã®ã·ã³ãã«ãªHTTPãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã®åãæ±ãããã®APIã®éçºãã¹ã ãŒãºã«é²è¡ãããŠããŸãã
6.2 Compojureã䜿ã£ãéçºäºäŸ
次ã«Compojureã§ããCompojureã¯ãClojureã§æžãããã«ãŒãã£ã³ã°ã©ã€ãã©ãªã§ãããWebã¢ããªã±ãŒã·ã§ã³éçºã«ãããHTTPãªã¯ãšã¹ãã®ã«ãŒãã£ã³ã°ãè² ãéšåãå¹çåããŸãã
ããeã³ããŒã¹ãã©ãããã©ãŒã ã®éçºãããžã§ã¯ãã§ã¯ãCompojureãå¹ççãªã«ãŒãã£ã³ã°èšå®ã«ããéçºã¹ããŒããåäžããã圹å²ãæãããŸãããæ°çŸããŒãžãã®ã«ãŒããæã€å€§èŠæš¡ãªãµã€ãã§ããCompojureã®å¹ççãªã«ãŒãã£ã³ã°èšå®ã«ãããæ°ããªããŒãžãæ©èœãè¿œå ããéã®æéãå€§å¹ ã«ççž®ããããšãã§ããŸããã
6.3 Luminusã䜿ã£ãéçºäºäŸ
æåŸã«Luminusã«ã€ããŠã§ããLuminusã¯ãClojureã§ã®å šæ©èœWebã¢ããªã±ãŒã·ã§ã³ã®éçºããµããŒããããã€ã¯ããã¬ãŒã ã¯ãŒã¯ã§ãã
äžã€ã®äºäŸãšããŠãè€æ°ã®ããŒã¿ãœãŒã¹ããæ å ±ãéçŽããçµ±äžãããããã·ã¥ããŒããæäŸããã·ã¹ãã ã®éçºã«LuminusãçšããããŸããããã®ã·ã¹ãã ã¯ãè€æ°ã®ããŒã¿ãœãŒã¹ãšé£æºããããã®å€æ°ã®APIãæã£ãŠãããLuminusã®å šæ©èœãã¬ãŒã ã¯ãŒã¯ãšããŠã®ç¹æ§ããããAPIã®äžå 管çãå¯èœã«ããŸããã
以äžã®ããã«ãããããç°ãªãç¹æ§ãšå©ç¹ãæã€Clojureã®ãã¬ãŒã ã¯ãŒã¯ã¯ããããžã§ã¯ãã®ããŒãºã«åãããŠæ§ã ãªéçºäºäŸã§æŽ»èºããŠããŸãã
7. Clojureãã¬ãŒã ã¯ãŒã¯éžæã¬ã€ã
ãããŸã§Clojureã®åºæ¬ãšããããã®äººæ°ãã¬ãŒã ã¯ãŒã¯ã«ã€ããŠç解ãæ·±ããŠããŸãããããããå®éã®éçºç°å¢ã§ã©ã®ãã¬ãŒã ã¯ãŒã¯ãéžã¶ã¹ããã¯è¯ãèããã¹ãåé¡ã§ããããããã®ãã¬ãŒã ã¯ãŒã¯ã¯ç¹å®ã®çšéãç¶æ³ã«ãããŠæå¹ãªã®ã§ãæ確ãªçãã¯ååšããŸããã
7.1 ã©ã®ãã¬ãŒã ã¯ãŒã¯ãéžã¶ã¹ãã
ãã¬ãŒã ã¯ãŒã¯éžæã¯ãããªãã®ãããžã§ã¯ããã©ã®ãããªããŒãºãæ±ããŠãããã«ãã£ãŠå€§ããå·Šå³ãããŸããWebéçºã«ãããŠã¯ãRingã¯æãããªããã£ããªHTTPãµãŒããŒãšããŠåäœããCompojureã¯Webã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒãã£ã³ã°ã®ããã®è»œå¿«ãªãã¬ãŒã ã¯ãŒã¯ãšããŠããããŠLuminusã¯å€§èŠæš¡ãªWebã¢ããªã±ãŒã·ã§ã³éçºã®ããã«å¿ èŠãªãã¹ãŠãå æ¬ãããã¬ãŒã ã¯ãŒã¯ãšããŠããããã®ç«ã¡äœçœ®ããããŸãã
äŸãã°ãã¹ã¢ãŒã«ã¹ã¿ãŒãã§ãããžã§ã¯ããå§ããå°ããã€æ©èœãè¿œå ããŠããå Žåã¯Ringããå§ããå¿ èŠã«å¿ããŠCompojureãLuminusã«ç§»è¡ããã®ãäžã€ã®æ¹æ³ã§ããéã«ãæåãã倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³éçºãèŠæ®ããŠããå Žåã¯Luminusãæé©ãããããŸããã
7.2 ãã¬ãŒã ã¯ãŒã¯éžæã®ãã€ã³ã
ãã¬ãŒã ã¯ãŒã¯ãéžã¶éã«ã¯ã以äžã®ãããªãã€ã³ããèæ ®ãããšè¯ãã§ãããã
ãŸãããã¬ãŒã ã¯ãŒã¯ã®åŒ·ã¿ãšåŒ±ã¿ããã£ãããšç解ããããšã§ããRingã¯ãã®ã·ã³ãã«ãããã«ã¹ã¿ãã€ãºã容æã§ããããã®åå šéšèªåã§äœãå¿ èŠããããŸããCompojureã§ã¯ãããè€éãªã«ãŒãã£ã³ã°ã容æã«ããããšãã§ããŸããã倧èŠæš¡ãªWebã¢ããªã±ãŒã·ã§ã³éçºã«ã¯åããŠããŸãããLuminusã¯å€ãã®æ©èœãæäŸããŸããããã®ååŠç¿ã³ã¹ããé«ããšãã£ãå ·äœçãªåŒ·ã¿ãšåŒ±ã¿ããããŸãã
ãŸãããã¬ãŒã ã¯ãŒã¯ã®ã³ãã¥ããã£æŽ»åããµããŒããéèŠãªãã€ã³ãã§ããRingãšCompojureã¯Clojureã³ãã¥ããã£ã«ãããŠå®çããŠããŠã質åãçåã解決ãããããšããã¡ãªããããããŸããLuminusãæåãªéžæè¢ã§ãããæ°ãããã¬ãŒã ã¯ãŒã¯ã§ããããã«ã³ãã¥ããã£ã¯ãŸã æçããŠããªããšããç¹ãèæ ®ããå¿ èŠããããŸãã
æåŸã«åŠç¿æ²ç·ã§ããRingã¯åºæ¬çãªHTTPãµãŒããŒãšããŠã®åäœããã¹ãŠã§ãåŠç¿æ²ç·ã¯æ¯èŒçç·©ããã§ããCompojureã¯ã«ãŒãã£ã³ã°ã®ããã®æ°ããªæŠå¿µãæäŸããŸããããããã¯å®¹æã«ç解ããããšãã§ããŸããLuminusã¯å æ¬çãªãã¬ãŒã ã¯ãŒã¯ã§ããããã«ãã®åŠç¿æ²ç·ã¯æ¥ã§ãããããã«èŠåãã ãã®å€ãã®æ©èœãæäŸããŸãã
ããããèžãŸããããªãèªèº«ã®ããŒãºããããžã§ã¯ãã®ã¹ã³ãŒããããã°ã©ãã³ã°ã¹ãã«ã«ãã£ãŠæé©ãªãã¬ãŒã ã¯ãŒã¯ãéžæããŠãã ããã
8. ãŸãšã: Clojureãã¬ãŒã ã¯ãŒã¯ãšæåãžã®é
ãã®èšäºãéããŠãClojureãšãã®ãã¬ãŒã ã¯ãŒã¯ã«ã€ããŠè©³ããåŠã¶ããšãã§ããŸãããClojureã¯æ©èœçãªããã°ã©ãã³ã°èšèªã§ããããã®ç¹æ§ãç解ãé©åã«äœ¿çšããããšã§éåžžã«ãã¯ãã«ãªããŒã«ã«ãªããŸãããã®äžã§ãClojureã®ãã¬ãŒã ã¯ãŒã¯ã¯éçºã®çŽ æŽãããè£å©ãšãªããŸãã
RingãCompojureãLuminusãšãã£ããã¬ãŒã ã¯ãŒã¯ã¯ããããããç¬ç¹ã®ç¹åŸŽãšå©ç¹ãæã¡ãæ§ã ãªéçºã±ãŒã¹ã«é©ããŠããŸãããããã®ãã¬ãŒã ã¯ãŒã¯ãå¹æçã«å©çšããããšã§ãClojureãåºè»žãšããéçºäœæ¥ã¯åã©ãã®éã³ã®ããã«ãªãã§ãããã
ãŸãããããã®ãã¬ãŒã ã¯ãŒã¯ã¯ç¬åŠã§ç¿åŸããããšãå¯èœã§ãããããæ·±ãç解ãåŸãããã«ã¯ç·Žç¿ãšçµéšãäžå¯æ¬ ã§ããããããã®ãã¬ãŒã ã¯ãŒã¯ã䜿ã£ãŠå®éã«äœããéçºããŠã¿ãŠãããããã®åŒ·ã¿ã匱ã¿ãå®æããŠã¿ãŠãã ããã
ãã®èšäºããClojureã®ãã¬ãŒã ã¯ãŒã¯ãåŠã¶äžã§ã®äžå©ãšãªããããªãã®éçºéãå å®ãããããšãé¡ã£ãŠããŸãã