ãå¤æ°ã®ã¹ã³ã¼ãã¯çãã»ã©è¯ããã¨å¦ä¿¡ãã
å¤æ°ã§ãã¡ã½ããåã§ãã¯ã©ã¹åã§ãè¨ãããã¨ã ããåç´ã«ãã¹ã³ã¼ãã¯çãã»ã©ãããã¨ããæ¹éã§ããã°ã©ã ããã¨ãéã«ä¿å®æ§ãå¯èªæ§ãæªãããã°ã©ã ãã§ãããããã¨ããã£ãããã*1ã
å®éãããã¡ãã¡ããé »ç¹ã«ã¢ã¯ã»ã¹ãããããªãªãã¸ã§ã¯ããã¡ã½ãããã¯ãã¹ã³ã¼ãããã£ã¨åºããã¦ãã¾ã£ãæ¹ã(å ´åã«ãã£ã¦ã¯ã°ãã¼ãã«å¤æ°ãã°ãã¼ãã«é¢æ°ã«ãã¦ãã¾ã£ãæ¹ã)ããã¡ãã¡ãã©ã¡ã¼ã¿æ¸¡ãã®ãã±ããªã¬ã¼ãããã«ããªãã¸ã§ã¯ããæ©è½ã使ããã¨ãã§ããããã°ã©ã ã®å¯èªæ§ãä¿å®æ§ããã£ã¨åä¸ãããã¨ããã£ããããã
ãã¨ãã°ãããã°ã©ã ã®ãããããªç®æããæ¯è¼çé »ç¹ã«ã¢ã¯ã»ã¹ããå¿
è¦ããããããªãªãã¸ã§ã¯ããæ©è½ããã¤ã³ã(æ ¼ç´)ãããå¤æ°ãã¡ã½ããã®ã¹ã³ã¼ããã¯ã©ã¹ãã¡ã½ããå
ã®ãã¼ã«ã«ã«ãã¦ãããã使ãã¨ãã¯ããã¡ãã¡åã¯ã©ã¹ãã¡ã½ããã«ãã©ã¡ã¼ã¿æ¸¡ãã®ãã§ã¼ã³ãç¹°ãè¿ãã¦ä½¿ãããã«ã³ã¼ãã£ã³ã°ãã人ããããã¨ãã«ããªãã¸ã§ã¯ããè¤æ°ã®ãªãã¸ã§ã¯ãããæ§æããã¦ãã¦ããã®é層æ§é ãæ·±ãã£ãããã¡ã½ããããµãã¡ã½ãããå¼ã³åºãã¦æ©è½å®è£
ããé層ãæ·±ãã£ããããã¨ãã¡ã½ããã®ãã¹ãã®åºããããããã®ãªãã¸ã§ã¯ãã«ã¢ã¯ã»ã¹ããã¨ããªã©ã¯ãæªå¤¢ã®ããã«éããã¤ãºã®å¤ãã³ã¼ãã«ãªãã
åºãã¹ã³ã¼ãããã¢ã¯ã»ã¹ã§ããããã«ããæ¹ãæ£ããã±ã¼ã¹ã®ä»£è¡¨çãªä¾ã¯ãæ¨æºå
¥åºåã¹ããªã¼ã (stdinãstdout)ããã¤ã³ããããã°ãã¼ãã«å¤æ°ã®å½¢ã§å®è£
ããã¦ããã·ã¹ãã å¤æ°ããRubyã®printãpã¡ã½ããã ããã(ãã®ç¹ãJavaã®System.out.println()ã¯ãRubyãããããããããµã¤ã¯ãªä»æ§ã ã)
ãã¡ãããããã¯åå空éãããã°ã©ã ã®æ
å½åãåé¡ã¨ã®ãã¬ã¼ããªãããããããç¶æ³ãç¡è¦ãã¦ä¸ç¨æã«ã°ãã¼ãã«å¤æ°ãã°ãã¼ãã«é¢æ°ãã°ãã¼ãã«ã¯ã©ã¹ã使ãã¨ããã¸ã§ã¯ãã大混乱ã«ãªãã®ã§ãæ«ç«¯ã®æªçãªããã°ã©ãã«ã¯ãã¨ãããããå¤æ°ã®ã¹ã³ã¼ãã¯ã§ãããããçããã¦ãããã¨ããæ¹éåºããããã®ã¯ããã ããå°ãªãã¨ããä¸ç´ä»¥ä¸ã®ããã°ã©ãããåç´ã«ãªãã§ãããã§ãã¹ã³ã¼ããçãããã®ã¯ãéã«ç ç²ã大ãããªããããã
ããã¨ãããã¯ããã°ã©ã ã®æ
å½åãåé¡ã«ãä¾åãããæ¯è¼çå°è¦æ¨¡ã®ã·ã¹ãã éçºã§ããã¨ãã°ä¸äººããµã¼ããä¸äººãã¯ã©ã¤ã¢ã³ããæ
å½ãããã¨ããããã«ãã¯ã©ã¤ã¢ã³ãããã°ã©ã å
¨ä½ã®ã³ã¼ãã£ã³ã°ãä¸äººã®ããã°ã©ããæ
å½ãããããªå ´åãåºãã¹ã³ã¼ãã®å¤æ°ã使ãã¡ãªããããã¡ãªãããéãã«åé§ããã±ã¼ã¹ã¯å¤ããªãã ããã
ã¾ããstdin/stdoutãRubyã®printãªã©ã¯ãè¨èªä»æ§ã«è¿ãçµã¿è¾¼ã¿ã®ã·ã¹ãã å¤æ°ãã¡ã½ãããªã®ã§ãå¥æ ¼ã¨ãã¦ã°ãã¼ãã«ã«ã¢ã¯ã»ã¹ã§ããã ãã ãã¨åç´ã«æãããã§ãã人ãã¨ãã©ãããããããã¯éãã
ããã©ã«ãã®è¨èªä»æ§ã®ä¸ã«ãèªåãéçºãããã¨ãã¦ããã¢ããªã±ã¼ã·ã§ã³ã®ãã¡ã¤ã³ã«ç¹åããè¨èªä»æ§ãè¼ãã¦åµãåºãããæ¡å¼µè¨èªä»æ§ãã®ä¸ã§ããã°ã©ã ãæ¸ãã¨çç£æ§ã大ããåä¸ãããããã°ã©ãã³ã°ã®ä¸ç´è
ã«ãªãã¨ãèªç¶ã¨ããããããã°ã©ãã³ã°ã¹ã¿ã¤ã«ã«ãªã人ããã£ãããããDSL(Domain Specific Language)ã®ã³ã³ã»ããã«è¿ãèãæ¹ã ããã®ããã°ã©ãã³ã°ã¹ã¿ã¤ã«ã ã¨ãã¢ããªã±ã¼ã·ã§ã³ãã¸ãã¯ã¬ã¤ã¤ã¨ç¬èªDSLã¬ã¤ã¤ãæ確ã«åé¢ããã¦ãé常ã«ä¿å®æ§ãçç£æ§ãé«ãããã°ã©ãã³ã°ã¹ã¿ã¤ã«ã«ãªãããã®ãã¢ããªã±ã¼ã·ã§ã³ãã¡ã¤ã³ã«ç¹åããè¨èªä»æ§ãã®å®è£
æ段ã®ä¸ã¤ããããã¦ã¹ã³ã¼ããåºãããå¤æ°ãã¡ã½ãããªã®ã ããã¡ãããC#ã®ãå±æ§ãããªãã¬ã¯ã·ã§ã³ã使ã£ãã¡ã¿ã¬ãã«ããã°ã©ãã³ã°ã¨ãããããã°ãã¼ãã«å¤æ°ã¨ã®çµã¿åããã§DSLãå®è£
ããã±ã¼ã¹ãå¤ããä»ã®è¨èªã§ãåæ§ã
ããªãã¡ãå¤æ°ã®ã¹ã³ã¼ããèããã¨ãã«ã¯ããã®å¤æ°ãDSLã§è¨ãã¨ããã®ãæºè¨èªä»æ§ã¬ãã«ã®å¤æ°ã«ãªããããã©ããï¼ããããèããå¿
è¦ãããããããåãªãã¢ããªã±ã¼ã·ã§ã³ãã¸ãã¯ã§ãããªãããã®ã¹ã³ã¼ãã¯çãããæ¹ãããã±ã¼ã¹ãå¤ãããã®ã¢ããªã±ã¼ã·ã§ã³ãã¡ã¤ã³ã§ã¯æ±ç¨çãªæ¦å¿µãæ©è½ã§ããã°ãæºè¨èªä»æ§ã¨ã¿ãªãã¦ãã¹ã³ã¼ããæ¢ãã¦åºãããæ¹ãããã±ã¼ã¹ãå¤ãããã¡ãããããã¯ä¸è¬è«ã§ãã£ã¦ããã®ã¨ãã®ç´æã®é½åããéçºãã¼ã ã®è¦æ¨¡ãå½¹å²åæ
ã«ãä¾åããã®ã§ãæèãç¡è¦ãã¦ãã®ã«ã¼ã«ãé©ç¨ã§ããã¨ããã»ã©åç´ã§ã¯ãªããã
ãåããã¸ãã¯ã®ã³ã¼ãã2度以ä¸æ¸ããªãã¨å¦ä¿¡ãã
åããããªãã¿ã¼ã³ãããã°ã©ã ã®è¤æ°ç®æã«ç¾ããå ´åãããããæ½è±¡åãã¦ä¸ã¤ã®å
±éãã¸ãã¯ã¸ã®ãã©ã¡ã¼ã¿æ¸¡ãã¨ãã¦å®è£
ãããããè¤æ°ç®æããå¼ã³åºãããã«å®è£
ããã¨ãããã°ã©ã ã³ã¼ãéãå°ãããªããä¿å®æ§ãè¯ããªã£ããããªæ°ãããã®ã§ãæªçãªããã°ã©ããããªãã§ãããã§ãå
±éã«ã¼ãã³åãã¾ãã£ã¦ãé常ã«ä¿å®æ§ã®æªãããã°ã©ã ã«ãã¦ãã¾ããã¨ãããã
ã¬ãã«ã®é«ãã¨ã³ã¸ãã¢ã¯ãåããã¸ãã¯ã®ã³ã¼ããè¤æ°ç®æã«ç¾ãã¦ããæ¹ããé©åãªå¤æã®çµæã§ãããã¨ã¯ãã£ããããã¨ãããã¨ãããç¥ã£ã¦ããã
ã¾ã第ä¸ã«ãå°æ¥çãªããã°ã©ã ãã¿ã¼ã³ã®å¤æ´ã®å¯è½æ§ããããç¾å¨ãè¤æ°ç®æã«åããããªããã°ã©ã ãã¿ã¼ã³ãç¾ããã¨ãã¦ããå°æ¥çã«ã¯ããããã¯å¥ã®ä¿®æ£ãåããå¥é²åãã¦ããå¯è½æ§ãäºè¦ããããã¨ãããããã®ãããªå ´åã«ãè¿è¦ç¼çã«ç¾å¨ã ãã®ãã¿ã¼ã³ã®å
±éæ§ã«çç®ãã¦ã«ã¼ãã³ãå
±éåãã¦ãã¾ãã¨ãå¾ã®ä¿®æ£ã®æã«ããã¡ããç«ã¦ãã°ãã¡ããç«ããã®ç¾è±¡ããã¡ãã¡ã«åºã¦ãã¦ãå¿
è¦ä»¥ä¸ã«ããããã®ç®æããå¼ã³åºããã¦ããå
±éã«ã¼ãã³ãé »ç¹ã«å¤æ´ãããããã·ã¹ãã ãä¸å®å®ã«ããããããã°ã¬ã¼ãã«ã¤ãªãããã¨ãå¤ãã
ä»å¾å¥ã
ã®é²åãããå¯è½æ§ãé«ããã¾ããããããã®é²åã®æ¹åæ§ãäºæ¸¬ãã«ããã¨ãã¯ãåããã¿ã¼ã³ãè¤æ°ç®æã«ç¾ãã¦ããããã¦åé·ãªã¾ã¾ã«ãã¦ããæ¹ããæ£ãããã¨ãããããããã¡ãããããã¾ã§ããã¯ãæ¢ãã¦ã³ã¹ããããã¦ã¾ã§å
±éã«ã¼ãã³åã¯ããªãã¦ãããçç±ã®ä¸ã¤ãã¨ããç¨åº¦ã®ãã®ã§ãã£ã¦ãã³ã¬ãçç±ã§ç¾å¨å
±éã«ã¼ãã³åããã¦ãããã®ããããã¦ã¦ãã¾ããã³ããåããå¿
è¦ã¯ãªããç¾å¨å
±éã«ã¼ãã³åããã¦ããå ´åãå°æ¥çã«å¥ã
ã«é²åãããå¿
è¦ãæ¥ãã¨ãã«ãã³ããã«ããã°ããã®ã ããã
第äºã«ãæ½è±¡åã¬ãã«ã®è©±ããããæ½è±¡åº¦ãä¸ãããã¨ã§ãå ±éã«ã¼ãã³åã¯ã§ããããããã°ã©ã ãã³ã³ãã¯ãã«ãªããããã«ãç´æçã«ç解ãã«ãããªãã±ã¼ã¹ãããããã¡ãããåã«ããã ããçç±ã§åããããªãã¿ã¼ã³ããã¡ãã¡ã«ããããç¾ãã¦ããã®ãæ¾ç½®ãã¦ã¯ãã¡ã ããå ±éåã®ã¡ãªããã»ãã¡ãªãããç·åçã«å¤æãã¦ãå ±éåãããã©ããã®æå¿æ±ºå®ãä¸ãã¨ãããã®ãã¡ã¯ã¿ã¼ãèæ ®ã«å ¥ããã¹ãã ã
第ä¸ã«ãå ±éåã®æè³å¹æã®è©±ããããã¨ãã«ãçç´æã®åçºã®éçºã®å ´åãé度ãªå ±éåã¯ãå·¥æ°ã®å¢å¤§ã«ã¤ãªãããä¼¼ããããªãã¿ã¼ã³ã®å ±éé¨åãè¦ãã ãã¦ãæ£ããå ±éåãããã¨ãããããåã«åããããªãã¿ã¼ã³ãã³ãããã¦ä½¿ãåããæ¹ããéçºé度ãéãå ´åãå¤ãããã¨ãã°ããã¬ãCMããã³ãã¬ããã®å°å·ãªã©ã®ã¡ãã£ã¢ããã¯ã¹ã§ã®ã¤ãã³ãã§ä½¿ãããPCãã±ã¼ã¿ã¤ã®ãµã¤ãéçºãªã©ã§ãã客ããã®ã¹ã±ã¸ã¥ã¼ã«ãé ããã¨ã巨大ãªæ失ãçºçãããããªã¨ããªã©ã¯ãå°æ¥ã®ä¿å®æ§ããã®ããã°ã©ã ã«ã¼ãã³ã®å ±éåãªã©ãããç´æããã£ããå®ãæ¹ããã¯ããã«éè¦ã ã
第åã«ãå°æ¥ã®ä¿å®æ§ãæ¡å¼µæ§ãã¨ããã®ã¯ããã³ãã³å¹»æ³ã§ãããªããå°æ¥ãã®ããã«æ¡å¼µãããã ãããã¨ãããã¨ãäºæ¸¬ãã¦æ±ç¨åããå ±éã«ã¼ãã³åãã¦ãããããããäºæ³ãã¦ããã®ã¨ç°ãªãæ¹åã§ã®æ¡å¼µãå¿ è¦ã¨ãªãããã£ããè¦å´ãã¦æ±ç¨åãã¦ããã«ã¼ãã³ãå½¹ã«ç«ããªãã±ã¼ã¹ãå¤ãããã®å ´åãéããªæªæ¥ã®ãã¨ã¾ã§èãã¦ããã¡ãã¡ã«æ±ç¨çã«ä½ããããæ¯åé©å½ã«ããã®å ´ãã®ãã®ããã°ã©ãã³ã°ããã¦ãå°æ¥ãã¾ã£ããäºæ³å¤ã®ä»æ§å¤æ´ããããããã£ãã¨ããã°ã©ã ãã¨ä½ãç´ãã¦ãã¾ã£ãæ¹ãããã¼ã¿ã«ã§è¦ããä½ã³ã¹ãã§ç¾å®çãªãã¨ãå¤ããã¨ããããä¸éå端ã«åªç§ãªããã°ã©ãã¯ãèªåã®æªæ¥ã®äºè¦è½åãéä¿¡ãã¦ãããé度ãªæ±ç¨ã«ã¼ãã³åã«èµ°ããã¡ã ãæªæ¥ã¯èªåãæã£ã¦ãã以ä¸ã«äºæ¸¬ãã«ããã¨ãããã¨ãèã«éããè¬èã«ãªããã¨ãå¿ è¦ã ã
第äºã«ãæ½è±¡åããå
±éã«ã¼ãã³åããããããã°ã©ã ã¯ãå¯èªæ§ãä½ããªããã¹ãã«ã®ä½ãããã°ã©ãã«å¼ãç¶ããããªããã°ãªããªããªã£ãã¨ãã«ãéæ¹ã«æ®ãã¦ãã¾ããã¨ããããä¸ç´è
ã«ã¨ã£ã¦ã¯é«åº¦ã«æ½è±¡åãããã³ã³ãã¯ããªããã°ã©ã ã®æ¹ãã¯ããã«ç解ããããããä¿å®ãããããããæªçãªã¨ã³ã¸ãã¢ã«ã¨ã£ã¦ã¯å¿
ãããããã§ã¯ãªãããã¡ãããåã«ããã ããçç±ã§å
±éã«ã¼ãã³åããªãã®ã¯ã°ããã¦ããããããã¸ã§ã¯ãã®é·æçã©ã¤ããµã¤ã¯ã«ã社å
ã®ä½å¶ã¾ã§å«ããå
¨ä½ã®ãã¬ã¼ããªããã©ã³ã¹ãèããã¨ãã«ãèæ
®ãã¹ããã¡ã¯ã¿ã¼ã®ä¸ã¤ã§ã¯ããã
ãããã°ã©ãã³ã°è¨èªã極ããã®ã大åãã¨å¦ä¿¡ãã*2
ããã°ã©ãã³ã°è¨èªã®ã¹ãã«ã¨ããã®ã¯ã価å¤ããã¹ãã«ã®ãã¡ã®ä¸ã¤ã«ãããªãã©ããããããã»ã©åªå
é ä½ã®é«ãã¹ãã«ã§ã¯ãªããå®éã«ã¯ããµã¼ãè¨å®ããããã¯ã¼ã¯ããã¼ã¿ãã¼ã¹ãããã©ã¼ãã³ã¹è¨è¨ãã»ãã¥ãªãã£è¨è¨ã«é¢ããã¹ãã«ã¯ãããã°ã©ãã³ã°è¨èªã®ç¥èã«è² ããå£ããéè¦ã ãããã°ã©ãã³ã°è¨èªã極ãããã¨ã«ãã ããããããã¾ãããããã·ã¹ãã éçºå
¨ä½ã®ã¹ãã«ã®ãã©ã³ã¹ãæ¬ ãã¨ãç¬ããããã§è¦éççªçãªã·ã¹ãã è¨è¨ã«é¥ããã¡ã ã
ããã«ãè¦æ±ä»æ§ãå®è£
ä»æ§ã«è½ã¨ãè¾¼ãã¹ãã«ããããã¯ãå®è£
ã®é½åã¨é¡§å®¢ã®é½åãæ大éã«æºãããããªè½ã¨ãã©ãããæ´å¯ããã¹ãã«ãªã©ãããåªããç¾ããã¢ã¼ããã¯ãã£è¨è¨ãããã®ã«ãåãªãããã°ã©ãã³ã°è¨èªã®ã¹ãã«ãããã¯ããã«éè¦ãªã¹ãã«ã¯ããããããã
çµå±ã®ã¨ãããã»ã¨ãã©ã®ã³ã³ãã¥ã¼ã¿ããã°ã©ã ã¯ã人éã社ä¼ã®ãã¼ãºã欲æãæºããããã«åå¨ãã人éã社ä¼ã®å©å®³ãææ
ã®æ§é ã®çµã¿ç«ã¦ï¼ãããä¸ç¨®ã®ããã°ã©ãã³ã°ã )ã¨ç¡ç¸ã§ã¯ããããªãã人éã社ä¼ã®å©å®³ã¨ææ
ã®çµã¿ç«ã¦ã¾ã§è¦éã«å
¥ããã¢ã¼ããã¯ãã£å
¨ä½ãããã£ã¨ãã·ã³ãã«ã«è¨è¨ããæ¹æ³ãçªãè©°ãããã¨ã§ãã»ã¨ãã©ããã°ã©ã ãæ¸ããã«æ ¹æ¬çãªåé¡ã解決ããæ¹æ³ãè¦ãã ãã顧客ãä¼ç¤¾ãååãèªåããé¢ä¿è
å
¨å¡ã幸ãã«ãªãã¨ãããããªã±ã¼ã¹ãå¤ãã®ã§ããã
*1:å¤æ°ã®ã¹ã³ã¼ãã®è°è«ãããã®ã¨ãã¡ã½ããåã®ã¹ã³ã¼ããè°è«ããã®ã¨ãã¯ã©ã¹åã®ã¹ã³ã¼ãã®è°è«ãããã®ã§ããã¡ãããå¥ã ã«è°è«ããªããã°ãªããªãé¨åãããããå ±éé¨åã®è°è«ããããããã§ã¯ããã®å ±éé¨åã®è°è«ããã¦ãã
*2:ããã¯ããã°ã©ãã³ã°ãã¯ããã¯ã§ã¯ãªãã®ã ããã©