ã¿ãªãããããã«ã¡ã¯ãéçºæ¬éšãšã³ãžãã¢ã®å¹³æšã§ãããã¡ãã®ããã°ã®æçš¿èªäœã¯ã»ãŒ 1 幎ã¶ãã«ãªããããªå¢ãã§ãããã¿ãªããŸãå
æ°ã§ãããã? åŒç€Ÿã§å®æçã«éå¬ããŠã瀟å
ååŒ·äŒ TechLunch ã§èªåã®é çªãåã£ãŠãããããã©ãããããè¿·ã£ãæ«ã« JavaScript AST ããšã¯ãã ãšããçºè¡šãããã®ã§ããã®ããšã«ã€ããŠæžããŠãããŸãã ãªã JavaScript AST ã«ã€ããŠè©±ãããšæã£ãã®ã çŸåšãåŒç€Ÿã®ãšã³ãžãã¢ã¡ã³ããŒã®ããã¯ã°ã©ãŠã³ãã§äžçªå€æ°æŽŸãªã®ã¯ãå
ãµãŒããµã€ããšã³ãžãã¢ãã§ãããã¡ãããæ¥åã§ã¯ãµãŒããµã€ãã»ããã³ããšã³ãã»ãã€ãã£ãã¢ããªãšããã¯ã°ã©ãŠã³ãã«é¢ããããå¿
èŠã«å¿ããŠåãéãŠãªãéçºããŠããŸãã ãšã¯ãããã¡ãããšãµãŒãã¹éçºèªäœã¯ã§ãããšããŠãããã¯ãåŸæãªåé以å€ã§åºæ¬åçãªã©å«ããŠææ¡ããŠéçºã§ããããšãããšãã¡ãã£ãšé£ãããšããããããŸãããããããããã£ãåºæ¬åçãªãããç¥ã£ãŠãããšããã®èšèªãããŒã«ãªã©ã®çè§£ãæãã®ã¯ç¢ºãã§ãããã ãããªäžãåŒç€Ÿã§éçºããŠãã人éãã»ãŒå
šãŠæ©æµãåããŠããã¯ããªã®ã«ãå
·äœçã«ã©ããªé¢šã«åããŠããã®ããäžçªåããã«ããã§ããã Babel ã²ããŠã¯ JavaScript AST ã®è©±ããããããŸãè峿ã£ãŠè©±ãèããŠãããããªãŒãšããããšã§ã§ãã®ããŒããéžãã æ¬¡ç¬¬ã§ãã ã©ã®ããã«äŒããã èªå㯠JavaScript AST ã«ã€ããŠãšãŠã詳ããããã§ã¯ãªãã®ã§ããã以åä»äºã§ acorn ã䜿ã£ãŠã³ã³ããŒã¿ã¿ãããªã®ãäœã£ããããŠããã®ã§ããããªãã«èå³ã¯æã£ãŠãããšãã人éã§ãã ã§ãã®ã§ãã©ããã£ãŠç޹ä»ããããããšæ©ãã çµæãã»ãŒå
šé¢çã« AST Explore ã«é Œã£ãŠãããšããã¹ã¿ã€ã«ã«ããŸãããAST Explore ã¯æ¬åœã«æé«ã§ãããåè¿°ã®ä»äºãããŠãããšãã¯ãããªäŸ¿å©ãªããŒã«ã¯ãªãã£ããã§ãã²ããã AST ã«å€æããã³ãŒãæžããŠã¯åºæ¥ã AST ãèŠãŠãããããã©ã³ã¹ãã©ãŒã ãããŠçµæãšçšãã£ãããŠè©Šè¡é¯èª€ãããšããæ¯æ¥ã§ããã ãšããããšã§ãåœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã«ãªããŸãã ã¹ã©ã€ãã§ç޹ä»ãããã¢ã¯ãããããã¡ãã«ãªããŸãã https://astexplorer.net/#/gist/82742676286b2dced595ce36cdeb8aae/latest https://astexplorer.net/#/gist/52d871c2f3a8d9cefc68d17badf4f165/latest ä»åäŒãããã£ãããš ãŸããAST ã JavaScript ã®çºå±ã«ãšãŠãå¯äžããŠãããã®ã ãšããããšãç¥ã£ãŠãããããã£ããããJavaScript AST ã®ä»ãŸã§ã®ç°¡åãªæµãããçŸåšã©ã®ãããªåœ¢ã§äœ¿ãããŠããã®ãã®èª¬æãããŸããã(å人çã« Node.js ã®èªçãš JavaScript AST ã®ååšãçŸåšã®ããã³ããšã³ãã®çºå±ã«ãšãŠãéèŠã ãšæã£ãŠããã®ã§) æåã®ãã¡ã¯èããŠã人ããäœã®è©±ãªãã ãâŠãæããããŸãããããã¯ãå®éã«èªåã䜿ã£ãŠããããŒã«ãªã©ã«äœ¿ãããŠãããšãã説æãããããšã ãšãèããŠããã¡ã³ããŒãä¿ç¶èå³ãåºãŠãããšããé°å²æ°ã«ãªã£ãæ°ãããŸã(åœç€Ÿæ¯)ã AST ã®ææ³ãªã©ã¯èªåã説æããããã¯ãã¡ãããšè³æãæã£ãŠããã®ã§å¿
èŠãªéšå以å€ç°¡ç¥åããŸãããéã«ã¡ãã£ãšç«¯æãããããããããããŸãããèå³ãæã£ããšãã«äœãšãªãã§ã調ã¹ãéæšãããã«ã¯ãªãããªãšèããŠããŸãã æ¬¡ã«ç¥ã£ãŠãããããã£ãã®ã¯ãããããšæãã° Babel ã®ãã©ã°ã€ã³ãªããã AST ã§äœãã¡ãããŸãããšããããšã§ãããä»®ã«ãããªããBabel ãã©ã°ã€ã³äœããŸãããããšãªã£ããšããŠãæ£çŽããŸããã³ãšæ¥ãªããšæããŸãããã©ãããåçã§ãããã¯ããåããŠããã®ã?ãåãããšã babel-handbook ãªã©ãèªãã§ãçè§£ãé²ãã®ã§ã¯ãªãããšæããŸãã AST Explore ã®ããš ãã®ããã«ä»åã®çºè¡šã§å
šé¢çã«æŽ»èºãã AST Explore ã§ãããTechLunch äžã§ã軜ã説æã ãã§äœ¿ã£ãŠããŸã£ãã®ã§ã䜿ããããªã©ç°¡åã«ã玹ä»ããŠãããŸãã AST Explore ãšã¯ AST Explore 㯠Felix Kling ãããã2014 幎é ããéçºããŠãããããã¯ãã§ãã äœè«ã§ãããFelix ããã¯çŸåš Facebook ã§åããŠããã£ãããããã§ã facebook/jscodeshift ã reactjs/react-docgen ãªããã®éçºã«ãæºãã£ãŠããã£ãããæš¡æ§ã(react-docgen 㯠babylon ã䜿ã£ãŠããããã§ãã) ãããŸã§æžããŠããéãã«ããã®ããŒã«ã¯è²ã
ãªèšèªãã³ããããã ãã§ AST ãããªãŒåœ¢åŒã§åããããã衚瀺ãããããã©ã³ã¹ãã©ãŒã ãããããšãã§ããããããšãã AST ãè§Šãã«ã¯å€§å€äŸ¿å©ãªããŒã«ã§ããå»å¹Žã® v2.0 ã®ã¢ããããŒãã«ãããã»ãŒããããš gist ãå¿åã§äœã£ãŠãããŠãªã³ã¯ãçæããããªã©ã®äŸ¿å©æ©èœãä»ããŸããã ãããžã§ã¯ãã® README ã«æžããŠããŸãããããŒãµã ãã§ããã°ãããªãããŒã¹ã§ãããã®ãå€ãããŸã JavaScript / CSS / æ£èŠè¡šçŸ / Handlebars ã«é¢ããŠã¯ãã©ã³ã¹ãã©ãŒã ãŸã§ã§ããããã«ãªã£ãŠããŸãã README ããæç²ãããšä»¥äžã®ãããªæãã§ãã AST Explore ã§ããŒã¹ã§ãããã® CSS: cssom csstree postcss + postcss-safe-parser & postcss-scss rework GraphQL Graphviz: redot Handlebars: glimmer handlebars HTML: htmlparser2 parse5 ICU JavaScript: acorn + acorn-jsx babel-eslint babylon espree esformatter esprima flow-parser recast shift traceur typescript typescript-eslint-parser uglify-js JSON Lua: luaparse Markdown: remark PHP php-parser Regular Expressions: regexp-tree Scala Scalameta SQL: sqlite-parser WebIDL YAML å®éšçã ã£ãããããã©ããŒã¹ã§ãããã® ES6: arrow functions, destructuring, classes, ⊠ES7 proposals: async/await, object rest / spread, ⊠JSX Typed JavaScript Flow and TypeScript SASS ããŒã¹ãããã®ããã©ã³ã¹ãã©ãŒã ã§ãããã® JavaScript babel (v5, v6) ESLint (v1, v2, v3) jscodeshift tslint CSS postcss Regular Expressions regexp-tree Handlebars glimmer AST Explore ã®äœ¿ãæ¹ã®ç°¡åãªè§£èª¬ ãµã€ãã«ã¢ã¯ã»ã¹ãããšãã®ãããªç»é¢ã«ãªã£ãŠããã¯ãã§ãã ã¡ã€ã³ç»é¢ JavaScript ã«ãã©ãŒã«ã¹ããŠè§£èª¬ããŠãããŸããšãå·Šãã€ã³ã AST ã«å€æããããœãŒã¹ã³ãŒããå³ãã€ã³ã倿åŸã® AST ãããªãŒæ§é ã§èŠããŠããŸãã åæè¡šç€ºæã«ãå·Šãã€ã³ã®ãœãŒã¹ã³ãŒããã¯ãªãã¯ãããšè©²åœç®æã® AST ããªãŒãå±éããŠãã€ã©ã€ãããŸãããŸãå³ãã€ã³ããã€ã³ããããšãœãŒã¹ã³ãŒãã®è©²åœç®æããã€ã©ã€ãããŸãããäºãã®é¢ä¿ãåããããã仿§ã«ãªã£ãŠããŸãã æ¬æ¥ JavaScript AST ã§çæããããã®ã¯ JSON ãªããžã§ã¯ãã«ãªããŸãããå³ãã€ã³ã®äžã® Tree ãš JSON ã®ã¿ããåããããããšã«ãã£ãŠ AST ã®è¡šç€ºã倿Žããããšãã§ããŸãã ããããŒéšå ããããŒã«è²ã
ãªæ©èœããŸãšãŸã£ãŠããŸãã åæè¡šç€ºã§ã¯ä»¥äžã®ããã«ãªã£ãŠããã¯ãã§ãã Snippet ä¿ã«ãããã¡ã€ã«ã¡ãã¥ãŒã æ°èŠäœæã»(gist ãžã®)ã»ãŒãã»(gist ã®)ãã©ãŒã¯ã»ã·ã§ã¢ããã JavaScript ããŒã¹ããèšèªéžæ ããã§ AST ã«ãããèšèªãåãæ¿ãã éžãã èšèªã«ãã£ãŠ Transform ã䜿ããªããªã acorn ããŒãµéžæ åèšèªã®ããŒãµãåãæ¿ãã Transform ãã©ã³ã¹ãã©ãŒãéžæ éžæããèšèªã«ãã©ã³ã¹ãã©ãŒããããã°éžæã§ããããã«ãªã ãã¡ããéžæãããš 2 ãã€ã³ã ã£ãã®ã 4 ãã€ã³ã«ãªã(åŸè¿°) default ãœãŒã¹ã³ãŒããªã©ãæžããšãã®ããŒãã€ã³ãéžæ default / Vim / Emacs / Sublime ã® 4 çš®é¡ããã ãããã¿ããããŸã ? ãã«ã GitHub ã® README ã«é£ã°ãããã ãã§ã⊠JavaScript ã®ãã©ã³ã¹ãã©ãŒã å
çšèª¬æãããã©ã³ã¹ãã©ãŒã ãéžã¶ãšãã¡ã€ã³ã®ç»é¢ã 4 ç»é¢ã«ãªããŸãã ä»ãŸã§ã® ãœãŒã¹ã³ãŒã ãš AST ããªãŒ ã¯å€ãããŸããããäžã« 2 ã€ãã€ã³ã远å ãããŸãã å·Šäžããã©ã³ã¹ãã©ãŒãã³ãŒããå³äžããã©ã³ã¹ãã©ãŒã ããåŸã®ãœãŒã¹ã³ãŒããšãªã£ãŠããŸãã å·Šäžã®ãã©ã³ã¹ãã©ãŒããè²ã
è§Šã£ãŠãããšå·Šäžã®ãœãŒã¹ã³ãŒãã倿ãããŠãå³äžã«è¡šç€ºããããšããæµãã§ããã ä»¥äž JavaScript ã³ãŒãã®ãã©ã³ã¹ãã©ãŒã ããéã® Tips ã§ã jscodeshift ãéžæãããš Ctrl + Space ã§ jscodeshift ã®è£å®ãå¹ãããã«ãªããŸã babel-plugin-macro ãéžã¶ãšãã©ã³ã¹ãã©ãŒãã®ã³ãŒãèªäœããã®ãŸãŸ babel-plugin ãšããŠäœ¿ããããã«ãªãã®ã§ããã©ã°ã€ã³äœããšãã«æãã¯ãã§ã ãŸãšã åŸã§åå ã¡ã³ããŒã«èããŠã¿ãŸããããäŒãããã£ãããšã¯ãã¡ãããšäŒãã£ãŠããæ§åã ã£ãã®ã§å®å¿ããŸãããæåŸã® Vue.js ã® v1 ãã v2 ã®ãã€ã°ã¬ãŒã·ã§ã³ã®ãã¢ã¯ç޹ä»ããçµæãJavaScript AST 䟿å©ãããšããæè§Šã«ãªã£ããšæããŸãã çŸåšåŒç€Ÿã®ãããã¯ãã§ãJavaScript AST ãã¬ãããªãšäœ¿ããããªãããžã§ã¯ãã¯ãªãã®ã§ãããBabel ãªã©ã¯å
šãããã¯ãã§äœ¿çšããŠãããçµæ§ãã©ã°ã€ã³ãå€çšããŠãããšãããããã®ã§ããããšãããšãã®åºç€ç¥èãšããŠèŠããŠãããŠæã¯ãªãã¯ãã§ãã ãããã£ãéšåã®ååŒ·ãæ¬ ãããç¶ããŠãããããšæ¹ããŠæãæ©äŒã«ããªããŸããã åŒç€Ÿã®éçºæåãªã©æ°ã«ãªãæ¹ã¯ããã¡ãããã©ããã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ã¿ãªãããããã«ã¡ã¯ãéçºæ¬éšãšã³ãžãã¢ã®å¹³æšã§ãããã¡ãã®ããã°ã®æçš¿èªäœã¯ã»ãŒ 1 幎ã¶ãã«ãªããããªå¢ãã§ãããã¿ãªããŸãå
æ°ã§ãããã? åŒç€Ÿã§å®æçã«éå¬ããŠã瀟å
ååŒ·äŒ TechLunch ã§èªåã®é çªãåã£ãŠãããããã©ãããããè¿·ã£ãæ«ã« JavaScript AST ããšã¯ãã ãšããçºè¡šãããã®ã§ããã®ããšã«ã€ããŠæžããŠãããŸãã ãªã JavaScript AST ã«ã€ããŠè©±ãããšæã£ãã®ã çŸåšãåŒç€Ÿã®ãšã³ãžãã¢ã¡ã³ããŒã®ããã¯ã°ã©ãŠã³ãã§äžçªå€æ°æŽŸãªã®ã¯ãå
ãµãŒããµã€ããšã³ãžãã¢ãã§ãããã¡ãããæ¥åã§ã¯ãµãŒããµã€ãã»ããã³ããšã³ãã»ãã€ãã£ãã¢ããªãšããã¯ã°ã©ãŠã³ãã«é¢ããããå¿
èŠã«å¿ããŠåãéãŠãªãéçºããŠããŸãã ãšã¯ãããã¡ãããšãµãŒãã¹éçºèªäœã¯ã§ãããšããŠãããã¯ãåŸæãªåé以å€ã§åºæ¬åçãªã©å«ããŠææ¡ããŠéçºã§ããããšãããšãã¡ãã£ãšé£ãããšããããããŸãããããããããã£ãåºæ¬åçãªãããç¥ã£ãŠãããšããã®èšèªãããŒã«ãªã©ã®çè§£ãæãã®ã¯ç¢ºãã§ãããã ãããªäžãåŒç€Ÿã§éçºããŠãã人éãã»ãŒå
šãŠæ©æµãåããŠããã¯ããªã®ã«ãå
·äœçã«ã©ããªé¢šã«åããŠããã®ããäžçªåããã«ããã§ããã Babel ã²ããŠã¯ JavaScript AST ã®è©±ããããããŸãè峿ã£ãŠè©±ãèããŠãããããªãŒãšããããšã§ã§ãã®ããŒããéžãã æ¬¡ç¬¬ã§ãã ã©ã®ããã«äŒããã èªå㯠JavaScript AST ã«ã€ããŠãšãŠã詳ããããã§ã¯ãªãã®ã§ããã以åä»äºã§ acorn ã䜿ã£ãŠã³ã³ããŒã¿ã¿ãããªã®ãäœã£ããããŠããã®ã§ããããªãã«èå³ã¯æã£ãŠãããšãã人éã§ãã ã§ãã®ã§ãã©ããã£ãŠç޹ä»ããããããšæ©ãã çµæãã»ãŒå
šé¢çã« AST Explore ã«é Œã£ãŠãããšããã¹ã¿ã€ã«ã«ããŸãããAST Explore ã¯æ¬åœã«æé«ã§ãããåè¿°ã®ä»äºãããŠãããšãã¯ãããªäŸ¿å©ãªããŒã«ã¯ãªãã£ããã§ãã²ããã AST ã«å€æããã³ãŒãæžããŠã¯åºæ¥ã AST ãèŠãŠãããããã©ã³ã¹ãã©ãŒã ãããŠçµæãšçšãã£ãããŠè©Šè¡é¯èª€ãããšããæ¯æ¥ã§ããã ãšããããšã§ãåœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã«ãªããŸãã ã¹ã©ã€ãã§ç޹ä»ãããã¢ã¯ãããããã¡ãã«ãªããŸãã https://astexplorer.net/#/gist/82742676286b2dced595ce36cdeb8aae/latest https://astexplorer.net/#/gist/52d871c2f3a8d9cefc68d17badf4f165/latest ä»åäŒãããã£ãããš ãŸããAST ã JavaScript ã®çºå±ã«ãšãŠãå¯äžããŠãããã®ã ãšããããšãç¥ã£ãŠãããããã£ããããJavaScript AST ã®ä»ãŸã§ã®ç°¡åãªæµãããçŸåšã©ã®ãããªåœ¢ã§äœ¿ãããŠããã®ãã®èª¬æãããŸããã(å人çã« Node.js ã®èªçãš JavaScript AST ã®ååšãçŸåšã®ããã³ããšã³ãã®çºå±ã«ãšãŠãéèŠã ãšæã£ãŠããã®ã§) æåã®ãã¡ã¯èããŠã人ããäœã®è©±ãªãã ãâŠãæããããŸãããããã¯ãå®éã«èªåã䜿ã£ãŠããããŒã«ãªã©ã«äœ¿ãããŠãããšãã説æãããããšã ãšãèããŠããã¡ã³ããŒãä¿ç¶èå³ãåºãŠãããšããé°å²æ°ã«ãªã£ãæ°ãããŸã(åœç€Ÿæ¯)ã AST ã®ææ³ãªã©ã¯èªåã説æããããã¯ãã¡ãããšè³æãæã£ãŠããã®ã§å¿
èŠãªéšå以å€ç°¡ç¥åããŸãããéã«ã¡ãã£ãšç«¯æãããããããããããŸãããèå³ãæã£ããšãã«äœãšãªãã§ã調ã¹ãéæšãããã«ã¯ãªãããªãšèããŠããŸãã æ¬¡ã«ç¥ã£ãŠãããããã£ãã®ã¯ãããããšæãã° Babel ã®ãã©ã°ã€ã³ãªããã AST ã§äœãã¡ãããŸãããšããããšã§ãããä»®ã«ãããªããBabel ãã©ã°ã€ã³äœããŸãããããšãªã£ããšããŠãæ£çŽããŸããã³ãšæ¥ãªããšæããŸãããã©ãããåçã§ãããã¯ããåããŠããã®ã?ãåãããšã babel-handbook ãªã©ãèªãã§ãçè§£ãé²ãã®ã§ã¯ãªãããšæããŸãã AST Explore ã®ããš ãã®ããã«ä»åã®çºè¡šã§å
šé¢çã«æŽ»èºãã AST Explore ã§ãããTechLunch äžã§ã軜ã説æã ãã§äœ¿ã£ãŠããŸã£ãã®ã§ã䜿ããããªã©ç°¡åã«ã玹ä»ããŠãããŸãã AST Explore ãšã¯ AST Explore 㯠Felix Kling ãããã2014 幎é ããéçºããŠãããããã¯ãã§ãã äœè«ã§ãããFelix ããã¯çŸåš Facebook ã§åããŠããã£ãããããã§ã facebook/jscodeshift ã reactjs/react-docgen ãªããã®éçºã«ãæºãã£ãŠããã£ãããæš¡æ§ã(react-docgen 㯠babylon ã䜿ã£ãŠããããã§ãã) ãããŸã§æžããŠããéãã«ããã®ããŒã«ã¯è²ã
ãªèšèªãã³ããããã ãã§ AST ãããªãŒåœ¢åŒã§åããããã衚瀺ãããããã©ã³ã¹ãã©ãŒã ãããããšãã§ããããããšãã AST ãè§Šãã«ã¯å€§å€äŸ¿å©ãªããŒã«ã§ããå»å¹Žã® v2.0 ã®ã¢ããããŒãã«ãããã»ãŒããããš gist ãå¿åã§äœã£ãŠãããŠãªã³ã¯ãçæããããªã©ã®äŸ¿å©æ©èœãä»ããŸããã ãããžã§ã¯ãã® README ã«æžããŠããŸãããããŒãµã ãã§ããã°ãããªãããŒã¹ã§ãããã®ãå€ãããŸã JavaScript / CSS / æ£èŠè¡šçŸ / Handlebars ã«é¢ããŠã¯ãã©ã³ã¹ãã©ãŒã ãŸã§ã§ããããã«ãªã£ãŠããŸãã README ããæç²ãããšä»¥äžã®ãããªæãã§ãã AST Explore ã§ããŒã¹ã§ãããã® CSS: cssom csstree postcss + postcss-safe-parser & postcss-scss rework GraphQL Graphviz: redot Handlebars: glimmer handlebars HTML: htmlparser2 parse5 ICU JavaScript: acorn + acorn-jsx babel-eslint babylon espree esformatter esprima flow-parser recast shift traceur typescript typescript-eslint-parser uglify-js JSON Lua: luaparse Markdown: remark PHP php-parser Regular Expressions: regexp-tree Scala Scalameta SQL: sqlite-parser WebIDL YAML å®éšçã ã£ãããããã©ããŒã¹ã§ãããã® ES6: arrow functions, destructuring, classes, ⊠ES7 proposals: async/await, object rest / spread, ⊠JSX Typed JavaScript Flow and TypeScript SASS ããŒã¹ãããã®ããã©ã³ã¹ãã©ãŒã ã§ãããã® JavaScript babel (v5, v6) ESLint (v1, v2, v3) jscodeshift tslint CSS postcss Regular Expressions regexp-tree Handlebars glimmer AST Explore ã®äœ¿ãæ¹ã®ç°¡åãªè§£èª¬ ãµã€ãã«ã¢ã¯ã»ã¹ãããšãã®ãããªç»é¢ã«ãªã£ãŠããã¯ãã§ãã ã¡ã€ã³ç»é¢ JavaScript ã«ãã©ãŒã«ã¹ããŠè§£èª¬ããŠãããŸããšãå·Šãã€ã³ã AST ã«å€æããããœãŒã¹ã³ãŒããå³ãã€ã³ã倿åŸã® AST ãããªãŒæ§é ã§èŠããŠããŸãã åæè¡šç€ºæã«ãå·Šãã€ã³ã®ãœãŒã¹ã³ãŒããã¯ãªãã¯ãããšè©²åœç®æã® AST ããªãŒãå±éããŠãã€ã©ã€ãããŸãããŸãå³ãã€ã³ããã€ã³ããããšãœãŒã¹ã³ãŒãã®è©²åœç®æããã€ã©ã€ãããŸãããäºãã®é¢ä¿ãåããããã仿§ã«ãªã£ãŠããŸãã æ¬æ¥ JavaScript AST ã§çæããããã®ã¯ JSON ãªããžã§ã¯ãã«ãªããŸãããå³ãã€ã³ã®äžã® Tree ãš JSON ã®ã¿ããåããããããšã«ãã£ãŠ AST ã®è¡šç€ºã倿Žããããšãã§ããŸãã ããããŒéšå ããããŒã«è²ã
ãªæ©èœããŸãšãŸã£ãŠããŸãã åæè¡šç€ºã§ã¯ä»¥äžã®ããã«ãªã£ãŠããã¯ãã§ãã Snippet ä¿ã«ãããã¡ã€ã«ã¡ãã¥ãŒã æ°èŠäœæã»(gist ãžã®)ã»ãŒãã»(gist ã®)ãã©ãŒã¯ã»ã·ã§ã¢ããã JavaScript ããŒã¹ããèšèªéžæ ããã§ AST ã«ãããèšèªãåãæ¿ãã éžãã èšèªã«ãã£ãŠ Transform ã䜿ããªããªã acorn ããŒãµéžæ åèšèªã®ããŒãµãåãæ¿ãã Transform ãã©ã³ã¹ãã©ãŒãéžæ éžæããèšèªã«ãã©ã³ã¹ãã©ãŒããããã°éžæã§ããããã«ãªã ãã¡ããéžæãããš 2 ãã€ã³ã ã£ãã®ã 4 ãã€ã³ã«ãªã(åŸè¿°) default ãœãŒã¹ã³ãŒããªã©ãæžããšãã®ããŒãã€ã³ãéžæ default / Vim / Emacs / Sublime ã® 4 çš®é¡ããã ãããã¿ããããŸã ? ãã«ã GitHub ã® README ã«é£ã°ãããã ãã§ã⊠JavaScript ã®ãã©ã³ã¹ãã©ãŒã å
çšèª¬æãããã©ã³ã¹ãã©ãŒã ãéžã¶ãšãã¡ã€ã³ã®ç»é¢ã 4 ç»é¢ã«ãªããŸãã ä»ãŸã§ã® ãœãŒã¹ã³ãŒã ãš AST ããªãŒ ã¯å€ãããŸããããäžã« 2 ã€ãã€ã³ã远å ãããŸãã å·Šäžããã©ã³ã¹ãã©ãŒãã³ãŒããå³äžããã©ã³ã¹ãã©ãŒã ããåŸã®ãœãŒã¹ã³ãŒããšãªã£ãŠããŸãã å·Šäžã®ãã©ã³ã¹ãã©ãŒããè²ã
è§Šã£ãŠãããšå·Šäžã®ãœãŒã¹ã³ãŒãã倿ãããŠãå³äžã«è¡šç€ºããããšããæµãã§ããã ä»¥äž JavaScript ã³ãŒãã®ãã©ã³ã¹ãã©ãŒã ããéã® Tips ã§ã jscodeshift ãéžæãããš Ctrl + Space ã§ jscodeshift ã®è£å®ãå¹ãããã«ãªããŸã babel-plugin-macro ãéžã¶ãšãã©ã³ã¹ãã©ãŒãã®ã³ãŒãèªäœããã®ãŸãŸ babel-plugin ãšããŠäœ¿ããããã«ãªãã®ã§ããã©ã°ã€ã³äœããšãã«æãã¯ãã§ã ãŸãšã åŸã§åå ã¡ã³ããŒã«èããŠã¿ãŸããããäŒãããã£ãããšã¯ãã¡ãããšäŒãã£ãŠããæ§åã ã£ãã®ã§å®å¿ããŸãããæåŸã® Vue.js ã® v1 ãã v2 ã®ãã€ã°ã¬ãŒã·ã§ã³ã®ãã¢ã¯ç޹ä»ããçµæãJavaScript AST 䟿å©ãããšããæè§Šã«ãªã£ããšæããŸãã çŸåšåŒç€Ÿã®ãããã¯ãã§ãJavaScript AST ãã¬ãããªãšäœ¿ããããªãããžã§ã¯ãã¯ãªãã®ã§ãããBabel ãªã©ã¯å
šãããã¯ãã§äœ¿çšããŠãããçµæ§ãã©ã°ã€ã³ãå€çšããŠãããšãããããã®ã§ããããšãããšãã®åºç€ç¥èãšããŠèŠããŠãããŠæã¯ãªãã¯ãã§ãã ãããã£ãéšåã®ååŒ·ãæ¬ ãããç¶ããŠãããããšæ¹ããŠæãæ©äŒã«ããªããŸããã åŒç€Ÿã®éçºæåãªã©æ°ã«ãªãæ¹ã¯ããã¡ãããã©ããã https://www.medley.jp/recruit/creative.html
ã¿ãªãããããã«ã¡ã¯ãéçºæ¬éšãšã³ãžãã¢ã®å¹³æšã§ãããã¡ãã®ããã°ã®æçš¿èªäœã¯ã»ãŒ 1 幎ã¶ãã«ãªããããªå¢ãã§ãããã¿ãªããŸãå
æ°ã§ãããã? åŒç€Ÿã§å®æçã«éå¬ããŠã瀟å
ååŒ·äŒ TechLunch ã§èªåã®é çªãåã£ãŠãããããã©ãããããè¿·ã£ãæ«ã« JavaScript AST ããšã¯ãã ãšããçºè¡šãããã®ã§ããã®ããšã«ã€ããŠæžããŠãããŸãã ãªã JavaScript AST ã«ã€ããŠè©±ãããšæã£ãã®ã çŸåšãåŒç€Ÿã®ãšã³ãžãã¢ã¡ã³ããŒã®ããã¯ã°ã©ãŠã³ãã§äžçªå€æ°æŽŸãªã®ã¯ãå
ãµãŒããµã€ããšã³ãžãã¢ãã§ãããã¡ãããæ¥åã§ã¯ãµãŒããµã€ãã»ããã³ããšã³ãã»ãã€ãã£ãã¢ããªãšããã¯ã°ã©ãŠã³ãã«é¢ããããå¿
èŠã«å¿ããŠåãéãŠãªãéçºããŠããŸãã ãšã¯ãããã¡ãããšãµãŒãã¹éçºèªäœã¯ã§ãããšããŠãããã¯ãåŸæãªåé以å€ã§åºæ¬åçãªã©å«ããŠææ¡ããŠéçºã§ããããšãããšãã¡ãã£ãšé£ãããšããããããŸãããããããããã£ãåºæ¬åçãªãããç¥ã£ãŠãããšããã®èšèªãããŒã«ãªã©ã®çè§£ãæãã®ã¯ç¢ºãã§ãããã ãããªäžãåŒç€Ÿã§éçºããŠãã人éãã»ãŒå
šãŠæ©æµãåããŠããã¯ããªã®ã«ãå
·äœçã«ã©ããªé¢šã«åããŠããã®ããäžçªåããã«ããã§ããã Babel ã²ããŠã¯ JavaScript AST ã®è©±ããããããŸãè峿ã£ãŠè©±ãèããŠãããããªãŒãšããããšã§ã§ãã®ããŒããéžãã æ¬¡ç¬¬ã§ãã ã©ã®ããã«äŒããã èªå㯠JavaScript AST ã«ã€ããŠãšãŠã詳ããããã§ã¯ãªãã®ã§ããã以åä»äºã§ acorn ã䜿ã£ãŠã³ã³ããŒã¿ã¿ãããªã®ãäœã£ããããŠããã®ã§ããããªãã«èå³ã¯æã£ãŠãããšãã人éã§ãã ã§ãã®ã§ãã©ããã£ãŠç޹ä»ããããããšæ©ãã çµæãã»ãŒå
šé¢çã« AST Explore ã«é Œã£ãŠãããšããã¹ã¿ã€ã«ã«ããŸãããAST Explore ã¯æ¬åœã«æé«ã§ãããåè¿°ã®ä»äºãããŠãããšãã¯ãããªäŸ¿å©ãªããŒã«ã¯ãªãã£ããã§ãã²ããã AST ã«å€æããã³ãŒãæžããŠã¯åºæ¥ã AST ãèŠãŠãããããã©ã³ã¹ãã©ãŒã ãããŠçµæãšçšãã£ãããŠè©Šè¡é¯èª€ãããšããæ¯æ¥ã§ããã ãšããããšã§ãåœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã«ãªããŸãã ã¹ã©ã€ãã§ç޹ä»ãããã¢ã¯ãããããã¡ãã«ãªããŸãã https://astexplorer.net/#/gist/82742676286b2dced595ce36cdeb8aae/latest https://astexplorer.net/#/gist/52d871c2f3a8d9cefc68d17badf4f165/latest ä»åäŒãããã£ãããš ãŸããAST ã JavaScript ã®çºå±ã«ãšãŠãå¯äžããŠãããã®ã ãšããããšãç¥ã£ãŠãããããã£ããããJavaScript AST ã®ä»ãŸã§ã®ç°¡åãªæµãããçŸåšã©ã®ãããªåœ¢ã§äœ¿ãããŠããã®ãã®èª¬æãããŸããã(å人çã« Node.js ã®èªçãš JavaScript AST ã®ååšãçŸåšã®ããã³ããšã³ãã®çºå±ã«ãšãŠãéèŠã ãšæã£ãŠããã®ã§) æåã®ãã¡ã¯èããŠã人ããäœã®è©±ãªãã ãâŠãæããããŸãããããã¯ãå®éã«èªåã䜿ã£ãŠããããŒã«ãªã©ã«äœ¿ãããŠãããšãã説æãããããšã ãšãèããŠããã¡ã³ããŒãä¿ç¶èå³ãåºãŠãããšããé°å²æ°ã«ãªã£ãæ°ãããŸã(åœç€Ÿæ¯)ã AST ã®ææ³ãªã©ã¯èªåã説æããããã¯ãã¡ãããšè³æãæã£ãŠããã®ã§å¿
èŠãªéšå以å€ç°¡ç¥åããŸãããéã«ã¡ãã£ãšç«¯æãããããããããããŸãããèå³ãæã£ããšãã«äœãšãªãã§ã調ã¹ãéæšãããã«ã¯ãªãããªãšèããŠããŸãã æ¬¡ã«ç¥ã£ãŠãããããã£ãã®ã¯ãããããšæãã° Babel ã®ãã©ã°ã€ã³ãªããã AST ã§äœãã¡ãããŸãããšããããšã§ãããä»®ã«ãããªããBabel ãã©ã°ã€ã³äœããŸãããããšãªã£ããšããŠãæ£çŽããŸããã³ãšæ¥ãªããšæããŸãããã©ãããåçã§ãããã¯ããåããŠããã®ã?ãåãããšã babel-handbook ãªã©ãèªãã§ãçè§£ãé²ãã®ã§ã¯ãªãããšæããŸãã AST Explore ã®ããš ãã®ããã«ä»åã®çºè¡šã§å
šé¢çã«æŽ»èºãã AST Explore ã§ãããTechLunch äžã§ã軜ã説æã ãã§äœ¿ã£ãŠããŸã£ãã®ã§ã䜿ããããªã©ç°¡åã«ã玹ä»ããŠãããŸãã AST Explore ãšã¯ AST Explore 㯠Felix Kling ãããã2014 幎é ããéçºããŠãããããã¯ãã§ãã äœè«ã§ãããFelix ããã¯çŸåš Facebook ã§åããŠããã£ãããããã§ã facebook/jscodeshift ã reactjs/react-docgen ãªããã®éçºã«ãæºãã£ãŠããã£ãããæš¡æ§ã(react-docgen 㯠babylon ã䜿ã£ãŠããããã§ãã) ãããŸã§æžããŠããéãã«ããã®ããŒã«ã¯è²ã
ãªèšèªãã³ããããã ãã§ AST ãããªãŒåœ¢åŒã§åããããã衚瀺ãããããã©ã³ã¹ãã©ãŒã ãããããšãã§ããããããšãã AST ãè§Šãã«ã¯å€§å€äŸ¿å©ãªããŒã«ã§ããå»å¹Žã® v2.0 ã®ã¢ããããŒãã«ãããã»ãŒããããš gist ãå¿åã§äœã£ãŠãããŠãªã³ã¯ãçæããããªã©ã®äŸ¿å©æ©èœãä»ããŸããã ãããžã§ã¯ãã® README ã«æžããŠããŸãããããŒãµã ãã§ããã°ãããªãããŒã¹ã§ãããã®ãå€ãããŸã JavaScript / CSS / æ£èŠè¡šçŸ / Handlebars ã«é¢ããŠã¯ãã©ã³ã¹ãã©ãŒã ãŸã§ã§ããããã«ãªã£ãŠããŸãã README ããæç²ãããšä»¥äžã®ãããªæãã§ãã AST Explore ã§ããŒã¹ã§ãããã® CSS: cssom csstree postcss + postcss-safe-parser & postcss-scss rework GraphQL Graphviz: redot Handlebars: glimmer handlebars HTML: htmlparser2 parse5 ICU JavaScript: acorn + acorn-jsx babel-eslint babylon espree esformatter esprima flow-parser recast shift traceur typescript typescript-eslint-parser uglify-js JSON Lua: luaparse Markdown: remark PHP php-parser Regular Expressions: regexp-tree Scala Scalameta SQL: sqlite-parser WebIDL YAML å®éšçã ã£ãããããã©ããŒã¹ã§ãããã® ES6: arrow functions, destructuring, classes, ⊠ES7 proposals: async/await, object rest / spread, ⊠JSX Typed JavaScript Flow and TypeScript SASS ããŒã¹ãããã®ããã©ã³ã¹ãã©ãŒã ã§ãããã® JavaScript babel (v5, v6) ESLint (v1, v2, v3) jscodeshift tslint CSS postcss Regular Expressions regexp-tree Handlebars glimmer AST Explore ã®äœ¿ãæ¹ã®ç°¡åãªè§£èª¬ ãµã€ãã«ã¢ã¯ã»ã¹ãããšãã®ãããªç»é¢ã«ãªã£ãŠããã¯ãã§ãã ã¡ã€ã³ç»é¢ JavaScript ã«ãã©ãŒã«ã¹ããŠè§£èª¬ããŠãããŸããšãå·Šãã€ã³ã AST ã«å€æããããœãŒã¹ã³ãŒããå³ãã€ã³ã倿åŸã® AST ãããªãŒæ§é ã§èŠããŠããŸãã åæè¡šç€ºæã«ãå·Šãã€ã³ã®ãœãŒã¹ã³ãŒããã¯ãªãã¯ãããšè©²åœç®æã® AST ããªãŒãå±éããŠãã€ã©ã€ãããŸãããŸãå³ãã€ã³ããã€ã³ããããšãœãŒã¹ã³ãŒãã®è©²åœç®æããã€ã©ã€ãããŸãããäºãã®é¢ä¿ãåããããã仿§ã«ãªã£ãŠããŸãã æ¬æ¥ JavaScript AST ã§çæããããã®ã¯ JSON ãªããžã§ã¯ãã«ãªããŸãããå³ãã€ã³ã®äžã® Tree ãš JSON ã®ã¿ããåããããããšã«ãã£ãŠ AST ã®è¡šç€ºã倿Žããããšãã§ããŸãã ããããŒéšå ããããŒã«è²ã
ãªæ©èœããŸãšãŸã£ãŠããŸãã åæè¡šç€ºã§ã¯ä»¥äžã®ããã«ãªã£ãŠããã¯ãã§ãã Snippet ä¿ã«ãããã¡ã€ã«ã¡ãã¥ãŒã æ°èŠäœæã»(gist ãžã®)ã»ãŒãã»(gist ã®)ãã©ãŒã¯ã»ã·ã§ã¢ããã JavaScript ããŒã¹ããèšèªéžæ ããã§ AST ã«ãããèšèªãåãæ¿ãã éžãã èšèªã«ãã£ãŠ Transform ã䜿ããªããªã acorn ããŒãµéžæ åèšèªã®ããŒãµãåãæ¿ãã Transform ãã©ã³ã¹ãã©ãŒãéžæ éžæããèšèªã«ãã©ã³ã¹ãã©ãŒããããã°éžæã§ããããã«ãªã ãã¡ããéžæãããš 2 ãã€ã³ã ã£ãã®ã 4 ãã€ã³ã«ãªã(åŸè¿°) default ãœãŒã¹ã³ãŒããªã©ãæžããšãã®ããŒãã€ã³ãéžæ default / Vim / Emacs / Sublime ã® 4 çš®é¡ããã ãããã¿ããããŸã ? ãã«ã GitHub ã® README ã«é£ã°ãããã ãã§ã⊠JavaScript ã®ãã©ã³ã¹ãã©ãŒã å
çšèª¬æãããã©ã³ã¹ãã©ãŒã ãéžã¶ãšãã¡ã€ã³ã®ç»é¢ã 4 ç»é¢ã«ãªããŸãã ä»ãŸã§ã® ãœãŒã¹ã³ãŒã ãš AST ããªãŒ ã¯å€ãããŸããããäžã« 2 ã€ãã€ã³ã远å ãããŸãã å·Šäžããã©ã³ã¹ãã©ãŒãã³ãŒããå³äžããã©ã³ã¹ãã©ãŒã ããåŸã®ãœãŒã¹ã³ãŒããšãªã£ãŠããŸãã å·Šäžã®ãã©ã³ã¹ãã©ãŒããè²ã
è§Šã£ãŠãããšå·Šäžã®ãœãŒã¹ã³ãŒãã倿ãããŠãå³äžã«è¡šç€ºããããšããæµãã§ããã ä»¥äž JavaScript ã³ãŒãã®ãã©ã³ã¹ãã©ãŒã ããéã® Tips ã§ã jscodeshift ãéžæãããš Ctrl + Space ã§ jscodeshift ã®è£å®ãå¹ãããã«ãªããŸã babel-plugin-macro ãéžã¶ãšãã©ã³ã¹ãã©ãŒãã®ã³ãŒãèªäœããã®ãŸãŸ babel-plugin ãšããŠäœ¿ããããã«ãªãã®ã§ããã©ã°ã€ã³äœããšãã«æãã¯ãã§ã ãŸãšã åŸã§åå ã¡ã³ããŒã«èããŠã¿ãŸããããäŒãããã£ãããšã¯ãã¡ãããšäŒãã£ãŠããæ§åã ã£ãã®ã§å®å¿ããŸãããæåŸã® Vue.js ã® v1 ãã v2 ã®ãã€ã°ã¬ãŒã·ã§ã³ã®ãã¢ã¯ç޹ä»ããçµæãJavaScript AST 䟿å©ãããšããæè§Šã«ãªã£ããšæããŸãã çŸåšåŒç€Ÿã®ãããã¯ãã§ãJavaScript AST ãã¬ãããªãšäœ¿ããããªãããžã§ã¯ãã¯ãªãã®ã§ãããBabel ãªã©ã¯å
šãããã¯ãã§äœ¿çšããŠãããçµæ§ãã©ã°ã€ã³ãå€çšããŠãããšãããããã®ã§ããããšãããšãã®åºç€ç¥èãšããŠèŠããŠãããŠæã¯ãªãã¯ãã§ãã ãããã£ãéšåã®ååŒ·ãæ¬ ãããç¶ããŠãããããšæ¹ããŠæãæ©äŒã«ããªããŸããã åŒç€Ÿã®éçºæåãªã©æ°ã«ãªãæ¹ã¯ããã¡ãããã©ããã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ã¿ãªãããããã«ã¡ã¯ãéçºæ¬éšãšã³ãžãã¢ã®å¹³æšã§ãããã¡ãã®ããã°ã®æçš¿èªäœã¯ã»ãŒ 1 幎ã¶ãã«ãªããããªå¢ãã§ãããã¿ãªããŸãå
æ°ã§ãããã? åŒç€Ÿã§å®æçã«éå¬ããŠã瀟å
ååŒ·äŒ TechLunch ã§èªåã®é çªãåã£ãŠãããããã©ãããããè¿·ã£ãæ«ã« JavaScript AST ããšã¯ãã ãšããçºè¡šãããã®ã§ããã®ããšã«ã€ããŠæžããŠãããŸãã ãªã JavaScript AST ã«ã€ããŠè©±ãããšæã£ãã®ã çŸåšãåŒç€Ÿã®ãšã³ãžãã¢ã¡ã³ããŒã®ããã¯ã°ã©ãŠã³ãã§äžçªå€æ°æŽŸãªã®ã¯ãå
ãµãŒããµã€ããšã³ãžãã¢ãã§ãããã¡ãããæ¥åã§ã¯ãµãŒããµã€ãã»ããã³ããšã³ãã»ãã€ãã£ãã¢ããªãšããã¯ã°ã©ãŠã³ãã«é¢ããããå¿
èŠã«å¿ããŠåãéãŠãªãéçºããŠããŸãã ãšã¯ãããã¡ãããšãµãŒãã¹éçºèªäœã¯ã§ãããšããŠãããã¯ãåŸæãªåé以å€ã§åºæ¬åçãªã©å«ããŠææ¡ããŠéçºã§ããããšãããšãã¡ãã£ãšé£ãããšããããããŸãããããããããã£ãåºæ¬åçãªãããç¥ã£ãŠãããšããã®èšèªãããŒã«ãªã©ã®çè§£ãæãã®ã¯ç¢ºãã§ãããã ãããªäžãåŒç€Ÿã§éçºããŠãã人éãã»ãŒå
šãŠæ©æµãåããŠããã¯ããªã®ã«ãå
·äœçã«ã©ããªé¢šã«åããŠããã®ããäžçªåããã«ããã§ããã Babel ã²ããŠã¯ JavaScript AST ã®è©±ããããããŸãè峿ã£ãŠè©±ãèããŠãããããªãŒãšããããšã§ã§ãã®ããŒããéžãã æ¬¡ç¬¬ã§ãã ã©ã®ããã«äŒããã èªå㯠JavaScript AST ã«ã€ããŠãšãŠã詳ããããã§ã¯ãªãã®ã§ããã以åä»äºã§ acorn ã䜿ã£ãŠã³ã³ããŒã¿ã¿ãããªã®ãäœã£ããããŠããã®ã§ããããªãã«èå³ã¯æã£ãŠãããšãã人éã§ãã ã§ãã®ã§ãã©ããã£ãŠç޹ä»ããããããšæ©ãã çµæãã»ãŒå
šé¢çã« AST Explore ã«é Œã£ãŠãããšããã¹ã¿ã€ã«ã«ããŸãããAST Explore ã¯æ¬åœã«æé«ã§ãããåè¿°ã®ä»äºãããŠãããšãã¯ãããªäŸ¿å©ãªããŒã«ã¯ãªãã£ããã§ãã²ããã AST ã«å€æããã³ãŒãæžããŠã¯åºæ¥ã AST ãèŠãŠãããããã©ã³ã¹ãã©ãŒã ãããŠçµæãšçšãã£ãããŠè©Šè¡é¯èª€ãããšããæ¯æ¥ã§ããã ãšããããšã§ãåœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã«ãªããŸãã ã¹ã©ã€ãã§ç޹ä»ãããã¢ã¯ãããããã¡ãã«ãªããŸãã https://astexplorer.net/#/gist/82742676286b2dced595ce36cdeb8aae/latest https://astexplorer.net/#/gist/52d871c2f3a8d9cefc68d17badf4f165/latest ä»åäŒãããã£ãããš ãŸããAST ã JavaScript ã®çºå±ã«ãšãŠãå¯äžããŠãããã®ã ãšããããšãç¥ã£ãŠãããããã£ããããJavaScript AST ã®ä»ãŸã§ã®ç°¡åãªæµãããçŸåšã©ã®ãããªåœ¢ã§äœ¿ãããŠããã®ãã®èª¬æãããŸããã(å人çã« Node.js ã®èªçãš JavaScript AST ã®ååšãçŸåšã®ããã³ããšã³ãã®çºå±ã«ãšãŠãéèŠã ãšæã£ãŠããã®ã§) æåã®ãã¡ã¯èããŠã人ããäœã®è©±ãªãã ãâŠãæããããŸãããããã¯ãå®éã«èªåã䜿ã£ãŠããããŒã«ãªã©ã«äœ¿ãããŠãããšãã説æãããããšã ãšãèããŠããã¡ã³ããŒãä¿ç¶èå³ãåºãŠãããšããé°å²æ°ã«ãªã£ãæ°ãããŸã(åœç€Ÿæ¯)ã AST ã®ææ³ãªã©ã¯èªåã説æããããã¯ãã¡ãããšè³æãæã£ãŠããã®ã§å¿
èŠãªéšå以å€ç°¡ç¥åããŸãããéã«ã¡ãã£ãšç«¯æãããããããããããŸãããèå³ãæã£ããšãã«äœãšãªãã§ã調ã¹ãéæšãããã«ã¯ãªãããªãšèããŠããŸãã æ¬¡ã«ç¥ã£ãŠãããããã£ãã®ã¯ãããããšæãã° Babel ã®ãã©ã°ã€ã³ãªããã AST ã§äœãã¡ãããŸãããšããããšã§ãããä»®ã«ãããªããBabel ãã©ã°ã€ã³äœããŸãããããšãªã£ããšããŠãæ£çŽããŸããã³ãšæ¥ãªããšæããŸãããã©ãããåçã§ãããã¯ããåããŠããã®ã?ãåãããšã babel-handbook ãªã©ãèªãã§ãçè§£ãé²ãã®ã§ã¯ãªãããšæããŸãã AST Explore ã®ããš ãã®ããã«ä»åã®çºè¡šã§å
šé¢çã«æŽ»èºãã AST Explore ã§ãããTechLunch äžã§ã軜ã説æã ãã§äœ¿ã£ãŠããŸã£ãã®ã§ã䜿ããããªã©ç°¡åã«ã玹ä»ããŠãããŸãã AST Explore ãšã¯ AST Explore 㯠Felix Kling ãããã2014 幎é ããéçºããŠãããããã¯ãã§ãã äœè«ã§ãããFelix ããã¯çŸåš Facebook ã§åããŠããã£ãããããã§ã facebook/jscodeshift ã reactjs/react-docgen ãªããã®éçºã«ãæºãã£ãŠããã£ãããæš¡æ§ã(react-docgen 㯠babylon ã䜿ã£ãŠããããã§ãã) ãããŸã§æžããŠããéãã«ããã®ããŒã«ã¯è²ã
ãªèšèªãã³ããããã ãã§ AST ãããªãŒåœ¢åŒã§åããããã衚瀺ãããããã©ã³ã¹ãã©ãŒã ãããããšãã§ããããããšãã AST ãè§Šãã«ã¯å€§å€äŸ¿å©ãªããŒã«ã§ããå»å¹Žã® v2.0 ã®ã¢ããããŒãã«ãããã»ãŒããããš gist ãå¿åã§äœã£ãŠãããŠãªã³ã¯ãçæããããªã©ã®äŸ¿å©æ©èœãä»ããŸããã ãããžã§ã¯ãã® README ã«æžããŠããŸãããããŒãµã ãã§ããã°ãããªãããŒã¹ã§ãããã®ãå€ãããŸã JavaScript / CSS / æ£èŠè¡šçŸ / Handlebars ã«é¢ããŠã¯ãã©ã³ã¹ãã©ãŒã ãŸã§ã§ããããã«ãªã£ãŠããŸãã README ããæç²ãããšä»¥äžã®ãããªæãã§ãã AST Explore ã§ããŒã¹ã§ãããã® CSS: cssom csstree postcss + postcss-safe-parser & postcss-scss rework GraphQL Graphviz: redot Handlebars: glimmer handlebars HTML: htmlparser2 parse5 ICU JavaScript: acorn + acorn-jsx babel-eslint babylon espree esformatter esprima flow-parser recast shift traceur typescript typescript-eslint-parser uglify-js JSON Lua: luaparse Markdown: remark PHP php-parser Regular Expressions: regexp-tree Scala Scalameta SQL: sqlite-parser WebIDL YAML å®éšçã ã£ãããããã©ããŒã¹ã§ãããã® ES6: arrow functions, destructuring, classes, ⊠ES7 proposals: async/await, object rest / spread, ⊠JSX Typed JavaScript Flow and TypeScript SASS ããŒã¹ãããã®ããã©ã³ã¹ãã©ãŒã ã§ãããã® JavaScript babel (v5, v6) ESLint (v1, v2, v3) jscodeshift tslint CSS postcss Regular Expressions regexp-tree Handlebars glimmer AST Explore ã®äœ¿ãæ¹ã®ç°¡åãªè§£èª¬ ãµã€ãã«ã¢ã¯ã»ã¹ãããšãã®ãããªç»é¢ã«ãªã£ãŠããã¯ãã§ãã ã¡ã€ã³ç»é¢ JavaScript ã«ãã©ãŒã«ã¹ããŠè§£èª¬ããŠãããŸããšãå·Šãã€ã³ã AST ã«å€æããããœãŒã¹ã³ãŒããå³ãã€ã³ã倿åŸã® AST ãããªãŒæ§é ã§èŠããŠããŸãã åæè¡šç€ºæã«ãå·Šãã€ã³ã®ãœãŒã¹ã³ãŒããã¯ãªãã¯ãããšè©²åœç®æã® AST ããªãŒãå±éããŠãã€ã©ã€ãããŸãããŸãå³ãã€ã³ããã€ã³ããããšãœãŒã¹ã³ãŒãã®è©²åœç®æããã€ã©ã€ãããŸãããäºãã®é¢ä¿ãåããããã仿§ã«ãªã£ãŠããŸãã æ¬æ¥ JavaScript AST ã§çæããããã®ã¯ JSON ãªããžã§ã¯ãã«ãªããŸãããå³ãã€ã³ã®äžã® Tree ãš JSON ã®ã¿ããåããããããšã«ãã£ãŠ AST ã®è¡šç€ºã倿Žããããšãã§ããŸãã ããããŒéšå ããããŒã«è²ã
ãªæ©èœããŸãšãŸã£ãŠããŸãã åæè¡šç€ºã§ã¯ä»¥äžã®ããã«ãªã£ãŠããã¯ãã§ãã Snippet ä¿ã«ãããã¡ã€ã«ã¡ãã¥ãŒã æ°èŠäœæã»(gist ãžã®)ã»ãŒãã»(gist ã®)ãã©ãŒã¯ã»ã·ã§ã¢ããã JavaScript ããŒã¹ããèšèªéžæ ããã§ AST ã«ãããèšèªãåãæ¿ãã éžãã èšèªã«ãã£ãŠ Transform ã䜿ããªããªã acorn ããŒãµéžæ åèšèªã®ããŒãµãåãæ¿ãã Transform ãã©ã³ã¹ãã©ãŒãéžæ éžæããèšèªã«ãã©ã³ã¹ãã©ãŒããããã°éžæã§ããããã«ãªã ãã¡ããéžæãããš 2 ãã€ã³ã ã£ãã®ã 4 ãã€ã³ã«ãªã(åŸè¿°) default ãœãŒã¹ã³ãŒããªã©ãæžããšãã®ããŒãã€ã³ãéžæ default / Vim / Emacs / Sublime ã® 4 çš®é¡ããã ãããã¿ããããŸã ? ãã«ã GitHub ã® README ã«é£ã°ãããã ãã§ã⊠JavaScript ã®ãã©ã³ã¹ãã©ãŒã å
çšèª¬æãããã©ã³ã¹ãã©ãŒã ãéžã¶ãšãã¡ã€ã³ã®ç»é¢ã 4 ç»é¢ã«ãªããŸãã ä»ãŸã§ã® ãœãŒã¹ã³ãŒã ãš AST ããªãŒ ã¯å€ãããŸããããäžã« 2 ã€ãã€ã³ã远å ãããŸãã å·Šäžããã©ã³ã¹ãã©ãŒãã³ãŒããå³äžããã©ã³ã¹ãã©ãŒã ããåŸã®ãœãŒã¹ã³ãŒããšãªã£ãŠããŸãã å·Šäžã®ãã©ã³ã¹ãã©ãŒããè²ã
è§Šã£ãŠãããšå·Šäžã®ãœãŒã¹ã³ãŒãã倿ãããŠãå³äžã«è¡šç€ºããããšããæµãã§ããã ä»¥äž JavaScript ã³ãŒãã®ãã©ã³ã¹ãã©ãŒã ããéã® Tips ã§ã jscodeshift ãéžæãããš Ctrl + Space ã§ jscodeshift ã®è£å®ãå¹ãããã«ãªããŸã babel-plugin-macro ãéžã¶ãšãã©ã³ã¹ãã©ãŒãã®ã³ãŒãèªäœããã®ãŸãŸ babel-plugin ãšããŠäœ¿ããããã«ãªãã®ã§ããã©ã°ã€ã³äœããšãã«æãã¯ãã§ã ãŸãšã åŸã§åå ã¡ã³ããŒã«èããŠã¿ãŸããããäŒãããã£ãããšã¯ãã¡ãããšäŒãã£ãŠããæ§åã ã£ãã®ã§å®å¿ããŸãããæåŸã® Vue.js ã® v1 ãã v2 ã®ãã€ã°ã¬ãŒã·ã§ã³ã®ãã¢ã¯ç޹ä»ããçµæãJavaScript AST 䟿å©ãããšããæè§Šã«ãªã£ããšæããŸãã çŸåšåŒç€Ÿã®ãããã¯ãã§ãJavaScript AST ãã¬ãããªãšäœ¿ããããªãããžã§ã¯ãã¯ãªãã®ã§ãããBabel ãªã©ã¯å
šãããã¯ãã§äœ¿çšããŠãããçµæ§ãã©ã°ã€ã³ãå€çšããŠãããšãããããã®ã§ããããšãããšãã®åºç€ç¥èãšããŠèŠããŠãããŠæã¯ãªãã¯ãã§ãã ãããã£ãéšåã®ååŒ·ãæ¬ ãããç¶ããŠãããããšæ¹ããŠæãæ©äŒã«ããªããŸããã åŒç€Ÿã®éçºæåãªã©æ°ã«ãªãæ¹ã¯ããã¡ãããã©ããã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ã¿ãªãããããã«ã¡ã¯ãéçºæ¬éšãšã³ãžãã¢ã®å¹³æšã§ãããã¡ãã®ããã°ã®æçš¿èªäœã¯ã»ãŒ 1 幎ã¶ãã«ãªããããªå¢ãã§ãããã¿ãªããŸãå
æ°ã§ãããã? åŒç€Ÿã§å®æçã«éå¬ããŠã瀟å
ååŒ·äŒ TechLunch ã§èªåã®é çªãåã£ãŠãããããã©ãããããè¿·ã£ãæ«ã« JavaScript AST ããšã¯ãã ãšããçºè¡šãããã®ã§ããã®ããšã«ã€ããŠæžããŠãããŸãã ãªã JavaScript AST ã«ã€ããŠè©±ãããšæã£ãã®ã çŸåšãåŒç€Ÿã®ãšã³ãžãã¢ã¡ã³ããŒã®ããã¯ã°ã©ãŠã³ãã§äžçªå€æ°æŽŸãªã®ã¯ãå
ãµãŒããµã€ããšã³ãžãã¢ãã§ãããã¡ãããæ¥åã§ã¯ãµãŒããµã€ãã»ããã³ããšã³ãã»ãã€ãã£ãã¢ããªãšããã¯ã°ã©ãŠã³ãã«é¢ããããå¿
èŠã«å¿ããŠåãéãŠãªãéçºããŠããŸãã ãšã¯ãããã¡ãããšãµãŒãã¹éçºèªäœã¯ã§ãããšããŠãããã¯ãåŸæãªåé以å€ã§åºæ¬åçãªã©å«ããŠææ¡ããŠéçºã§ããããšãããšãã¡ãã£ãšé£ãããšããããããŸãããããããããã£ãåºæ¬åçãªãããç¥ã£ãŠãããšããã®èšèªãããŒã«ãªã©ã®çè§£ãæãã®ã¯ç¢ºãã§ãããã ãããªäžãåŒç€Ÿã§éçºããŠãã人éãã»ãŒå
šãŠæ©æµãåããŠããã¯ããªã®ã«ãå
·äœçã«ã©ããªé¢šã«åããŠããã®ããäžçªåããã«ããã§ããã Babel ã²ããŠã¯ JavaScript AST ã®è©±ããããããŸãè峿ã£ãŠè©±ãèããŠãããããªãŒãšããããšã§ã§ãã®ããŒããéžãã æ¬¡ç¬¬ã§ãã ã©ã®ããã«äŒããã èªå㯠JavaScript AST ã«ã€ããŠãšãŠã詳ããããã§ã¯ãªãã®ã§ããã以åä»äºã§ acorn ã䜿ã£ãŠã³ã³ããŒã¿ã¿ãããªã®ãäœã£ããããŠããã®ã§ããããªãã«èå³ã¯æã£ãŠãããšãã人éã§ãã ã§ãã®ã§ãã©ããã£ãŠç޹ä»ããããããšæ©ãã çµæãã»ãŒå
šé¢çã« AST Explore ã«é Œã£ãŠãããšããã¹ã¿ã€ã«ã«ããŸãããAST Explore ã¯æ¬åœã«æé«ã§ãããåè¿°ã®ä»äºãããŠãããšãã¯ãããªäŸ¿å©ãªããŒã«ã¯ãªãã£ããã§ãã²ããã AST ã«å€æããã³ãŒãæžããŠã¯åºæ¥ã AST ãèŠãŠãããããã©ã³ã¹ãã©ãŒã ãããŠçµæãšçšãã£ãããŠè©Šè¡é¯èª€ãããšããæ¯æ¥ã§ããã ãšããããšã§ãåœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã«ãªããŸãã ã¹ã©ã€ãã§ç޹ä»ãããã¢ã¯ãããããã¡ãã«ãªããŸãã https://astexplorer.net/#/gist/82742676286b2dced595ce36cdeb8aae/latest https://astexplorer.net/#/gist/52d871c2f3a8d9cefc68d17badf4f165/latest ä»åäŒãããã£ãããš ãŸããAST ã JavaScript ã®çºå±ã«ãšãŠãå¯äžããŠãããã®ã ãšããããšãç¥ã£ãŠãããããã£ããããJavaScript AST ã®ä»ãŸã§ã®ç°¡åãªæµãããçŸåšã©ã®ãããªåœ¢ã§äœ¿ãããŠããã®ãã®èª¬æãããŸããã(å人çã« Node.js ã®èªçãš JavaScript AST ã®ååšãçŸåšã®ããã³ããšã³ãã®çºå±ã«ãšãŠãéèŠã ãšæã£ãŠããã®ã§) æåã®ãã¡ã¯èããŠã人ããäœã®è©±ãªãã ãâŠãæããããŸãããããã¯ãå®éã«èªåã䜿ã£ãŠããããŒã«ãªã©ã«äœ¿ãããŠãããšãã説æãããããšã ãšãèããŠããã¡ã³ããŒãä¿ç¶èå³ãåºãŠãããšããé°å²æ°ã«ãªã£ãæ°ãããŸã(åœç€Ÿæ¯)ã AST ã®ææ³ãªã©ã¯èªåã説æããããã¯ãã¡ãããšè³æãæã£ãŠããã®ã§å¿
èŠãªéšå以å€ç°¡ç¥åããŸãããéã«ã¡ãã£ãšç«¯æãããããããããããŸãããèå³ãæã£ããšãã«äœãšãªãã§ã調ã¹ãéæšãããã«ã¯ãªãããªãšèããŠããŸãã æ¬¡ã«ç¥ã£ãŠãããããã£ãã®ã¯ãããããšæãã° Babel ã®ãã©ã°ã€ã³ãªããã AST ã§äœãã¡ãããŸãããšããããšã§ãããä»®ã«ãããªããBabel ãã©ã°ã€ã³äœããŸãããããšãªã£ããšããŠãæ£çŽããŸããã³ãšæ¥ãªããšæããŸãããã©ãããåçã§ãããã¯ããåããŠããã®ã?ãåãããšã babel-handbook ãªã©ãèªãã§ãçè§£ãé²ãã®ã§ã¯ãªãããšæããŸãã AST Explore ã®ããš ãã®ããã«ä»åã®çºè¡šã§å
šé¢çã«æŽ»èºãã AST Explore ã§ãããTechLunch äžã§ã軜ã説æã ãã§äœ¿ã£ãŠããŸã£ãã®ã§ã䜿ããããªã©ç°¡åã«ã玹ä»ããŠãããŸãã AST Explore ãšã¯ AST Explore 㯠Felix Kling ãããã2014 幎é ããéçºããŠãããããã¯ãã§ãã äœè«ã§ãããFelix ããã¯çŸåš Facebook ã§åããŠããã£ãããããã§ã facebook/jscodeshift ã reactjs/react-docgen ãªããã®éçºã«ãæºãã£ãŠããã£ãããæš¡æ§ã(react-docgen 㯠babylon ã䜿ã£ãŠããããã§ãã) ãããŸã§æžããŠããéãã«ããã®ããŒã«ã¯è²ã
ãªèšèªãã³ããããã ãã§ AST ãããªãŒåœ¢åŒã§åããããã衚瀺ãããããã©ã³ã¹ãã©ãŒã ãããããšãã§ããããããšãã AST ãè§Šãã«ã¯å€§å€äŸ¿å©ãªããŒã«ã§ããå»å¹Žã® v2.0 ã®ã¢ããããŒãã«ãããã»ãŒããããš gist ãå¿åã§äœã£ãŠãããŠãªã³ã¯ãçæããããªã©ã®äŸ¿å©æ©èœãä»ããŸããã ãããžã§ã¯ãã® README ã«æžããŠããŸãããããŒãµã ãã§ããã°ãããªãããŒã¹ã§ãããã®ãå€ãããŸã JavaScript / CSS / æ£èŠè¡šçŸ / Handlebars ã«é¢ããŠã¯ãã©ã³ã¹ãã©ãŒã ãŸã§ã§ããããã«ãªã£ãŠããŸãã README ããæç²ãããšä»¥äžã®ãããªæãã§ãã AST Explore ã§ããŒã¹ã§ãããã® CSS: cssom csstree postcss + postcss-safe-parser & postcss-scss rework GraphQL Graphviz: redot Handlebars: glimmer handlebars HTML: htmlparser2 parse5 ICU JavaScript: acorn + acorn-jsx babel-eslint babylon espree esformatter esprima flow-parser recast shift traceur typescript typescript-eslint-parser uglify-js JSON Lua: luaparse Markdown: remark PHP php-parser Regular Expressions: regexp-tree Scala Scalameta SQL: sqlite-parser WebIDL YAML å®éšçã ã£ãããããã©ããŒã¹ã§ãããã® ES6: arrow functions, destructuring, classes, ⊠ES7 proposals: async/await, object rest / spread, ⊠JSX Typed JavaScript Flow and TypeScript SASS ããŒã¹ãããã®ããã©ã³ã¹ãã©ãŒã ã§ãããã® JavaScript babel (v5, v6) ESLint (v1, v2, v3) jscodeshift tslint CSS postcss Regular Expressions regexp-tree Handlebars glimmer AST Explore ã®äœ¿ãæ¹ã®ç°¡åãªè§£èª¬ ãµã€ãã«ã¢ã¯ã»ã¹ãããšãã®ãããªç»é¢ã«ãªã£ãŠããã¯ãã§ãã ã¡ã€ã³ç»é¢ JavaScript ã«ãã©ãŒã«ã¹ããŠè§£èª¬ããŠãããŸããšãå·Šãã€ã³ã AST ã«å€æããããœãŒã¹ã³ãŒããå³ãã€ã³ã倿åŸã® AST ãããªãŒæ§é ã§èŠããŠããŸãã åæè¡šç€ºæã«ãå·Šãã€ã³ã®ãœãŒã¹ã³ãŒããã¯ãªãã¯ãããšè©²åœç®æã® AST ããªãŒãå±éããŠãã€ã©ã€ãããŸãããŸãå³ãã€ã³ããã€ã³ããããšãœãŒã¹ã³ãŒãã®è©²åœç®æããã€ã©ã€ãããŸãããäºãã®é¢ä¿ãåããããã仿§ã«ãªã£ãŠããŸãã æ¬æ¥ JavaScript AST ã§çæããããã®ã¯ JSON ãªããžã§ã¯ãã«ãªããŸãããå³ãã€ã³ã®äžã® Tree ãš JSON ã®ã¿ããåããããããšã«ãã£ãŠ AST ã®è¡šç€ºã倿Žããããšãã§ããŸãã ããããŒéšå ããããŒã«è²ã
ãªæ©èœããŸãšãŸã£ãŠããŸãã åæè¡šç€ºã§ã¯ä»¥äžã®ããã«ãªã£ãŠããã¯ãã§ãã Snippet ä¿ã«ãããã¡ã€ã«ã¡ãã¥ãŒã æ°èŠäœæã»(gist ãžã®)ã»ãŒãã»(gist ã®)ãã©ãŒã¯ã»ã·ã§ã¢ããã JavaScript ããŒã¹ããèšèªéžæ ããã§ AST ã«ãããèšèªãåãæ¿ãã éžãã èšèªã«ãã£ãŠ Transform ã䜿ããªããªã acorn ããŒãµéžæ åèšèªã®ããŒãµãåãæ¿ãã Transform ãã©ã³ã¹ãã©ãŒãéžæ éžæããèšèªã«ãã©ã³ã¹ãã©ãŒããããã°éžæã§ããããã«ãªã ãã¡ããéžæãããš 2 ãã€ã³ã ã£ãã®ã 4 ãã€ã³ã«ãªã(åŸè¿°) default ãœãŒã¹ã³ãŒããªã©ãæžããšãã®ããŒãã€ã³ãéžæ default / Vim / Emacs / Sublime ã® 4 çš®é¡ããã ãããã¿ããããŸã ? ãã«ã GitHub ã® README ã«é£ã°ãããã ãã§ã⊠JavaScript ã®ãã©ã³ã¹ãã©ãŒã å
çšèª¬æãããã©ã³ã¹ãã©ãŒã ãéžã¶ãšãã¡ã€ã³ã®ç»é¢ã 4 ç»é¢ã«ãªããŸãã ä»ãŸã§ã® ãœãŒã¹ã³ãŒã ãš AST ããªãŒ ã¯å€ãããŸããããäžã« 2 ã€ãã€ã³ã远å ãããŸãã å·Šäžããã©ã³ã¹ãã©ãŒãã³ãŒããå³äžããã©ã³ã¹ãã©ãŒã ããåŸã®ãœãŒã¹ã³ãŒããšãªã£ãŠããŸãã å·Šäžã®ãã©ã³ã¹ãã©ãŒããè²ã
è§Šã£ãŠãããšå·Šäžã®ãœãŒã¹ã³ãŒãã倿ãããŠãå³äžã«è¡šç€ºããããšããæµãã§ããã ä»¥äž JavaScript ã³ãŒãã®ãã©ã³ã¹ãã©ãŒã ããéã® Tips ã§ã jscodeshift ãéžæãããš Ctrl + Space ã§ jscodeshift ã®è£å®ãå¹ãããã«ãªããŸã babel-plugin-macro ãéžã¶ãšãã©ã³ã¹ãã©ãŒãã®ã³ãŒãèªäœããã®ãŸãŸ babel-plugin ãšããŠäœ¿ããããã«ãªãã®ã§ããã©ã°ã€ã³äœããšãã«æãã¯ãã§ã ãŸãšã åŸã§åå ã¡ã³ããŒã«èããŠã¿ãŸããããäŒãããã£ãããšã¯ãã¡ãããšäŒãã£ãŠããæ§åã ã£ãã®ã§å®å¿ããŸãããæåŸã® Vue.js ã® v1 ãã v2 ã®ãã€ã°ã¬ãŒã·ã§ã³ã®ãã¢ã¯ç޹ä»ããçµæãJavaScript AST 䟿å©ãããšããæè§Šã«ãªã£ããšæããŸãã çŸåšåŒç€Ÿã®ãããã¯ãã§ãJavaScript AST ãã¬ãããªãšäœ¿ããããªãããžã§ã¯ãã¯ãªãã®ã§ãããBabel ãªã©ã¯å
šãããã¯ãã§äœ¿çšããŠãããçµæ§ãã©ã°ã€ã³ãå€çšããŠãããšãããããã®ã§ããããšãããšãã®åºç€ç¥èãšããŠèŠããŠãããŠæã¯ãªãã¯ãã§ãã ãããã£ãéšåã®ååŒ·ãæ¬ ãããç¶ããŠãããããšæ¹ããŠæãæ©äŒã«ããªããŸããã åŒç€Ÿã®éçºæåãªã©æ°ã«ãªãæ¹ã¯ããã¡ãããã©ããã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ã¿ãªãããããã«ã¡ã¯ãéçºæ¬éšãšã³ãžãã¢ã®å¹³æšã§ãããã¡ãã®ããã°ã®æçš¿èªäœã¯ã»ãŒ 1 幎ã¶ãã«ãªããããªå¢ãã§ãããã¿ãªããŸãå
æ°ã§ãããã? åŒç€Ÿã§å®æçã«éå¬ããŠã瀟å
ååŒ·äŒ TechLunch ã§èªåã®é çªãåã£ãŠãããããã©ãããããè¿·ã£ãæ«ã« JavaScript AST ããšã¯ãã ãšããçºè¡šãããã®ã§ããã®ããšã«ã€ããŠæžããŠãããŸãã ãªã JavaScript AST ã«ã€ããŠè©±ãããšæã£ãã®ã çŸåšãåŒç€Ÿã®ãšã³ãžãã¢ã¡ã³ããŒã®ããã¯ã°ã©ãŠã³ãã§äžçªå€æ°æŽŸãªã®ã¯ãå
ãµãŒããµã€ããšã³ãžãã¢ãã§ãããã¡ãããæ¥åã§ã¯ãµãŒããµã€ãã»ããã³ããšã³ãã»ãã€ãã£ãã¢ããªãšããã¯ã°ã©ãŠã³ãã«é¢ããããå¿
èŠã«å¿ããŠåãéãŠãªãéçºããŠããŸãã ãšã¯ãããã¡ãããšãµãŒãã¹éçºèªäœã¯ã§ãããšããŠãããã¯ãåŸæãªåé以å€ã§åºæ¬åçãªã©å«ããŠææ¡ããŠéçºã§ããããšãããšãã¡ãã£ãšé£ãããšããããããŸãããããããããã£ãåºæ¬åçãªãããç¥ã£ãŠãããšããã®èšèªãããŒã«ãªã©ã®çè§£ãæãã®ã¯ç¢ºãã§ãããã ãããªäžãåŒç€Ÿã§éçºããŠãã人éãã»ãŒå
šãŠæ©æµãåããŠããã¯ããªã®ã«ãå
·äœçã«ã©ããªé¢šã«åããŠããã®ããäžçªåããã«ããã§ããã Babel ã²ããŠã¯ JavaScript AST ã®è©±ããããããŸãè峿ã£ãŠè©±ãèããŠãããããªãŒãšããããšã§ã§ãã®ããŒããéžãã æ¬¡ç¬¬ã§ãã ã©ã®ããã«äŒããã èªå㯠JavaScript AST ã«ã€ããŠãšãŠã詳ããããã§ã¯ãªãã®ã§ããã以åä»äºã§ acorn ã䜿ã£ãŠã³ã³ããŒã¿ã¿ãããªã®ãäœã£ããããŠããã®ã§ããããªãã«èå³ã¯æã£ãŠãããšãã人éã§ãã ã§ãã®ã§ãã©ããã£ãŠç޹ä»ããããããšæ©ãã çµæãã»ãŒå
šé¢çã« AST Explore ã«é Œã£ãŠãããšããã¹ã¿ã€ã«ã«ããŸãããAST Explore ã¯æ¬åœã«æé«ã§ãããåè¿°ã®ä»äºãããŠãããšãã¯ãããªäŸ¿å©ãªããŒã«ã¯ãªãã£ããã§ãã²ããã AST ã«å€æããã³ãŒãæžããŠã¯åºæ¥ã AST ãèŠãŠãããããã©ã³ã¹ãã©ãŒã ãããŠçµæãšçšãã£ãããŠè©Šè¡é¯èª€ãããšããæ¯æ¥ã§ããã ãšããããšã§ãåœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã«ãªããŸãã ã¹ã©ã€ãã§ç޹ä»ãããã¢ã¯ãããããã¡ãã«ãªããŸãã https://astexplorer.net/#/gist/82742676286b2dced595ce36cdeb8aae/latest https://astexplorer.net/#/gist/52d871c2f3a8d9cefc68d17badf4f165/latest ä»åäŒãããã£ãããš ãŸããAST ã JavaScript ã®çºå±ã«ãšãŠãå¯äžããŠãããã®ã ãšããããšãç¥ã£ãŠãããããã£ããããJavaScript AST ã®ä»ãŸã§ã®ç°¡åãªæµãããçŸåšã©ã®ãããªåœ¢ã§äœ¿ãããŠããã®ãã®èª¬æãããŸããã(å人çã« Node.js ã®èªçãš JavaScript AST ã®ååšãçŸåšã®ããã³ããšã³ãã®çºå±ã«ãšãŠãéèŠã ãšæã£ãŠããã®ã§) æåã®ãã¡ã¯èããŠã人ããäœã®è©±ãªãã ãâŠãæããããŸãããããã¯ãå®éã«èªåã䜿ã£ãŠããããŒã«ãªã©ã«äœ¿ãããŠãããšãã説æãããããšã ãšãèããŠããã¡ã³ããŒãä¿ç¶èå³ãåºãŠãããšããé°å²æ°ã«ãªã£ãæ°ãããŸã(åœç€Ÿæ¯)ã AST ã®ææ³ãªã©ã¯èªåã説æããããã¯ãã¡ãããšè³æãæã£ãŠããã®ã§å¿
èŠãªéšå以å€ç°¡ç¥åããŸãããéã«ã¡ãã£ãšç«¯æãããããããããããŸãããèå³ãæã£ããšãã«äœãšãªãã§ã調ã¹ãéæšãããã«ã¯ãªãããªãšèããŠããŸãã æ¬¡ã«ç¥ã£ãŠãããããã£ãã®ã¯ãããããšæãã° Babel ã®ãã©ã°ã€ã³ãªããã AST ã§äœãã¡ãããŸãããšããããšã§ãããä»®ã«ãããªããBabel ãã©ã°ã€ã³äœããŸãããããšãªã£ããšããŠãæ£çŽããŸããã³ãšæ¥ãªããšæããŸãããã©ãããåçã§ãããã¯ããåããŠããã®ã?ãåãããšã babel-handbook ãªã©ãèªãã§ãçè§£ãé²ãã®ã§ã¯ãªãããšæããŸãã AST Explore ã®ããš ãã®ããã«ä»åã®çºè¡šã§å
šé¢çã«æŽ»èºãã AST Explore ã§ãããTechLunch äžã§ã軜ã説æã ãã§äœ¿ã£ãŠããŸã£ãã®ã§ã䜿ããããªã©ç°¡åã«ã玹ä»ããŠãããŸãã AST Explore ãšã¯ AST Explore 㯠Felix Kling ãããã2014 幎é ããéçºããŠãããããã¯ãã§ãã äœè«ã§ãããFelix ããã¯çŸåš Facebook ã§åããŠããã£ãããããã§ã facebook/jscodeshift ã reactjs/react-docgen ãªããã®éçºã«ãæºãã£ãŠããã£ãããæš¡æ§ã(react-docgen 㯠babylon ã䜿ã£ãŠããããã§ãã) ãããŸã§æžããŠããéãã«ããã®ããŒã«ã¯è²ã
ãªèšèªãã³ããããã ãã§ AST ãããªãŒåœ¢åŒã§åããããã衚瀺ãããããã©ã³ã¹ãã©ãŒã ãããããšãã§ããããããšãã AST ãè§Šãã«ã¯å€§å€äŸ¿å©ãªããŒã«ã§ããå»å¹Žã® v2.0 ã®ã¢ããããŒãã«ãããã»ãŒããããš gist ãå¿åã§äœã£ãŠãããŠãªã³ã¯ãçæããããªã©ã®äŸ¿å©æ©èœãä»ããŸããã ãããžã§ã¯ãã® README ã«æžããŠããŸãããããŒãµã ãã§ããã°ãããªãããŒã¹ã§ãããã®ãå€ãããŸã JavaScript / CSS / æ£èŠè¡šçŸ / Handlebars ã«é¢ããŠã¯ãã©ã³ã¹ãã©ãŒã ãŸã§ã§ããããã«ãªã£ãŠããŸãã README ããæç²ãããšä»¥äžã®ãããªæãã§ãã AST Explore ã§ããŒã¹ã§ãããã® CSS: cssom csstree postcss + postcss-safe-parser & postcss-scss rework GraphQL Graphviz: redot Handlebars: glimmer handlebars HTML: htmlparser2 parse5 ICU JavaScript: acorn + acorn-jsx babel-eslint babylon espree esformatter esprima flow-parser recast shift traceur typescript typescript-eslint-parser uglify-js JSON Lua: luaparse Markdown: remark PHP php-parser Regular Expressions: regexp-tree Scala Scalameta SQL: sqlite-parser WebIDL YAML å®éšçã ã£ãããããã©ããŒã¹ã§ãããã® ES6: arrow functions, destructuring, classes, ⊠ES7 proposals: async/await, object rest / spread, ⊠JSX Typed JavaScript Flow and TypeScript SASS ããŒã¹ãããã®ããã©ã³ã¹ãã©ãŒã ã§ãããã® JavaScript babel (v5, v6) ESLint (v1, v2, v3) jscodeshift tslint CSS postcss Regular Expressions regexp-tree Handlebars glimmer AST Explore ã®äœ¿ãæ¹ã®ç°¡åãªè§£èª¬ ãµã€ãã«ã¢ã¯ã»ã¹ãããšãã®ãããªç»é¢ã«ãªã£ãŠããã¯ãã§ãã ã¡ã€ã³ç»é¢ JavaScript ã«ãã©ãŒã«ã¹ããŠè§£èª¬ããŠãããŸããšãå·Šãã€ã³ã AST ã«å€æããããœãŒã¹ã³ãŒããå³ãã€ã³ã倿åŸã® AST ãããªãŒæ§é ã§èŠããŠããŸãã åæè¡šç€ºæã«ãå·Šãã€ã³ã®ãœãŒã¹ã³ãŒããã¯ãªãã¯ãããšè©²åœç®æã® AST ããªãŒãå±éããŠãã€ã©ã€ãããŸãããŸãå³ãã€ã³ããã€ã³ããããšãœãŒã¹ã³ãŒãã®è©²åœç®æããã€ã©ã€ãããŸãããäºãã®é¢ä¿ãåããããã仿§ã«ãªã£ãŠããŸãã æ¬æ¥ JavaScript AST ã§çæããããã®ã¯ JSON ãªããžã§ã¯ãã«ãªããŸãããå³ãã€ã³ã®äžã® Tree ãš JSON ã®ã¿ããåããããããšã«ãã£ãŠ AST ã®è¡šç€ºã倿Žããããšãã§ããŸãã ããããŒéšå ããããŒã«è²ã
ãªæ©èœããŸãšãŸã£ãŠããŸãã åæè¡šç€ºã§ã¯ä»¥äžã®ããã«ãªã£ãŠããã¯ãã§ãã Snippet ä¿ã«ãããã¡ã€ã«ã¡ãã¥ãŒã æ°èŠäœæã»(gist ãžã®)ã»ãŒãã»(gist ã®)ãã©ãŒã¯ã»ã·ã§ã¢ããã JavaScript ããŒã¹ããèšèªéžæ ããã§ AST ã«ãããèšèªãåãæ¿ãã éžãã èšèªã«ãã£ãŠ Transform ã䜿ããªããªã acorn ããŒãµéžæ åèšèªã®ããŒãµãåãæ¿ãã Transform ãã©ã³ã¹ãã©ãŒãéžæ éžæããèšèªã«ãã©ã³ã¹ãã©ãŒããããã°éžæã§ããããã«ãªã ãã¡ããéžæãããš 2 ãã€ã³ã ã£ãã®ã 4 ãã€ã³ã«ãªã(åŸè¿°) default ãœãŒã¹ã³ãŒããªã©ãæžããšãã®ããŒãã€ã³ãéžæ default / Vim / Emacs / Sublime ã® 4 çš®é¡ããã ãããã¿ããããŸã ? ãã«ã GitHub ã® README ã«é£ã°ãããã ãã§ã⊠JavaScript ã®ãã©ã³ã¹ãã©ãŒã å
çšèª¬æãããã©ã³ã¹ãã©ãŒã ãéžã¶ãšãã¡ã€ã³ã®ç»é¢ã 4 ç»é¢ã«ãªããŸãã ä»ãŸã§ã® ãœãŒã¹ã³ãŒã ãš AST ããªãŒ ã¯å€ãããŸããããäžã« 2 ã€ãã€ã³ã远å ãããŸãã å·Šäžããã©ã³ã¹ãã©ãŒãã³ãŒããå³äžããã©ã³ã¹ãã©ãŒã ããåŸã®ãœãŒã¹ã³ãŒããšãªã£ãŠããŸãã å·Šäžã®ãã©ã³ã¹ãã©ãŒããè²ã
è§Šã£ãŠãããšå·Šäžã®ãœãŒã¹ã³ãŒãã倿ãããŠãå³äžã«è¡šç€ºããããšããæµãã§ããã ä»¥äž JavaScript ã³ãŒãã®ãã©ã³ã¹ãã©ãŒã ããéã® Tips ã§ã jscodeshift ãéžæãããš Ctrl + Space ã§ jscodeshift ã®è£å®ãå¹ãããã«ãªããŸã babel-plugin-macro ãéžã¶ãšãã©ã³ã¹ãã©ãŒãã®ã³ãŒãèªäœããã®ãŸãŸ babel-plugin ãšããŠäœ¿ããããã«ãªãã®ã§ããã©ã°ã€ã³äœããšãã«æãã¯ãã§ã ãŸãšã åŸã§åå ã¡ã³ããŒã«èããŠã¿ãŸããããäŒãããã£ãããšã¯ãã¡ãããšäŒãã£ãŠããæ§åã ã£ãã®ã§å®å¿ããŸãããæåŸã® Vue.js ã® v1 ãã v2 ã®ãã€ã°ã¬ãŒã·ã§ã³ã®ãã¢ã¯ç޹ä»ããçµæãJavaScript AST 䟿å©ãããšããæè§Šã«ãªã£ããšæããŸãã çŸåšåŒç€Ÿã®ãããã¯ãã§ãJavaScript AST ãã¬ãããªãšäœ¿ããããªãããžã§ã¯ãã¯ãªãã®ã§ãããBabel ãªã©ã¯å
šãããã¯ãã§äœ¿çšããŠãããçµæ§ãã©ã°ã€ã³ãå€çšããŠãããšãããããã®ã§ããããšãããšãã®åºç€ç¥èãšããŠèŠããŠãããŠæã¯ãªãã¯ãã§ãã ãããã£ãéšåã®ååŒ·ãæ¬ ãããç¶ããŠãããããšæ¹ããŠæãæ©äŒã«ããªããŸããã åŒç€Ÿã®éçºæåãªã©æ°ã«ãªãæ¹ã¯ããã¡ãããã©ããã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ã¿ãªãããããã«ã¡ã¯ãéçºæ¬éšãšã³ãžãã¢ã®å¹³æšã§ãããã¡ãã®ããã°ã®æçš¿èªäœã¯ã»ãŒ 1 幎ã¶ãã«ãªããããªå¢ãã§ãããã¿ãªããŸãå
æ°ã§ãããã? åŒç€Ÿã§å®æçã«éå¬ããŠã瀟å
ååŒ·äŒ TechLunch ã§èªåã®é çªãåã£ãŠãããããã©ãããããè¿·ã£ãæ«ã« JavaScript AST ããšã¯ãã ãšããçºè¡šãããã®ã§ããã®ããšã«ã€ããŠæžããŠãããŸãã ãªã JavaScript AST ã«ã€ããŠè©±ãããšæã£ãã®ã çŸåšãåŒç€Ÿã®ãšã³ãžãã¢ã¡ã³ããŒã®ããã¯ã°ã©ãŠã³ãã§äžçªå€æ°æŽŸãªã®ã¯ãå
ãµãŒããµã€ããšã³ãžãã¢ãã§ãããã¡ãããæ¥åã§ã¯ãµãŒããµã€ãã»ããã³ããšã³ãã»ãã€ãã£ãã¢ããªãšããã¯ã°ã©ãŠã³ãã«é¢ããããå¿
èŠã«å¿ããŠåãéãŠãªãéçºããŠããŸãã ãšã¯ãããã¡ãããšãµãŒãã¹éçºèªäœã¯ã§ãããšããŠãããã¯ãåŸæãªåé以å€ã§åºæ¬åçãªã©å«ããŠææ¡ããŠéçºã§ããããšãããšãã¡ãã£ãšé£ãããšããããããŸãããããããããã£ãåºæ¬åçãªãããç¥ã£ãŠãããšããã®èšèªãããŒã«ãªã©ã®çè§£ãæãã®ã¯ç¢ºãã§ãããã ãããªäžãåŒç€Ÿã§éçºããŠãã人éãã»ãŒå
šãŠæ©æµãåããŠããã¯ããªã®ã«ãå
·äœçã«ã©ããªé¢šã«åããŠããã®ããäžçªåããã«ããã§ããã Babel ã²ããŠã¯ JavaScript AST ã®è©±ããããããŸãè峿ã£ãŠè©±ãèããŠãããããªãŒãšããããšã§ã§ãã®ããŒããéžãã æ¬¡ç¬¬ã§ãã ã©ã®ããã«äŒããã èªå㯠JavaScript AST ã«ã€ããŠãšãŠã詳ããããã§ã¯ãªãã®ã§ããã以åä»äºã§ acorn ã䜿ã£ãŠã³ã³ããŒã¿ã¿ãããªã®ãäœã£ããããŠããã®ã§ããããªãã«èå³ã¯æã£ãŠãããšãã人éã§ãã ã§ãã®ã§ãã©ããã£ãŠç޹ä»ããããããšæ©ãã çµæãã»ãŒå
šé¢çã« AST Explore ã«é Œã£ãŠãããšããã¹ã¿ã€ã«ã«ããŸãããAST Explore ã¯æ¬åœã«æé«ã§ãããåè¿°ã®ä»äºãããŠãããšãã¯ãããªäŸ¿å©ãªããŒã«ã¯ãªãã£ããã§ãã²ããã AST ã«å€æããã³ãŒãæžããŠã¯åºæ¥ã AST ãèŠãŠãããããã©ã³ã¹ãã©ãŒã ãããŠçµæãšçšãã£ãããŠè©Šè¡é¯èª€ãããšããæ¯æ¥ã§ããã ãšããããšã§ãåœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã«ãªããŸãã ã¹ã©ã€ãã§ç޹ä»ãããã¢ã¯ãããããã¡ãã«ãªããŸãã https://astexplorer.net/#/gist/82742676286b2dced595ce36cdeb8aae/latest https://astexplorer.net/#/gist/52d871c2f3a8d9cefc68d17badf4f165/latest ä»åäŒãããã£ãããš ãŸããAST ã JavaScript ã®çºå±ã«ãšãŠãå¯äžããŠãããã®ã ãšããããšãç¥ã£ãŠãããããã£ããããJavaScript AST ã®ä»ãŸã§ã®ç°¡åãªæµãããçŸåšã©ã®ãããªåœ¢ã§äœ¿ãããŠããã®ãã®èª¬æãããŸããã(å人çã« Node.js ã®èªçãš JavaScript AST ã®ååšãçŸåšã®ããã³ããšã³ãã®çºå±ã«ãšãŠãéèŠã ãšæã£ãŠããã®ã§) æåã®ãã¡ã¯èããŠã人ããäœã®è©±ãªãã ãâŠãæããããŸãããããã¯ãå®éã«èªåã䜿ã£ãŠããããŒã«ãªã©ã«äœ¿ãããŠãããšãã説æãããããšã ãšãèããŠããã¡ã³ããŒãä¿ç¶èå³ãåºãŠãããšããé°å²æ°ã«ãªã£ãæ°ãããŸã(åœç€Ÿæ¯)ã AST ã®ææ³ãªã©ã¯èªåã説æããããã¯ãã¡ãããšè³æãæã£ãŠããã®ã§å¿
èŠãªéšå以å€ç°¡ç¥åããŸãããéã«ã¡ãã£ãšç«¯æãããããããããããŸãããèå³ãæã£ããšãã«äœãšãªãã§ã調ã¹ãéæšãããã«ã¯ãªãããªãšèããŠããŸãã æ¬¡ã«ç¥ã£ãŠãããããã£ãã®ã¯ãããããšæãã° Babel ã®ãã©ã°ã€ã³ãªããã AST ã§äœãã¡ãããŸãããšããããšã§ãããä»®ã«ãããªããBabel ãã©ã°ã€ã³äœããŸãããããšãªã£ããšããŠãæ£çŽããŸããã³ãšæ¥ãªããšæããŸãããã©ãããåçã§ãããã¯ããåããŠããã®ã?ãåãããšã babel-handbook ãªã©ãèªãã§ãçè§£ãé²ãã®ã§ã¯ãªãããšæããŸãã AST Explore ã®ããš ãã®ããã«ä»åã®çºè¡šã§å
šé¢çã«æŽ»èºãã AST Explore ã§ãããTechLunch äžã§ã軜ã説æã ãã§äœ¿ã£ãŠããŸã£ãã®ã§ã䜿ããããªã©ç°¡åã«ã玹ä»ããŠãããŸãã AST Explore ãšã¯ AST Explore 㯠Felix Kling ãããã2014 幎é ããéçºããŠãããããã¯ãã§ãã äœè«ã§ãããFelix ããã¯çŸåš Facebook ã§åããŠããã£ãããããã§ã facebook/jscodeshift ã reactjs/react-docgen ãªããã®éçºã«ãæºãã£ãŠããã£ãããæš¡æ§ã(react-docgen 㯠babylon ã䜿ã£ãŠããããã§ãã) ãããŸã§æžããŠããéãã«ããã®ããŒã«ã¯è²ã
ãªèšèªãã³ããããã ãã§ AST ãããªãŒåœ¢åŒã§åããããã衚瀺ãããããã©ã³ã¹ãã©ãŒã ãããããšãã§ããããããšãã AST ãè§Šãã«ã¯å€§å€äŸ¿å©ãªããŒã«ã§ããå»å¹Žã® v2.0 ã®ã¢ããããŒãã«ãããã»ãŒããããš gist ãå¿åã§äœã£ãŠãããŠãªã³ã¯ãçæããããªã©ã®äŸ¿å©æ©èœãä»ããŸããã ãããžã§ã¯ãã® README ã«æžããŠããŸãããããŒãµã ãã§ããã°ãããªãããŒã¹ã§ãããã®ãå€ãããŸã JavaScript / CSS / æ£èŠè¡šçŸ / Handlebars ã«é¢ããŠã¯ãã©ã³ã¹ãã©ãŒã ãŸã§ã§ããããã«ãªã£ãŠããŸãã README ããæç²ãããšä»¥äžã®ãããªæãã§ãã AST Explore ã§ããŒã¹ã§ãããã® CSS: cssom csstree postcss + postcss-safe-parser & postcss-scss rework GraphQL Graphviz: redot Handlebars: glimmer handlebars HTML: htmlparser2 parse5 ICU JavaScript: acorn + acorn-jsx babel-eslint babylon espree esformatter esprima flow-parser recast shift traceur typescript typescript-eslint-parser uglify-js JSON Lua: luaparse Markdown: remark PHP php-parser Regular Expressions: regexp-tree Scala Scalameta SQL: sqlite-parser WebIDL YAML å®éšçã ã£ãããããã©ããŒã¹ã§ãããã® ES6: arrow functions, destructuring, classes, ⊠ES7 proposals: async/await, object rest / spread, ⊠JSX Typed JavaScript Flow and TypeScript SASS ããŒã¹ãããã®ããã©ã³ã¹ãã©ãŒã ã§ãããã® JavaScript babel (v5, v6) ESLint (v1, v2, v3) jscodeshift tslint CSS postcss Regular Expressions regexp-tree Handlebars glimmer AST Explore ã®äœ¿ãæ¹ã®ç°¡åãªè§£èª¬ ãµã€ãã«ã¢ã¯ã»ã¹ãããšãã®ãããªç»é¢ã«ãªã£ãŠããã¯ãã§ãã ã¡ã€ã³ç»é¢ JavaScript ã«ãã©ãŒã«ã¹ããŠè§£èª¬ããŠãããŸããšãå·Šãã€ã³ã AST ã«å€æããããœãŒã¹ã³ãŒããå³ãã€ã³ã倿åŸã® AST ãããªãŒæ§é ã§èŠããŠããŸãã åæè¡šç€ºæã«ãå·Šãã€ã³ã®ãœãŒã¹ã³ãŒããã¯ãªãã¯ãããšè©²åœç®æã® AST ããªãŒãå±éããŠãã€ã©ã€ãããŸãããŸãå³ãã€ã³ããã€ã³ããããšãœãŒã¹ã³ãŒãã®è©²åœç®æããã€ã©ã€ãããŸãããäºãã®é¢ä¿ãåããããã仿§ã«ãªã£ãŠããŸãã æ¬æ¥ JavaScript AST ã§çæããããã®ã¯ JSON ãªããžã§ã¯ãã«ãªããŸãããå³ãã€ã³ã®äžã® Tree ãš JSON ã®ã¿ããåããããããšã«ãã£ãŠ AST ã®è¡šç€ºã倿Žããããšãã§ããŸãã ããããŒéšå ããããŒã«è²ã
ãªæ©èœããŸãšãŸã£ãŠããŸãã åæè¡šç€ºã§ã¯ä»¥äžã®ããã«ãªã£ãŠããã¯ãã§ãã Snippet ä¿ã«ãããã¡ã€ã«ã¡ãã¥ãŒã æ°èŠäœæã»(gist ãžã®)ã»ãŒãã»(gist ã®)ãã©ãŒã¯ã»ã·ã§ã¢ããã JavaScript ããŒã¹ããèšèªéžæ ããã§ AST ã«ãããèšèªãåãæ¿ãã éžãã èšèªã«ãã£ãŠ Transform ã䜿ããªããªã acorn ããŒãµéžæ åèšèªã®ããŒãµãåãæ¿ãã Transform ãã©ã³ã¹ãã©ãŒãéžæ éžæããèšèªã«ãã©ã³ã¹ãã©ãŒããããã°éžæã§ããããã«ãªã ãã¡ããéžæãããš 2 ãã€ã³ã ã£ãã®ã 4 ãã€ã³ã«ãªã(åŸè¿°) default ãœãŒã¹ã³ãŒããªã©ãæžããšãã®ããŒãã€ã³ãéžæ default / Vim / Emacs / Sublime ã® 4 çš®é¡ããã ãããã¿ããããŸã ? ãã«ã GitHub ã® README ã«é£ã°ãããã ãã§ã⊠JavaScript ã®ãã©ã³ã¹ãã©ãŒã å
çšèª¬æãããã©ã³ã¹ãã©ãŒã ãéžã¶ãšãã¡ã€ã³ã®ç»é¢ã 4 ç»é¢ã«ãªããŸãã ä»ãŸã§ã® ãœãŒã¹ã³ãŒã ãš AST ããªãŒ ã¯å€ãããŸããããäžã« 2 ã€ãã€ã³ã远å ãããŸãã å·Šäžããã©ã³ã¹ãã©ãŒãã³ãŒããå³äžããã©ã³ã¹ãã©ãŒã ããåŸã®ãœãŒã¹ã³ãŒããšãªã£ãŠããŸãã å·Šäžã®ãã©ã³ã¹ãã©ãŒããè²ã
è§Šã£ãŠãããšå·Šäžã®ãœãŒã¹ã³ãŒãã倿ãããŠãå³äžã«è¡šç€ºããããšããæµãã§ããã ä»¥äž JavaScript ã³ãŒãã®ãã©ã³ã¹ãã©ãŒã ããéã® Tips ã§ã jscodeshift ãéžæãããš Ctrl + Space ã§ jscodeshift ã®è£å®ãå¹ãããã«ãªããŸã babel-plugin-macro ãéžã¶ãšãã©ã³ã¹ãã©ãŒãã®ã³ãŒãèªäœããã®ãŸãŸ babel-plugin ãšããŠäœ¿ããããã«ãªãã®ã§ããã©ã°ã€ã³äœããšãã«æãã¯ãã§ã ãŸãšã åŸã§åå ã¡ã³ããŒã«èããŠã¿ãŸããããäŒãããã£ãããšã¯ãã¡ãããšäŒãã£ãŠããæ§åã ã£ãã®ã§å®å¿ããŸãããæåŸã® Vue.js ã® v1 ãã v2 ã®ãã€ã°ã¬ãŒã·ã§ã³ã®ãã¢ã¯ç޹ä»ããçµæãJavaScript AST 䟿å©ãããšããæè§Šã«ãªã£ããšæããŸãã çŸåšåŒç€Ÿã®ãããã¯ãã§ãJavaScript AST ãã¬ãããªãšäœ¿ããããªãããžã§ã¯ãã¯ãªãã®ã§ãããBabel ãªã©ã¯å
šãããã¯ãã§äœ¿çšããŠãããçµæ§ãã©ã°ã€ã³ãå€çšããŠãããšãããããã®ã§ããããšãããšãã®åºç€ç¥èãšããŠèŠããŠãããŠæã¯ãªãã¯ãã§ãã ãããã£ãéšåã®ååŒ·ãæ¬ ãããç¶ããŠãããããšæ¹ããŠæãæ©äŒã«ããªããŸããã åŒç€Ÿã®éçºæåãªã©æ°ã«ãªãæ¹ã¯ããã¡ãããã©ããã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ã¿ãªãããããã«ã¡ã¯ãéçºæ¬éšãšã³ãžãã¢ã®å¹³æšã§ãããã¡ãã®ããã°ã®æçš¿èªäœã¯ã»ãŒ 1 幎ã¶ãã«ãªããããªå¢ãã§ãããã¿ãªããŸãå
æ°ã§ãããã? åŒç€Ÿã§å®æçã«éå¬ããŠã瀟å
ååŒ·äŒ TechLunch ã§èªåã®é çªãåã£ãŠãããããã©ãããããè¿·ã£ãæ«ã« JavaScript AST ããšã¯ãã ãšããçºè¡šãããã®ã§ããã®ããšã«ã€ããŠæžããŠãããŸãã ãªã JavaScript AST ã«ã€ããŠè©±ãããšæã£ãã®ã çŸåšãåŒç€Ÿã®ãšã³ãžãã¢ã¡ã³ããŒã®ããã¯ã°ã©ãŠã³ãã§äžçªå€æ°æŽŸãªã®ã¯ãå
ãµãŒããµã€ããšã³ãžãã¢ãã§ãããã¡ãããæ¥åã§ã¯ãµãŒããµã€ãã»ããã³ããšã³ãã»ãã€ãã£ãã¢ããªãšããã¯ã°ã©ãŠã³ãã«é¢ããããå¿
èŠã«å¿ããŠåãéãŠãªãéçºããŠããŸãã ãšã¯ãããã¡ãããšãµãŒãã¹éçºèªäœã¯ã§ãããšããŠãããã¯ãåŸæãªåé以å€ã§åºæ¬åçãªã©å«ããŠææ¡ããŠéçºã§ããããšãããšãã¡ãã£ãšé£ãããšããããããŸãããããããããã£ãåºæ¬åçãªãããç¥ã£ãŠãããšããã®èšèªãããŒã«ãªã©ã®çè§£ãæãã®ã¯ç¢ºãã§ãããã ãããªäžãåŒç€Ÿã§éçºããŠãã人éãã»ãŒå
šãŠæ©æµãåããŠããã¯ããªã®ã«ãå
·äœçã«ã©ããªé¢šã«åããŠããã®ããäžçªåããã«ããã§ããã Babel ã²ããŠã¯ JavaScript AST ã®è©±ããããããŸãè峿ã£ãŠè©±ãèããŠãããããªãŒãšããããšã§ã§ãã®ããŒããéžãã æ¬¡ç¬¬ã§ãã ã©ã®ããã«äŒããã èªå㯠JavaScript AST ã«ã€ããŠãšãŠã詳ããããã§ã¯ãªãã®ã§ããã以åä»äºã§ acorn ã䜿ã£ãŠã³ã³ããŒã¿ã¿ãããªã®ãäœã£ããããŠããã®ã§ããããªãã«èå³ã¯æã£ãŠãããšãã人éã§ãã ã§ãã®ã§ãã©ããã£ãŠç޹ä»ããããããšæ©ãã çµæãã»ãŒå
šé¢çã« AST Explore ã«é Œã£ãŠãããšããã¹ã¿ã€ã«ã«ããŸãããAST Explore ã¯æ¬åœã«æé«ã§ãããåè¿°ã®ä»äºãããŠãããšãã¯ãããªäŸ¿å©ãªããŒã«ã¯ãªãã£ããã§ãã²ããã AST ã«å€æããã³ãŒãæžããŠã¯åºæ¥ã AST ãèŠãŠãããããã©ã³ã¹ãã©ãŒã ãããŠçµæãšçšãã£ãããŠè©Šè¡é¯èª€ãããšããæ¯æ¥ã§ããã ãšããããšã§ãåœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã«ãªããŸãã ã¹ã©ã€ãã§ç޹ä»ãããã¢ã¯ãããããã¡ãã«ãªããŸãã https://astexplorer.net/#/gist/82742676286b2dced595ce36cdeb8aae/latest https://astexplorer.net/#/gist/52d871c2f3a8d9cefc68d17badf4f165/latest ä»åäŒãããã£ãããš ãŸããAST ã JavaScript ã®çºå±ã«ãšãŠãå¯äžããŠãããã®ã ãšããããšãç¥ã£ãŠãããããã£ããããJavaScript AST ã®ä»ãŸã§ã®ç°¡åãªæµãããçŸåšã©ã®ãããªåœ¢ã§äœ¿ãããŠããã®ãã®èª¬æãããŸããã(å人çã« Node.js ã®èªçãš JavaScript AST ã®ååšãçŸåšã®ããã³ããšã³ãã®çºå±ã«ãšãŠãéèŠã ãšæã£ãŠããã®ã§) æåã®ãã¡ã¯èããŠã人ããäœã®è©±ãªãã ãâŠãæããããŸãããããã¯ãå®éã«èªåã䜿ã£ãŠããããŒã«ãªã©ã«äœ¿ãããŠãããšãã説æãããããšã ãšãèããŠããã¡ã³ããŒãä¿ç¶èå³ãåºãŠãããšããé°å²æ°ã«ãªã£ãæ°ãããŸã(åœç€Ÿæ¯)ã AST ã®ææ³ãªã©ã¯èªåã説æããããã¯ãã¡ãããšè³æãæã£ãŠããã®ã§å¿
èŠãªéšå以å€ç°¡ç¥åããŸãããéã«ã¡ãã£ãšç«¯æãããããããããããŸãããèå³ãæã£ããšãã«äœãšãªãã§ã調ã¹ãéæšãããã«ã¯ãªãããªãšèããŠããŸãã æ¬¡ã«ç¥ã£ãŠãããããã£ãã®ã¯ãããããšæãã° Babel ã®ãã©ã°ã€ã³ãªããã AST ã§äœãã¡ãããŸãããšããããšã§ãããä»®ã«ãããªããBabel ãã©ã°ã€ã³äœããŸãããããšãªã£ããšããŠãæ£çŽããŸããã³ãšæ¥ãªããšæããŸãããã©ãããåçã§ãããã¯ããåããŠããã®ã?ãåãããšã babel-handbook ãªã©ãèªãã§ãçè§£ãé²ãã®ã§ã¯ãªãããšæããŸãã AST Explore ã®ããš ãã®ããã«ä»åã®çºè¡šã§å
šé¢çã«æŽ»èºãã AST Explore ã§ãããTechLunch äžã§ã軜ã説æã ãã§äœ¿ã£ãŠããŸã£ãã®ã§ã䜿ããããªã©ç°¡åã«ã玹ä»ããŠãããŸãã AST Explore ãšã¯ AST Explore 㯠Felix Kling ãããã2014 幎é ããéçºããŠãããããã¯ãã§ãã äœè«ã§ãããFelix ããã¯çŸåš Facebook ã§åããŠããã£ãããããã§ã facebook/jscodeshift ã reactjs/react-docgen ãªããã®éçºã«ãæºãã£ãŠããã£ãããæš¡æ§ã(react-docgen 㯠babylon ã䜿ã£ãŠããããã§ãã) ãããŸã§æžããŠããéãã«ããã®ããŒã«ã¯è²ã
ãªèšèªãã³ããããã ãã§ AST ãããªãŒåœ¢åŒã§åããããã衚瀺ãããããã©ã³ã¹ãã©ãŒã ãããããšãã§ããããããšãã AST ãè§Šãã«ã¯å€§å€äŸ¿å©ãªããŒã«ã§ããå»å¹Žã® v2.0 ã®ã¢ããããŒãã«ãããã»ãŒããããš gist ãå¿åã§äœã£ãŠãããŠãªã³ã¯ãçæããããªã©ã®äŸ¿å©æ©èœãä»ããŸããã ãããžã§ã¯ãã® README ã«æžããŠããŸãããããŒãµã ãã§ããã°ãããªãããŒã¹ã§ãããã®ãå€ãããŸã JavaScript / CSS / æ£èŠè¡šçŸ / Handlebars ã«é¢ããŠã¯ãã©ã³ã¹ãã©ãŒã ãŸã§ã§ããããã«ãªã£ãŠããŸãã README ããæç²ãããšä»¥äžã®ãããªæãã§ãã AST Explore ã§ããŒã¹ã§ãããã® CSS: cssom csstree postcss + postcss-safe-parser & postcss-scss rework GraphQL Graphviz: redot Handlebars: glimmer handlebars HTML: htmlparser2 parse5 ICU JavaScript: acorn + acorn-jsx babel-eslint babylon espree esformatter esprima flow-parser recast shift traceur typescript typescript-eslint-parser uglify-js JSON Lua: luaparse Markdown: remark PHP php-parser Regular Expressions: regexp-tree Scala Scalameta SQL: sqlite-parser WebIDL YAML å®éšçã ã£ãããããã©ããŒã¹ã§ãããã® ES6: arrow functions, destructuring, classes, ⊠ES7 proposals: async/await, object rest / spread, ⊠JSX Typed JavaScript Flow and TypeScript SASS ããŒã¹ãããã®ããã©ã³ã¹ãã©ãŒã ã§ãããã® JavaScript babel (v5, v6) ESLint (v1, v2, v3) jscodeshift tslint CSS postcss Regular Expressions regexp-tree Handlebars glimmer AST Explore ã®äœ¿ãæ¹ã®ç°¡åãªè§£èª¬ ãµã€ãã«ã¢ã¯ã»ã¹ãããšãã®ãããªç»é¢ã«ãªã£ãŠããã¯ãã§ãã ã¡ã€ã³ç»é¢ JavaScript ã«ãã©ãŒã«ã¹ããŠè§£èª¬ããŠãããŸããšãå·Šãã€ã³ã AST ã«å€æããããœãŒã¹ã³ãŒããå³ãã€ã³ã倿åŸã® AST ãããªãŒæ§é ã§èŠããŠããŸãã åæè¡šç€ºæã«ãå·Šãã€ã³ã®ãœãŒã¹ã³ãŒããã¯ãªãã¯ãããšè©²åœç®æã® AST ããªãŒãå±éããŠãã€ã©ã€ãããŸãããŸãå³ãã€ã³ããã€ã³ããããšãœãŒã¹ã³ãŒãã®è©²åœç®æããã€ã©ã€ãããŸãããäºãã®é¢ä¿ãåããããã仿§ã«ãªã£ãŠããŸãã æ¬æ¥ JavaScript AST ã§çæããããã®ã¯ JSON ãªããžã§ã¯ãã«ãªããŸãããå³ãã€ã³ã®äžã® Tree ãš JSON ã®ã¿ããåããããããšã«ãã£ãŠ AST ã®è¡šç€ºã倿Žããããšãã§ããŸãã ããããŒéšå ããããŒã«è²ã
ãªæ©èœããŸãšãŸã£ãŠããŸãã åæè¡šç€ºã§ã¯ä»¥äžã®ããã«ãªã£ãŠããã¯ãã§ãã Snippet ä¿ã«ãããã¡ã€ã«ã¡ãã¥ãŒã æ°èŠäœæã»(gist ãžã®)ã»ãŒãã»(gist ã®)ãã©ãŒã¯ã»ã·ã§ã¢ããã JavaScript ããŒã¹ããèšèªéžæ ããã§ AST ã«ãããèšèªãåãæ¿ãã éžãã èšèªã«ãã£ãŠ Transform ã䜿ããªããªã acorn ããŒãµéžæ åèšèªã®ããŒãµãåãæ¿ãã Transform ãã©ã³ã¹ãã©ãŒãéžæ éžæããèšèªã«ãã©ã³ã¹ãã©ãŒããããã°éžæã§ããããã«ãªã ãã¡ããéžæãããš 2 ãã€ã³ã ã£ãã®ã 4 ãã€ã³ã«ãªã(åŸè¿°) default ãœãŒã¹ã³ãŒããªã©ãæžããšãã®ããŒãã€ã³ãéžæ default / Vim / Emacs / Sublime ã® 4 çš®é¡ããã ãããã¿ããããŸã ? ãã«ã GitHub ã® README ã«é£ã°ãããã ãã§ã⊠JavaScript ã®ãã©ã³ã¹ãã©ãŒã å
çšèª¬æãããã©ã³ã¹ãã©ãŒã ãéžã¶ãšãã¡ã€ã³ã®ç»é¢ã 4 ç»é¢ã«ãªããŸãã ä»ãŸã§ã® ãœãŒã¹ã³ãŒã ãš AST ããªãŒ ã¯å€ãããŸããããäžã« 2 ã€ãã€ã³ã远å ãããŸãã å·Šäžããã©ã³ã¹ãã©ãŒãã³ãŒããå³äžããã©ã³ã¹ãã©ãŒã ããåŸã®ãœãŒã¹ã³ãŒããšãªã£ãŠããŸãã å·Šäžã®ãã©ã³ã¹ãã©ãŒããè²ã
è§Šã£ãŠãããšå·Šäžã®ãœãŒã¹ã³ãŒãã倿ãããŠãå³äžã«è¡šç€ºããããšããæµãã§ããã ä»¥äž JavaScript ã³ãŒãã®ãã©ã³ã¹ãã©ãŒã ããéã® Tips ã§ã jscodeshift ãéžæãããš Ctrl + Space ã§ jscodeshift ã®è£å®ãå¹ãããã«ãªããŸã babel-plugin-macro ãéžã¶ãšãã©ã³ã¹ãã©ãŒãã®ã³ãŒãèªäœããã®ãŸãŸ babel-plugin ãšããŠäœ¿ããããã«ãªãã®ã§ããã©ã°ã€ã³äœããšãã«æãã¯ãã§ã ãŸãšã åŸã§åå ã¡ã³ããŒã«èããŠã¿ãŸããããäŒãããã£ãããšã¯ãã¡ãããšäŒãã£ãŠããæ§åã ã£ãã®ã§å®å¿ããŸãããæåŸã® Vue.js ã® v1 ãã v2 ã®ãã€ã°ã¬ãŒã·ã§ã³ã®ãã¢ã¯ç޹ä»ããçµæãJavaScript AST 䟿å©ãããšããæè§Šã«ãªã£ããšæããŸãã çŸåšåŒç€Ÿã®ãããã¯ãã§ãJavaScript AST ãã¬ãããªãšäœ¿ããããªãããžã§ã¯ãã¯ãªãã®ã§ãããBabel ãªã©ã¯å
šãããã¯ãã§äœ¿çšããŠãããçµæ§ãã©ã°ã€ã³ãå€çšããŠãããšãããããã®ã§ããããšãããšãã®åºç€ç¥èãšããŠèŠããŠãããŠæã¯ãªãã¯ãã§ãã ãããã£ãéšåã®ååŒ·ãæ¬ ãããç¶ããŠãããããšæ¹ããŠæãæ©äŒã«ããªããŸããã åŒç€Ÿã®éçºæåãªã©æ°ã«ãªãæ¹ã¯ããã¡ãããã©ããã ã¡ã³ããŒã®ã¹ããŒãªãŒ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ã³ããŒã®ã¹ããŒãªãŒ å®¶æãå人ãç
æ°ã«ãªã£ãæã«æãã®æãå·®ãã®ã¹ãå»çã®åã... www.medley.jp
ããã«ã¡ã¯ïŒéçºæ¬éšã®ãšã³ãžãã¢ã»åŸè€ã§ãã ã¡ãã¬ãŒã¯ 5/31ã6/2 ã«éå¬ããã RurbyKaigi 2018 ã« Lightning Talks Sponsor ãšããŠåè³ãããŠããã ããŸããïŒ æšå¹Ž ã® Ruby Sponsor ã«ç¶ãã2 幎ç®ã®åè³ã§ãïŒã ã€ãã³ãåœæ¥ã¯ãåŒç€Ÿãã CTO ã®å¹³å±±ãæ¡çšã»åºå ±ã®é¿éšãšæ·±æŸ€ããšã³ãžãã¢ã®ç°äžã宿žãåŸè€ã® 6 人ãåå ããŸãããä»åã¯ãã®æ§åãªã©ãã¬ããŒãããŸãã äŒå Žã®æ§å RubyKaigi 2018 㯠ä»å°åœéã»ã³ã¿ãŒ ã§ã®éå¬ã§ãããæšå¹Žã¯ åºå³¶ ãäžæšå¹Žã¯ äº¬éœ ãšããããšã§ãããã§å€©æ©ç«ã»å®®å³¶ã»æŸå³¶ã®æ¥æ¬äžæ¯ããããæ
ãäžæŠå®çµã«ãªããŸããã ä»å°åœéã»ã³ã¿ãŒã¯ä»å°é§
ããå°äžéæ±è¥¿ç·ã§ 3 é§
ç®ãšããã¢ã¯ã»ã¹ã®è¯ã奜ç«å°ã«ãããªããç·ã«å²ãŸããå¿å°ããå Žæã«ãããŸããã ã¡ã€ã³äŒå Žã¯ 1000 人å容ã§ããåºãäŒå Žã«ãªã£ãŠããŸããåã»ãã·ã§ã³ããã®äŒå ŽãåãŸããããã®çæ³ã¶ãã§ããã äžçå°å³&æ¥æ¬å°å³ãæ§ã
ãªå°åããã®åå è
ãããŸããïŒïŒrubyists ã« map ã¡ãœãããããŸããŠãŸããããããã¯å
容ã¯ååå è
ãã·ãŒã«ã貌ã£ãŠå®è£
ãïŒ å°å³ã®é£ã®ã¹ãã³ãµãŒããŒã芧ã«ã¡ãã¬ãŒããŽãããããšã確èªããŠãã·ã£ãã ããŒã¹ã®æ§å ç¶ããŠããŒã¹ã®æ§åã玹ä»ããŸããã¡ãã¬ãŒã³ãŒãã¬ãŒãã«ã©ãŒã®èµ€ãããŒã¹ãšãã以äžãªæãã®ä»äžããã«ãªããŸããã All photographs will be uploaded to this URLs(google photo). day1 https://t.co/w6Dgq8HBb4 day2 https://t.co/X1x03bFEDF day3 https://t.co/8rlXpfZTEB See you next year! #RubyKaigi #RubyKaigi2018 â nil (@KatsumaNarisawa) June 2, 2018 ããã«ãã£ãçšæããŠããŒã¹ã«ãè¶ãããã ããæ¹ã«ãé
ãããŠããŸãããã¹ããã«ãŒããã¡ãããã³ãã¬ããã«å ããŠå»çããããäŒããçµåµèãçšæããŸããã ããŒã¹ã«ã¯ãããããŸã§ãããããã®æ¹ã«ãè¶ãããã ããŸããïŒ CTO 平山ã®çºè¡š ãããŠãåæ¥ã® Lightning Talks åã®ã¹ãã³ãµãŒã® PR æ ã«ãŠåŒç€Ÿã® CTO 平山ãçºè¡šãããŸããã çºè¡šã§ã¯ããå»çãã«ã¹ã±ã¢åéã®èª²é¡ã解決ããããšããããã·ã§ã³ã®ããšã¡ãã¬ãŒã 4 ã€ã®äºæ¥ãè¡ã£ãŠããããšããŸããä»¥å æ¬ããã°ã§çŽ¹ä» ããŸãã 3 æ¬ã®ãã¥ãŒã¹ãªãªãŒã¹ãå«ãããã® 1 幎ã®ã¢ããããŒãå
容ãäžå¿ã«ç޹ä»ãããŠããã ããŸããã å
¬æŒã®éäžã§ã® CTO 平山ããã¡ãã¬ãŒã®ããšãç¥ã£ãŠãã人ïŒãšã®åãããã§ã7ã» 8 å²ã®æ¹ãææãããŠããã®ã¯ææ
šæ·±ãã£ãã§ãã åœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã§ãã çŸå°ã§ã®åå¿ ããŒã¹å±ç€ºãPR æ ã§ã®çºè¡šãéããŠä»¥äžã®ãããªå¬ããåå¿ãããã ããŸããïŒ ãªã³ã©ã€ã³èšºçã¯ãã£ãšæ®åãã¹ãã§ãããå°æ¹å»çã®èª²é¡è§£æ±ºã«ãç¹ããçŽ æŽãããåãçµã¿ã ãšæãã #rubikaigi2018 #rubykaigi #ã¡ãã¬ãŒ â ãµãã / SHOWROOM ã®äººäºããããã (@yufujikochan) May 31, 2018 [https://twitter.com/yucao24hours/status/1002105819297595392:embed] æå
ãåã£ãŠããŸã£ããã©çµåµèãããã«ãã£ã§é
ã£ãŠãããå®å¿ #rubykaigi pic.twitter.com/NeXWfTif6m â Motonori Iwata (@mobcov) June 1, 2018 ããŒã¹ã§ãã2 æ¥ç®ä»¥éã1 æ¥ç®ã®ã»ãã·ã§ã³èŠãŸããããŒããšè©±ããŠãã ããæ¹ãå€ããã¡ãã¬ãŒãšãã®ãããã¯ãã«ã€ã㊠Rubyist ã®çæ§ã«ç¥ã£ãŠããã ããšãŠãè¯ãæ©äŒã«ãªã£ãŠãããšæããŸããã ã»ãã·ã§ã³ã®æ§å ãšã³ãžãã¢ã¯ããŒã¹ã§ã®äŒç€Ÿç޹ä»ã®åéã«åèªæ°ã«ãªã£ãã»ãã·ã§ã³ãèŽè¬ããããããŸããã æèŠã§ãã mruby ãåãããã©ãŒãã³ã¹åšãã®è©±é¡ãå€ãã£ãããã«æããŸãããŸãã« 2018 幎çŸåšã® Ruby ãåãå·»ãç°å¢ã衚ããŠããæããããŸãããšã³ãžãã¢ãšããŠãããã£ãæè¡ã®ã»ãã·ã§ã³ãèããã®ã¯çŽç²ã«æ¥œããã§ãããæ¥ã
ã®éçºã«æŽ»ãããããªãã¿ããã£ãããšããšãŠãææçŸ©ãªæéãéãããŸããã åæ¥ã® keynote ã§ã® 1 ã³ãã Matz ããã® keynote ã«ããããŸãããäœäºããå¡ç¿ã銬ãã§ããæ¯å¹Ž Ruby ã¯æ»ã«ããããŠçãŸãå€ãããŸãïŒã¯ãªã¹ãã¹ã«ïŒãRuby ãåžžã«é²åããŠããããšãèã§æããããšã®ã§ããã»ãã·ã§ã³çŸ€ã§ããã çªå€ç·š ããŠãã¡ãã¬ãŒæäŸïŒïŒïŒã®ãåãã§ããä»åã¯å€§åŽå
«å¹¡å®®ã«åè©£ããããšã«ãªããŸããã 倧åŽå
«å¹¡å®®ã®ç€Ÿæ®¿ã¯åœå®ã«ãæå®ãããŠãããå®åæ¡å±±æä»£ã®è±ªè¯çµ¢çãªæ§åŒã®å»ºç¯ã§ãšãŠãé°å²æ°ã®ããç¥ç€Ÿã§ããã åæãã 3 人ã åæãã 2 人ãšãããæ®åœ±ãã 2 人ã ãããã« æšå¹Žã«åŒãç¶ãã¡ãã¬ãŒã® RubyKaigi åè³ã¯ 2 床ç®ã«ãªããŸããã ããŒã¹ã§äŒç€Ÿããããã¯ãã®èª¬æããŠãããšãã¡ãã¬ãŒç¥ã£ãŠãŸãããšã®å£°ãèãæ©äŒãå€ãããšãŠãå¬ããéãã§ããããããŸã§ä»¥äžã« Rubyãå»ç ÃIT ãçãäžããŠãããã°ãšããæ°æã¡ãèžã«ä»å°ãåŸã«ããŸããã ïŒæ°å¹¹ç·ããä»å°ã®å€çŒãããã·ã£ãªïŒ ãç¥ãã åŒç€Ÿã§ã¯ãå»ç x IT ãžã®ææŠãã«åãçµã¿ãããšã³ãžãã¢ã®ã¿ãªãããå¿ãããåŸ
ã¡ããŠãããŸãïŒ èå³ãããæ¹ã¯ããã¡ãã®ã話ãèããŠã¿ããããããé£çµ¡ãã ããã About æ ªåŒäŒç€Ÿã¡ãã¬ãŒ - Wantedly You can read employee interviews and the latest company's initiative of æ ªåŒäŒç€Ÿã¡ãã¬ãŒ. æ¥éãªé«éœ¢åãå»çè²»ã®é«éš°ãå»ççŸå Žã®ç²åŒãå«ã°ããäžã§ããã®ãŸãŸã§ã¯å®¶èšã倧ããå§è¿«ããŠæ¯ããããªããªããæ¥æ¬ã®å»çã¯åŽ©å£ããŠããŸããŸãããã®ç¶æ
ãè§£æ¶ããããã®éµããå»ççŸå Žã«ãããã¯ã©ãŠã掻çšãé§äœ¿ããæ¥åå¹çåãã§ãã ãããæ¥æ¬ã§ã¯ã忰以äžã®å»çæ©é¢ãããŸã ã«çŽã«ã«ããå©çšããŠãããªã©ãã¯ã©ãŠãåã¯çãããžã¿ã«æŽ»çšãé²ãã§ããªãã®ãçŸç¶ã§ããç§ãã¡ã¯ãã¯ãããžãŒã掻çšããäºæ¥ããããžã§ã¯ããéããŠãå»çãã«ã¹ã±ã¢åéã®ããžã¿ã«æŽ»çšãæšé²ããæ¥æ¬ã®æªæ¥ãäœãããã®åãçµã¿ãè¡ã£ãŠãããŸãã www.wantedly.com éçºæ¬éšã®é°å²æ°ããã£ãšç¥ãããæ¹ã¯ããã¡ãããã©ããã https://www.medley.jp/recruit/creative.html
ããã«ã¡ã¯ïŒéçºæ¬éšã®ãšã³ãžãã¢ã»åŸè€ã§ãã ã¡ãã¬ãŒã¯ 5/31ã6/2 ã«éå¬ããã RurbyKaigi 2018 ã« Lightning Talks Sponsor ãšããŠåè³ãããŠããã ããŸããïŒ æšå¹Ž ã® Ruby Sponsor ã«ç¶ãã2 幎ç®ã®åè³ã§ãïŒã ã€ãã³ãåœæ¥ã¯ãåŒç€Ÿãã CTO ã®å¹³å±±ãæ¡çšã»åºå ±ã®é¿éšãšæ·±æŸ€ããšã³ãžãã¢ã®ç°äžã宿žãåŸè€ã® 6 人ãåå ããŸãããä»åã¯ãã®æ§åãªã©ãã¬ããŒãããŸãã äŒå Žã®æ§å RubyKaigi 2018 㯠ä»å°åœéã»ã³ã¿ãŒ ã§ã®éå¬ã§ãããæšå¹Žã¯ åºå³¶ ãäžæšå¹Žã¯ äº¬éœ ãšããããšã§ãããã§å€©æ©ç«ã»å®®å³¶ã»æŸå³¶ã®æ¥æ¬äžæ¯ããããæ
ãäžæŠå®çµã«ãªããŸããã ä»å°åœéã»ã³ã¿ãŒã¯ä»å°é§
ããå°äžéæ±è¥¿ç·ã§ 3 é§
ç®ãšããã¢ã¯ã»ã¹ã®è¯ã奜ç«å°ã«ãããªããç·ã«å²ãŸããå¿å°ããå Žæã«ãããŸããã ã¡ã€ã³äŒå Žã¯ 1000 人å容ã§ããåºãäŒå Žã«ãªã£ãŠããŸããåã»ãã·ã§ã³ããã®äŒå ŽãåãŸããããã®çæ³ã¶ãã§ããã äžçå°å³&æ¥æ¬å°å³ãæ§ã
ãªå°åããã®åå è
ãããŸããïŒïŒrubyists ã« map ã¡ãœãããããŸããŠãŸããããããã¯å
容ã¯ååå è
ãã·ãŒã«ã貌ã£ãŠå®è£
ãïŒ å°å³ã®é£ã®ã¹ãã³ãµãŒããŒã芧ã«ã¡ãã¬ãŒããŽãããããšã確èªããŠãã·ã£ãã ããŒã¹ã®æ§å ç¶ããŠããŒã¹ã®æ§åã玹ä»ããŸããã¡ãã¬ãŒã³ãŒãã¬ãŒãã«ã©ãŒã®èµ€ãããŒã¹ãšãã以äžãªæãã®ä»äžããã«ãªããŸããã All photographs will be uploaded to this URLs(google photo). day1 https://t.co/w6Dgq8HBb4 day2 https://t.co/X1x03bFEDF day3 https://t.co/8rlXpfZTEB See you next year! #RubyKaigi #RubyKaigi2018 â nil (@KatsumaNarisawa) June 2, 2018 ããã«ãã£ãçšæããŠããŒã¹ã«ãè¶ãããã ããæ¹ã«ãé
ãããŠããŸãããã¹ããã«ãŒããã¡ãããã³ãã¬ããã«å ããŠå»çããããäŒããçµåµèãçšæããŸããã ããŒã¹ã«ã¯ãããããŸã§ãããããã®æ¹ã«ãè¶ãããã ããŸããïŒ CTO 平山ã®çºè¡š ãããŠãåæ¥ã® Lightning Talks åã®ã¹ãã³ãµãŒã® PR æ ã«ãŠåŒç€Ÿã® CTO 平山ãçºè¡šãããŸããã çºè¡šã§ã¯ããå»çãã«ã¹ã±ã¢åéã®èª²é¡ã解決ããããšããããã·ã§ã³ã®ããšã¡ãã¬ãŒã 4 ã€ã®äºæ¥ãè¡ã£ãŠããããšããŸããä»¥å æ¬ããã°ã§çŽ¹ä» ããŸãã 3 æ¬ã®ãã¥ãŒã¹ãªãªãŒã¹ãå«ãããã® 1 幎ã®ã¢ããããŒãå
容ãäžå¿ã«ç޹ä»ãããŠããã ããŸããã å
¬æŒã®éäžã§ã® CTO 平山ããã¡ãã¬ãŒã®ããšãç¥ã£ãŠãã人ïŒãšã®åãããã§ã7ã» 8 å²ã®æ¹ãææãããŠããã®ã¯ææ
šæ·±ãã£ãã§ãã åœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã§ãã çŸå°ã§ã®åå¿ ããŒã¹å±ç€ºãPR æ ã§ã®çºè¡šãéããŠä»¥äžã®ãããªå¬ããåå¿ãããã ããŸããïŒ ãªã³ã©ã€ã³èšºçã¯ãã£ãšæ®åãã¹ãã§ãããå°æ¹å»çã®èª²é¡è§£æ±ºã«ãç¹ããçŽ æŽãããåãçµã¿ã ãšæãã #rubikaigi2018 #rubykaigi #ã¡ãã¬ãŒ â ãµãã / SHOWROOM ã®äººäºããããã (@yufujikochan) May 31, 2018 [https://twitter.com/yucao24hours/status/1002105819297595392:embed] æå
ãåã£ãŠããŸã£ããã©çµåµèãããã«ãã£ã§é
ã£ãŠãããå®å¿ #rubykaigi pic.twitter.com/NeXWfTif6m â Motonori Iwata (@mobcov) June 1, 2018 ããŒã¹ã§ãã2 æ¥ç®ä»¥éã1 æ¥ç®ã®ã»ãã·ã§ã³èŠãŸããããŒããšè©±ããŠãã ããæ¹ãå€ããã¡ãã¬ãŒãšãã®ãããã¯ãã«ã€ã㊠Rubyist ã®çæ§ã«ç¥ã£ãŠããã ããšãŠãè¯ãæ©äŒã«ãªã£ãŠãããšæããŸããã ã»ãã·ã§ã³ã®æ§å ãšã³ãžãã¢ã¯ããŒã¹ã§ã®äŒç€Ÿç޹ä»ã®åéã«åèªæ°ã«ãªã£ãã»ãã·ã§ã³ãèŽè¬ããããããŸããã æèŠã§ãã mruby ãåãããã©ãŒãã³ã¹åšãã®è©±é¡ãå€ãã£ãããã«æããŸãããŸãã« 2018 幎çŸåšã® Ruby ãåãå·»ãç°å¢ã衚ããŠããæããããŸãããšã³ãžãã¢ãšããŠãããã£ãæè¡ã®ã»ãã·ã§ã³ãèããã®ã¯çŽç²ã«æ¥œããã§ãããæ¥ã
ã®éçºã«æŽ»ãããããªãã¿ããã£ãããšããšãŠãææçŸ©ãªæéãéãããŸããã åæ¥ã® keynote ã§ã® 1 ã³ãã Matz ããã® keynote ã«ããããŸãããäœäºããå¡ç¿ã銬ãã§ããæ¯å¹Ž Ruby ã¯æ»ã«ããããŠçãŸãå€ãããŸãïŒã¯ãªã¹ãã¹ã«ïŒãRuby ãåžžã«é²åããŠããããšãèã§æããããšã®ã§ããã»ãã·ã§ã³çŸ€ã§ããã çªå€ç·š ããŠãã¡ãã¬ãŒæäŸïŒïŒïŒã®ãåãã§ããä»åã¯å€§åŽå
«å¹¡å®®ã«åè©£ããããšã«ãªããŸããã 倧åŽå
«å¹¡å®®ã®ç€Ÿæ®¿ã¯åœå®ã«ãæå®ãããŠãããå®åæ¡å±±æä»£ã®è±ªè¯çµ¢çãªæ§åŒã®å»ºç¯ã§ãšãŠãé°å²æ°ã®ããç¥ç€Ÿã§ããã åæãã 3 人ã åæãã 2 人ãšãããæ®åœ±ãã 2 人ã ãããã« æšå¹Žã«åŒãç¶ãã¡ãã¬ãŒã® RubyKaigi åè³ã¯ 2 床ç®ã«ãªããŸããã ããŒã¹ã§äŒç€Ÿããããã¯ãã®èª¬æããŠãããšãã¡ãã¬ãŒç¥ã£ãŠãŸãããšã®å£°ãèãæ©äŒãå€ãããšãŠãå¬ããéãã§ããããããŸã§ä»¥äžã« Rubyãå»ç ÃIT ãçãäžããŠãããã°ãšããæ°æã¡ãèžã«ä»å°ãåŸã«ããŸããã ïŒæ°å¹¹ç·ããä»å°ã®å€çŒãããã·ã£ãªïŒ ãç¥ãã åŒç€Ÿã§ã¯ãå»ç x IT ãžã®ææŠãã«åãçµã¿ãããšã³ãžãã¢ã®ã¿ãªãããå¿ãããåŸ
ã¡ããŠãããŸãïŒ èå³ãããæ¹ã¯ããã¡ãã®ã話ãèããŠã¿ããããããé£çµ¡ãã ããã https://www.wantedly.com/companies/medley éçºæ¬éšã®é°å²æ°ããã£ãšç¥ãããæ¹ã¯ããã¡ãããã©ããã https://www.medley.jp/recruit/creative.html
ããã«ã¡ã¯ïŒéçºæ¬éšã®ãšã³ãžãã¢ã»åŸè€ã§ãã ã¡ãã¬ãŒã¯ 5/31ã6/2 ã«éå¬ããã RurbyKaigi 2018 ã« Lightning Talks Sponsor ãšããŠåè³ãããŠããã ããŸããïŒ æšå¹Ž ã® Ruby Sponsor ã«ç¶ãã2 幎ç®ã®åè³ã§ãïŒã ã€ãã³ãåœæ¥ã¯ãåŒç€Ÿãã CTO ã®å¹³å±±ãæ¡çšã»åºå ±ã®é¿éšãšæ·±æŸ€ããšã³ãžãã¢ã®ç°äžã宿žãåŸè€ã® 6 人ãåå ããŸãããä»åã¯ãã®æ§åãªã©ãã¬ããŒãããŸãã äŒå Žã®æ§å RubyKaigi 2018 㯠ä»å°åœéã»ã³ã¿ãŒ ã§ã®éå¬ã§ãããæšå¹Žã¯ åºå³¶ ãäžæšå¹Žã¯ äº¬éœ ãšããããšã§ãããã§å€©æ©ç«ã»å®®å³¶ã»æŸå³¶ã®æ¥æ¬äžæ¯ããããæ
ãäžæŠå®çµã«ãªããŸããã ä»å°åœéã»ã³ã¿ãŒã¯ä»å°é§
ããå°äžéæ±è¥¿ç·ã§ 3 é§
ç®ãšããã¢ã¯ã»ã¹ã®è¯ã奜ç«å°ã«ãããªããç·ã«å²ãŸããå¿å°ããå Žæã«ãããŸããã ã¡ã€ã³äŒå Žã¯ 1000 人å容ã§ããåºãäŒå Žã«ãªã£ãŠããŸããåã»ãã·ã§ã³ããã®äŒå ŽãåãŸããããã®çæ³ã¶ãã§ããã äžçå°å³&æ¥æ¬å°å³ãæ§ã
ãªå°åããã®åå è
ãããŸããïŒïŒrubyists ã« map ã¡ãœãããããŸããŠãŸããããããã¯å
容ã¯ååå è
ãã·ãŒã«ã貌ã£ãŠå®è£
ãïŒ å°å³ã®é£ã®ã¹ãã³ãµãŒããŒã芧ã«ã¡ãã¬ãŒããŽãããããšã確èªããŠãã·ã£ãã ããŒã¹ã®æ§å ç¶ããŠããŒã¹ã®æ§åã玹ä»ããŸããã¡ãã¬ãŒã³ãŒãã¬ãŒãã«ã©ãŒã®èµ€ãããŒã¹ãšãã以äžãªæãã®ä»äžããã«ãªããŸããã All photographs will be uploaded to this URLs(google photo). day1 https://t.co/w6Dgq8HBb4 day2 https://t.co/X1x03bFEDF day3 https://t.co/8rlXpfZTEB See you next year! #RubyKaigi #RubyKaigi2018 â nil (@KatsumaNarisawa) June 2, 2018 ããã«ãã£ãçšæããŠããŒã¹ã«ãè¶ãããã ããæ¹ã«ãé
ãããŠããŸãããã¹ããã«ãŒããã¡ãããã³ãã¬ããã«å ããŠå»çããããäŒããçµåµèãçšæããŸããã ããŒã¹ã«ã¯ãããããŸã§ãããããã®æ¹ã«ãè¶ãããã ããŸããïŒ CTO 平山ã®çºè¡š ãããŠãåæ¥ã® Lightning Talks åã®ã¹ãã³ãµãŒã® PR æ ã«ãŠåŒç€Ÿã® CTO 平山ãçºè¡šãããŸããã çºè¡šã§ã¯ããå»çãã«ã¹ã±ã¢åéã®èª²é¡ã解決ããããšããããã·ã§ã³ã®ããšã¡ãã¬ãŒã 4 ã€ã®äºæ¥ãè¡ã£ãŠããããšããŸããä»¥å æ¬ããã°ã§çŽ¹ä» ããŸãã 3 æ¬ã®ãã¥ãŒã¹ãªãªãŒã¹ãå«ãããã® 1 幎ã®ã¢ããããŒãå
容ãäžå¿ã«ç޹ä»ãããŠããã ããŸããã å
¬æŒã®éäžã§ã® CTO 平山ããã¡ãã¬ãŒã®ããšãç¥ã£ãŠãã人ïŒãšã®åãããã§ã7ã» 8 å²ã®æ¹ãææãããŠããã®ã¯ææ
šæ·±ãã£ãã§ãã åœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã§ãã çŸå°ã§ã®åå¿ ããŒã¹å±ç€ºãPR æ ã§ã®çºè¡šãéããŠä»¥äžã®ãããªå¬ããåå¿ãããã ããŸããïŒ ãªã³ã©ã€ã³èšºçã¯ãã£ãšæ®åãã¹ãã§ãããå°æ¹å»çã®èª²é¡è§£æ±ºã«ãç¹ããçŽ æŽãããåãçµã¿ã ãšæãã #rubikaigi2018 #rubykaigi #ã¡ãã¬ãŒ â ãµãã / SHOWROOM ã®äººäºããããã (@yufujikochan) May 31, 2018 [https://twitter.com/yucao24hours/status/1002105819297595392:embed] æå
ãåã£ãŠããŸã£ããã©çµåµèãããã«ãã£ã§é
ã£ãŠãããå®å¿ #rubykaigi pic.twitter.com/NeXWfTif6m â Motonori Iwata (@mobcov) June 1, 2018 ããŒã¹ã§ãã2 æ¥ç®ä»¥éã1 æ¥ç®ã®ã»ãã·ã§ã³èŠãŸããããŒããšè©±ããŠãã ããæ¹ãå€ããã¡ãã¬ãŒãšãã®ãããã¯ãã«ã€ã㊠Rubyist ã®çæ§ã«ç¥ã£ãŠããã ããšãŠãè¯ãæ©äŒã«ãªã£ãŠãããšæããŸããã ã»ãã·ã§ã³ã®æ§å ãšã³ãžãã¢ã¯ããŒã¹ã§ã®äŒç€Ÿç޹ä»ã®åéã«åèªæ°ã«ãªã£ãã»ãã·ã§ã³ãèŽè¬ããããããŸããã æèŠã§ãã mruby ãåãããã©ãŒãã³ã¹åšãã®è©±é¡ãå€ãã£ãããã«æããŸãããŸãã« 2018 幎çŸåšã® Ruby ãåãå·»ãç°å¢ã衚ããŠããæããããŸãããšã³ãžãã¢ãšããŠãããã£ãæè¡ã®ã»ãã·ã§ã³ãèããã®ã¯çŽç²ã«æ¥œããã§ãããæ¥ã
ã®éçºã«æŽ»ãããããªãã¿ããã£ãããšããšãŠãææçŸ©ãªæéãéãããŸããã åæ¥ã® keynote ã§ã® 1 ã³ãã Matz ããã® keynote ã«ããããŸãããäœäºããå¡ç¿ã銬ãã§ããæ¯å¹Ž Ruby ã¯æ»ã«ããããŠçãŸãå€ãããŸãïŒã¯ãªã¹ãã¹ã«ïŒãRuby ãåžžã«é²åããŠããããšãèã§æããããšã®ã§ããã»ãã·ã§ã³çŸ€ã§ããã çªå€ç·š ããŠãã¡ãã¬ãŒæäŸïŒïŒïŒã®ãåãã§ããä»åã¯å€§åŽå
«å¹¡å®®ã«åè©£ããããšã«ãªããŸããã 倧åŽå
«å¹¡å®®ã®ç€Ÿæ®¿ã¯åœå®ã«ãæå®ãããŠãããå®åæ¡å±±æä»£ã®è±ªè¯çµ¢çãªæ§åŒã®å»ºç¯ã§ãšãŠãé°å²æ°ã®ããç¥ç€Ÿã§ããã åæãã 3 人ã åæãã 2 人ãšãããæ®åœ±ãã 2 人ã ãããã« æšå¹Žã«åŒãç¶ãã¡ãã¬ãŒã® RubyKaigi åè³ã¯ 2 床ç®ã«ãªããŸããã ããŒã¹ã§äŒç€Ÿããããã¯ãã®èª¬æããŠãããšãã¡ãã¬ãŒç¥ã£ãŠãŸãããšã®å£°ãèãæ©äŒãå€ãããšãŠãå¬ããéãã§ããããããŸã§ä»¥äžã« Rubyãå»ç ÃIT ãçãäžããŠãããã°ãšããæ°æã¡ãèžã«ä»å°ãåŸã«ããŸããã ïŒæ°å¹¹ç·ããä»å°ã®å€çŒãããã·ã£ãªïŒ ãç¥ãã åŒç€Ÿã§ã¯ãå»ç x IT ãžã®ææŠãã«åãçµã¿ãããšã³ãžãã¢ã®ã¿ãªãããå¿ãããåŸ
ã¡ããŠãããŸãïŒ èå³ãããæ¹ã¯ããã¡ãã®ã話ãèããŠã¿ããããããé£çµ¡ãã ããã About æ ªåŒäŒç€Ÿã¡ãã¬ãŒ - Wantedly You can read employee interviews and the latest company's initiative of æ ªåŒäŒç€Ÿã¡ãã¬ãŒ. æ¥éãªé«éœ¢åãå»çè²»ã®é«éš°ãå»ççŸå Žã®ç²åŒãå«ã°ããäžã§ããã®ãŸãŸã§ã¯å®¶èšã倧ããå§è¿«ããŠæ¯ããããªããªããæ¥æ¬ã®å»çã¯åŽ©å£ããŠããŸããŸãããã®ç¶æ
ãè§£æ¶ããããã®éµããå»ççŸå Žã«ãããã¯ã©ãŠã掻çšãé§äœ¿ããæ¥åå¹çåãã§ãã ãããæ¥æ¬ã§ã¯ã忰以äžã®å»çæ©é¢ãããŸã ã«çŽã«ã«ããå©çšããŠãããªã©ãã¯ã©ãŠãåã¯çãããžã¿ã«æŽ»çšãé²ãã§ããªãã®ãçŸç¶ã§ããç§ãã¡ã¯ãã¯ãããžãŒã掻çšããäºæ¥ããããžã§ã¯ããéããŠãå»çãã«ã¹ã±ã¢åéã®ããžã¿ã«æŽ»çšãæšé²ããæ¥æ¬ã®æªæ¥ãäœãããã®åãçµã¿ãè¡ã£ãŠãããŸãã www.wantedly.com éçºæ¬éšã®é°å²æ°ããã£ãšç¥ãããæ¹ã¯ããã¡ãããã©ããã https://www.medley.jp/recruit/creative.html
ããã«ã¡ã¯ïŒéçºæ¬éšã®ãšã³ãžãã¢ã»åŸè€ã§ãã ã¡ãã¬ãŒã¯ 5/31ã6/2 ã«éå¬ããã RurbyKaigi 2018 ã« Lightning Talks Sponsor ãšããŠåè³ãããŠããã ããŸããïŒ æšå¹Ž ã® Ruby Sponsor ã«ç¶ãã2 幎ç®ã®åè³ã§ãïŒã ã€ãã³ãåœæ¥ã¯ãåŒç€Ÿãã CTO ã®å¹³å±±ãæ¡çšã»åºå ±ã®é¿éšãšæ·±æŸ€ããšã³ãžãã¢ã®ç°äžã宿žãåŸè€ã® 6 人ãåå ããŸãããä»åã¯ãã®æ§åãªã©ãã¬ããŒãããŸãã äŒå Žã®æ§å RubyKaigi 2018 㯠ä»å°åœéã»ã³ã¿ãŒ ã§ã®éå¬ã§ãããæšå¹Žã¯ åºå³¶ ãäžæšå¹Žã¯ äº¬éœ ãšããããšã§ãããã§å€©æ©ç«ã»å®®å³¶ã»æŸå³¶ã®æ¥æ¬äžæ¯ããããæ
ãäžæŠå®çµã«ãªããŸããã ä»å°åœéã»ã³ã¿ãŒã¯ä»å°é§
ããå°äžéæ±è¥¿ç·ã§ 3 é§
ç®ãšããã¢ã¯ã»ã¹ã®è¯ã奜ç«å°ã«ãããªããç·ã«å²ãŸããå¿å°ããå Žæã«ãããŸããã ã¡ã€ã³äŒå Žã¯ 1000 人å容ã§ããåºãäŒå Žã«ãªã£ãŠããŸããåã»ãã·ã§ã³ããã®äŒå ŽãåãŸããããã®çæ³ã¶ãã§ããã äžçå°å³&æ¥æ¬å°å³ãæ§ã
ãªå°åããã®åå è
ãããŸããïŒïŒrubyists ã« map ã¡ãœãããããŸããŠãŸããããããã¯å
容ã¯ååå è
ãã·ãŒã«ã貌ã£ãŠå®è£
ãïŒ å°å³ã®é£ã®ã¹ãã³ãµãŒããŒã芧ã«ã¡ãã¬ãŒããŽãããããšã確èªããŠãã·ã£ãã ããŒã¹ã®æ§å ç¶ããŠããŒã¹ã®æ§åã玹ä»ããŸããã¡ãã¬ãŒã³ãŒãã¬ãŒãã«ã©ãŒã®èµ€ãããŒã¹ãšãã以äžãªæãã®ä»äžããã«ãªããŸããã All photographs will be uploaded to this URLs(google photo). day1 https://t.co/w6Dgq8HBb4 day2 https://t.co/X1x03bFEDF day3 https://t.co/8rlXpfZTEB See you next year! #RubyKaigi #RubyKaigi2018 â nil (@KatsumaNarisawa) June 2, 2018 ããã«ãã£ãçšæããŠããŒã¹ã«ãè¶ãããã ããæ¹ã«ãé
ãããŠããŸãããã¹ããã«ãŒããã¡ãããã³ãã¬ããã«å ããŠå»çããããäŒããçµåµèãçšæããŸããã ããŒã¹ã«ã¯ãããããŸã§ãããããã®æ¹ã«ãè¶ãããã ããŸããïŒ CTO 平山ã®çºè¡š ãããŠãåæ¥ã® Lightning Talks åã®ã¹ãã³ãµãŒã® PR æ ã«ãŠåŒç€Ÿã® CTO 平山ãçºè¡šãããŸããã çºè¡šã§ã¯ããå»çãã«ã¹ã±ã¢åéã®èª²é¡ã解決ããããšããããã·ã§ã³ã®ããšã¡ãã¬ãŒã 4 ã€ã®äºæ¥ãè¡ã£ãŠããããšããŸããä»¥å æ¬ããã°ã§çŽ¹ä» ããŸãã 3 æ¬ã®ãã¥ãŒã¹ãªãªãŒã¹ãå«ãããã® 1 幎ã®ã¢ããããŒãå
容ãäžå¿ã«ç޹ä»ãããŠããã ããŸããã å
¬æŒã®éäžã§ã® CTO 平山ããã¡ãã¬ãŒã®ããšãç¥ã£ãŠãã人ïŒãšã®åãããã§ã7ã» 8 å²ã®æ¹ãææãããŠããã®ã¯ææ
šæ·±ãã£ãã§ãã åœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã§ãã çŸå°ã§ã®åå¿ ããŒã¹å±ç€ºãPR æ ã§ã®çºè¡šãéããŠä»¥äžã®ãããªå¬ããåå¿ãããã ããŸããïŒ ãªã³ã©ã€ã³èšºçã¯ãã£ãšæ®åãã¹ãã§ãããå°æ¹å»çã®èª²é¡è§£æ±ºã«ãç¹ããçŽ æŽãããåãçµã¿ã ãšæãã #rubikaigi2018 #rubykaigi #ã¡ãã¬ãŒ â ãµãã / SHOWROOM ã®äººäºããããã (@yufujikochan) May 31, 2018 [https://twitter.com/yucao24hours/status/1002105819297595392:embed] æå
ãåã£ãŠããŸã£ããã©çµåµèãããã«ãã£ã§é
ã£ãŠãããå®å¿ #rubykaigi pic.twitter.com/NeXWfTif6m â Motonori Iwata (@mobcov) June 1, 2018 ããŒã¹ã§ãã2 æ¥ç®ä»¥éã1 æ¥ç®ã®ã»ãã·ã§ã³èŠãŸããããŒããšè©±ããŠãã ããæ¹ãå€ããã¡ãã¬ãŒãšãã®ãããã¯ãã«ã€ã㊠Rubyist ã®çæ§ã«ç¥ã£ãŠããã ããšãŠãè¯ãæ©äŒã«ãªã£ãŠãããšæããŸããã ã»ãã·ã§ã³ã®æ§å ãšã³ãžãã¢ã¯ããŒã¹ã§ã®äŒç€Ÿç޹ä»ã®åéã«åèªæ°ã«ãªã£ãã»ãã·ã§ã³ãèŽè¬ããããããŸããã æèŠã§ãã mruby ãåãããã©ãŒãã³ã¹åšãã®è©±é¡ãå€ãã£ãããã«æããŸãããŸãã« 2018 幎çŸåšã® Ruby ãåãå·»ãç°å¢ã衚ããŠããæããããŸãããšã³ãžãã¢ãšããŠãããã£ãæè¡ã®ã»ãã·ã§ã³ãèããã®ã¯çŽç²ã«æ¥œããã§ãããæ¥ã
ã®éçºã«æŽ»ãããããªãã¿ããã£ãããšããšãŠãææçŸ©ãªæéãéãããŸããã åæ¥ã® keynote ã§ã® 1 ã³ãã Matz ããã® keynote ã«ããããŸãããäœäºããå¡ç¿ã銬ãã§ããæ¯å¹Ž Ruby ã¯æ»ã«ããããŠçãŸãå€ãããŸãïŒã¯ãªã¹ãã¹ã«ïŒãRuby ãåžžã«é²åããŠããããšãèã§æããããšã®ã§ããã»ãã·ã§ã³çŸ€ã§ããã çªå€ç·š ããŠãã¡ãã¬ãŒæäŸïŒïŒïŒã®ãåãã§ããä»åã¯å€§åŽå
«å¹¡å®®ã«åè©£ããããšã«ãªããŸããã 倧åŽå
«å¹¡å®®ã®ç€Ÿæ®¿ã¯åœå®ã«ãæå®ãããŠãããå®åæ¡å±±æä»£ã®è±ªè¯çµ¢çãªæ§åŒã®å»ºç¯ã§ãšãŠãé°å²æ°ã®ããç¥ç€Ÿã§ããã åæãã 3 人ã åæãã 2 人ãšãããæ®åœ±ãã 2 人ã ãããã« æšå¹Žã«åŒãç¶ãã¡ãã¬ãŒã® RubyKaigi åè³ã¯ 2 床ç®ã«ãªããŸããã ããŒã¹ã§äŒç€Ÿããããã¯ãã®èª¬æããŠãããšãã¡ãã¬ãŒç¥ã£ãŠãŸãããšã®å£°ãèãæ©äŒãå€ãããšãŠãå¬ããéãã§ããããããŸã§ä»¥äžã« Rubyãå»ç ÃIT ãçãäžããŠãããã°ãšããæ°æã¡ãèžã«ä»å°ãåŸã«ããŸããã ïŒæ°å¹¹ç·ããä»å°ã®å€çŒãããã·ã£ãªïŒ ãç¥ãã åŒç€Ÿã§ã¯ãå»ç x IT ãžã®ææŠãã«åãçµã¿ãããšã³ãžãã¢ã®ã¿ãªãããå¿ãããåŸ
ã¡ããŠãããŸãïŒ èå³ãããæ¹ã¯ããã¡ãã®ã話ãèããŠã¿ããããããé£çµ¡ãã ããã About æ ªåŒäŒç€Ÿã¡ãã¬ãŒ - Wantedly You can read employee interviews and the latest company's initiative of æ ªåŒäŒç€Ÿã¡ãã¬ãŒ. æ¥éãªé«éœ¢åãå»çè²»ã®é«éš°ãå»ççŸå Žã®ç²åŒãå«ã°ããäžã§ããã®ãŸãŸã§ã¯å®¶èšã倧ããå§è¿«ããŠæ¯ããããªããªããæ¥æ¬ã®å»çã¯åŽ©å£ããŠããŸããŸãããã®ç¶æ
ãè§£æ¶ããããã®éµããå»ççŸå Žã«ãããã¯ã©ãŠã掻çšãé§äœ¿ããæ¥åå¹çåãã§ãã ãããæ¥æ¬ã§ã¯ã忰以äžã®å»çæ©é¢ãããŸã ã«çŽã«ã«ããå©çšããŠãããªã©ãã¯ã©ãŠãåã¯çãããžã¿ã«æŽ»çšãé²ãã§ããªãã®ãçŸç¶ã§ããç§ãã¡ã¯ãã¯ãããžãŒã掻çšããäºæ¥ããããžã§ã¯ããéããŠãå»çãã«ã¹ã±ã¢åéã®ããžã¿ã«æŽ»çšãæšé²ããæ¥æ¬ã®æªæ¥ãäœãããã®åãçµã¿ãè¡ã£ãŠãããŸãã www.wantedly.com éçºæ¬éšã®é°å²æ°ããã£ãšç¥ãããæ¹ã¯ããã¡ãããã©ããã https://www.medley.jp/recruit/creative.html
ããã«ã¡ã¯ïŒéçºæ¬éšã®ãšã³ãžãã¢ã»åŸè€ã§ãã ã¡ãã¬ãŒã¯ 5/31ã6/2 ã«éå¬ããã RurbyKaigi 2018 ã« Lightning Talks Sponsor ãšããŠåè³ãããŠããã ããŸããïŒ æšå¹Ž ã® Ruby Sponsor ã«ç¶ãã2 幎ç®ã®åè³ã§ãïŒã ã€ãã³ãåœæ¥ã¯ãåŒç€Ÿãã CTO ã®å¹³å±±ãæ¡çšã»åºå ±ã®é¿éšãšæ·±æŸ€ããšã³ãžãã¢ã®ç°äžã宿žãåŸè€ã® 6 人ãåå ããŸãããä»åã¯ãã®æ§åãªã©ãã¬ããŒãããŸãã äŒå Žã®æ§å RubyKaigi 2018 㯠ä»å°åœéã»ã³ã¿ãŒ ã§ã®éå¬ã§ãããæšå¹Žã¯ åºå³¶ ãäžæšå¹Žã¯ äº¬éœ ãšããããšã§ãããã§å€©æ©ç«ã»å®®å³¶ã»æŸå³¶ã®æ¥æ¬äžæ¯ããããæ
ãäžæŠå®çµã«ãªããŸããã ä»å°åœéã»ã³ã¿ãŒã¯ä»å°é§
ããå°äžéæ±è¥¿ç·ã§ 3 é§
ç®ãšããã¢ã¯ã»ã¹ã®è¯ã奜ç«å°ã«ãããªããç·ã«å²ãŸããå¿å°ããå Žæã«ãããŸããã ã¡ã€ã³äŒå Žã¯ 1000 人å容ã§ããåºãäŒå Žã«ãªã£ãŠããŸããåã»ãã·ã§ã³ããã®äŒå ŽãåãŸããããã®çæ³ã¶ãã§ããã äžçå°å³&æ¥æ¬å°å³ãæ§ã
ãªå°åããã®åå è
ãããŸããïŒïŒrubyists ã« map ã¡ãœãããããŸããŠãŸããããããã¯å
容ã¯ååå è
ãã·ãŒã«ã貌ã£ãŠå®è£
ãïŒ å°å³ã®é£ã®ã¹ãã³ãµãŒããŒã芧ã«ã¡ãã¬ãŒããŽãããããšã確èªããŠãã·ã£ãã ããŒã¹ã®æ§å ç¶ããŠããŒã¹ã®æ§åã玹ä»ããŸããã¡ãã¬ãŒã³ãŒãã¬ãŒãã«ã©ãŒã®èµ€ãããŒã¹ãšãã以äžãªæãã®ä»äžããã«ãªããŸããã All photographs will be uploaded to this URLs(google photo). day1 https://t.co/w6Dgq8HBb4 day2 https://t.co/X1x03bFEDF day3 https://t.co/8rlXpfZTEB See you next year! #RubyKaigi #RubyKaigi2018 â nil (@KatsumaNarisawa) June 2, 2018 ããã«ãã£ãçšæããŠããŒã¹ã«ãè¶ãããã ããæ¹ã«ãé
ãããŠããŸãããã¹ããã«ãŒããã¡ãããã³ãã¬ããã«å ããŠå»çããããäŒããçµåµèãçšæããŸããã ããŒã¹ã«ã¯ãããããŸã§ãããããã®æ¹ã«ãè¶ãããã ããŸããïŒ CTO 平山ã®çºè¡š ãããŠãåæ¥ã® Lightning Talks åã®ã¹ãã³ãµãŒã® PR æ ã«ãŠåŒç€Ÿã® CTO 平山ãçºè¡šãããŸããã çºè¡šã§ã¯ããå»çãã«ã¹ã±ã¢åéã®èª²é¡ã解決ããããšããããã·ã§ã³ã®ããšã¡ãã¬ãŒã 4 ã€ã®äºæ¥ãè¡ã£ãŠããããšããŸããä»¥å æ¬ããã°ã§çŽ¹ä» ããŸãã 3 æ¬ã®ãã¥ãŒã¹ãªãªãŒã¹ãå«ãããã® 1 幎ã®ã¢ããããŒãå
容ãäžå¿ã«ç޹ä»ãããŠããã ããŸããã å
¬æŒã®éäžã§ã® CTO 平山ããã¡ãã¬ãŒã®ããšãç¥ã£ãŠãã人ïŒãšã®åãããã§ã7ã» 8 å²ã®æ¹ãææãããŠããã®ã¯ææ
šæ·±ãã£ãã§ãã åœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã§ãã çŸå°ã§ã®åå¿ ããŒã¹å±ç€ºãPR æ ã§ã®çºè¡šãéããŠä»¥äžã®ãããªå¬ããåå¿ãããã ããŸããïŒ ãªã³ã©ã€ã³èšºçã¯ãã£ãšæ®åãã¹ãã§ãããå°æ¹å»çã®èª²é¡è§£æ±ºã«ãç¹ããçŽ æŽãããåãçµã¿ã ãšæãã #rubikaigi2018 #rubykaigi #ã¡ãã¬ãŒ â ãµãã / SHOWROOM ã®äººäºããããã (@yufujikochan) May 31, 2018 [https://twitter.com/yucao24hours/status/1002105819297595392:embed] æå
ãåã£ãŠããŸã£ããã©çµåµèãããã«ãã£ã§é
ã£ãŠãããå®å¿ #rubykaigi pic.twitter.com/NeXWfTif6m â Motonori Iwata (@mobcov) June 1, 2018 ããŒã¹ã§ãã2 æ¥ç®ä»¥éã1 æ¥ç®ã®ã»ãã·ã§ã³èŠãŸããããŒããšè©±ããŠãã ããæ¹ãå€ããã¡ãã¬ãŒãšãã®ãããã¯ãã«ã€ã㊠Rubyist ã®çæ§ã«ç¥ã£ãŠããã ããšãŠãè¯ãæ©äŒã«ãªã£ãŠãããšæããŸããã ã»ãã·ã§ã³ã®æ§å ãšã³ãžãã¢ã¯ããŒã¹ã§ã®äŒç€Ÿç޹ä»ã®åéã«åèªæ°ã«ãªã£ãã»ãã·ã§ã³ãèŽè¬ããããããŸããã æèŠã§ãã mruby ãåãããã©ãŒãã³ã¹åšãã®è©±é¡ãå€ãã£ãããã«æããŸãããŸãã« 2018 幎çŸåšã® Ruby ãåãå·»ãç°å¢ã衚ããŠããæããããŸãããšã³ãžãã¢ãšããŠãããã£ãæè¡ã®ã»ãã·ã§ã³ãèããã®ã¯çŽç²ã«æ¥œããã§ãããæ¥ã
ã®éçºã«æŽ»ãããããªãã¿ããã£ãããšããšãŠãææçŸ©ãªæéãéãããŸããã åæ¥ã® keynote ã§ã® 1 ã³ãã Matz ããã® keynote ã«ããããŸãããäœäºããå¡ç¿ã銬ãã§ããæ¯å¹Ž Ruby ã¯æ»ã«ããããŠçãŸãå€ãããŸãïŒã¯ãªã¹ãã¹ã«ïŒãRuby ãåžžã«é²åããŠããããšãèã§æããããšã®ã§ããã»ãã·ã§ã³çŸ€ã§ããã çªå€ç·š ããŠãã¡ãã¬ãŒæäŸïŒïŒïŒã®ãåãã§ããä»åã¯å€§åŽå
«å¹¡å®®ã«åè©£ããããšã«ãªããŸããã 倧åŽå
«å¹¡å®®ã®ç€Ÿæ®¿ã¯åœå®ã«ãæå®ãããŠãããå®åæ¡å±±æä»£ã®è±ªè¯çµ¢çãªæ§åŒã®å»ºç¯ã§ãšãŠãé°å²æ°ã®ããç¥ç€Ÿã§ããã åæãã 3 人ã åæãã 2 人ãšãããæ®åœ±ãã 2 人ã ãããã« æšå¹Žã«åŒãç¶ãã¡ãã¬ãŒã® RubyKaigi åè³ã¯ 2 床ç®ã«ãªããŸããã ããŒã¹ã§äŒç€Ÿããããã¯ãã®èª¬æããŠãããšãã¡ãã¬ãŒç¥ã£ãŠãŸãããšã®å£°ãèãæ©äŒãå€ãããšãŠãå¬ããéãã§ããããããŸã§ä»¥äžã« Rubyãå»ç ÃIT ãçãäžããŠãããã°ãšããæ°æã¡ãèžã«ä»å°ãåŸã«ããŸããã ïŒæ°å¹¹ç·ããä»å°ã®å€çŒãããã·ã£ãªïŒ ãç¥ãã åŒç€Ÿã§ã¯ãå»ç x IT ãžã®ææŠãã«åãçµã¿ãããšã³ãžãã¢ã®ã¿ãªãããå¿ãããåŸ
ã¡ããŠãããŸãïŒ èå³ãããæ¹ã¯ããã¡ãã®ã話ãèããŠã¿ããããããé£çµ¡ãã ããã About æ ªåŒäŒç€Ÿã¡ãã¬ãŒ - Wantedly You can read employee interviews and the latest company's initiative of æ ªåŒäŒç€Ÿã¡ãã¬ãŒ. æ¥éãªé«éœ¢åãå»çè²»ã®é«éš°ãå»ççŸå Žã®ç²åŒãå«ã°ããäžã§ããã®ãŸãŸã§ã¯å®¶èšã倧ããå§è¿«ããŠæ¯ããããªããªããæ¥æ¬ã®å»çã¯åŽ©å£ããŠããŸããŸãããã®ç¶æ
ãè§£æ¶ããããã®éµããå»ççŸå Žã«ãããã¯ã©ãŠã掻çšãé§äœ¿ããæ¥åå¹çåãã§ãã ãããæ¥æ¬ã§ã¯ã忰以äžã®å»çæ©é¢ãããŸã ã«çŽã«ã«ããå©çšããŠãããªã©ãã¯ã©ãŠãåã¯çãããžã¿ã«æŽ»çšãé²ãã§ããªãã®ãçŸç¶ã§ããç§ãã¡ã¯ãã¯ãããžãŒã掻çšããäºæ¥ããããžã§ã¯ããéããŠãå»çãã«ã¹ã±ã¢åéã®ããžã¿ã«æŽ»çšãæšé²ããæ¥æ¬ã®æªæ¥ãäœãããã®åãçµã¿ãè¡ã£ãŠãããŸãã www.wantedly.com éçºæ¬éšã®é°å²æ°ããã£ãšç¥ãããæ¹ã¯ããã¡ãããã©ããã https://www.medley.jp/recruit/creative.html
ããã«ã¡ã¯ïŒéçºæ¬éšã®ãšã³ãžãã¢ã»åŸè€ã§ãã ã¡ãã¬ãŒã¯ 5/31ã6/2 ã«éå¬ããã RurbyKaigi 2018 ã« Lightning Talks Sponsor ãšããŠåè³ãããŠããã ããŸããïŒ æšå¹Ž ã® Ruby Sponsor ã«ç¶ãã2 幎ç®ã®åè³ã§ãïŒã ã€ãã³ãåœæ¥ã¯ãåŒç€Ÿãã CTO ã®å¹³å±±ãæ¡çšã»åºå ±ã®é¿éšãšæ·±æŸ€ããšã³ãžãã¢ã®ç°äžã宿žãåŸè€ã® 6 人ãåå ããŸãããä»åã¯ãã®æ§åãªã©ãã¬ããŒãããŸãã äŒå Žã®æ§å RubyKaigi 2018 㯠ä»å°åœéã»ã³ã¿ãŒ ã§ã®éå¬ã§ãããæšå¹Žã¯ åºå³¶ ãäžæšå¹Žã¯ äº¬éœ ãšããããšã§ãããã§å€©æ©ç«ã»å®®å³¶ã»æŸå³¶ã®æ¥æ¬äžæ¯ããããæ
ãäžæŠå®çµã«ãªããŸããã ä»å°åœéã»ã³ã¿ãŒã¯ä»å°é§
ããå°äžéæ±è¥¿ç·ã§ 3 é§
ç®ãšããã¢ã¯ã»ã¹ã®è¯ã奜ç«å°ã«ãããªããç·ã«å²ãŸããå¿å°ããå Žæã«ãããŸããã ã¡ã€ã³äŒå Žã¯ 1000 人å容ã§ããåºãäŒå Žã«ãªã£ãŠããŸããåã»ãã·ã§ã³ããã®äŒå ŽãåãŸããããã®çæ³ã¶ãã§ããã äžçå°å³&æ¥æ¬å°å³ãæ§ã
ãªå°åããã®åå è
ãããŸããïŒïŒrubyists ã« map ã¡ãœãããããŸããŠãŸããããããã¯å
容ã¯ååå è
ãã·ãŒã«ã貌ã£ãŠå®è£
ãïŒ å°å³ã®é£ã®ã¹ãã³ãµãŒããŒã芧ã«ã¡ãã¬ãŒããŽãããããšã確èªããŠãã·ã£ãã ããŒã¹ã®æ§å ç¶ããŠããŒã¹ã®æ§åã玹ä»ããŸããã¡ãã¬ãŒã³ãŒãã¬ãŒãã«ã©ãŒã®èµ€ãããŒã¹ãšãã以äžãªæãã®ä»äžããã«ãªããŸããã All photographs will be uploaded to this URLs(google photo). day1 https://t.co/w6Dgq8HBb4 day2 https://t.co/X1x03bFEDF day3 https://t.co/8rlXpfZTEB See you next year! #RubyKaigi #RubyKaigi2018 â nil (@KatsumaNarisawa) June 2, 2018 ããã«ãã£ãçšæããŠããŒã¹ã«ãè¶ãããã ããæ¹ã«ãé
ãããŠããŸãããã¹ããã«ãŒããã¡ãããã³ãã¬ããã«å ããŠå»çããããäŒããçµåµèãçšæããŸããã ããŒã¹ã«ã¯ãããããŸã§ãããããã®æ¹ã«ãè¶ãããã ããŸããïŒ CTO 平山ã®çºè¡š ãããŠãåæ¥ã® Lightning Talks åã®ã¹ãã³ãµãŒã® PR æ ã«ãŠåŒç€Ÿã® CTO 平山ãçºè¡šãããŸããã çºè¡šã§ã¯ããå»çãã«ã¹ã±ã¢åéã®èª²é¡ã解決ããããšããããã·ã§ã³ã®ããšã¡ãã¬ãŒã 4 ã€ã®äºæ¥ãè¡ã£ãŠããããšããŸããä»¥å æ¬ããã°ã§çŽ¹ä» ããŸãã 3 æ¬ã®ãã¥ãŒã¹ãªãªãŒã¹ãå«ãããã® 1 幎ã®ã¢ããããŒãå
容ãäžå¿ã«ç޹ä»ãããŠããã ããŸããã å
¬æŒã®éäžã§ã® CTO 平山ããã¡ãã¬ãŒã®ããšãç¥ã£ãŠãã人ïŒãšã®åãããã§ã7ã» 8 å²ã®æ¹ãææãããŠããã®ã¯ææ
šæ·±ãã£ãã§ãã åœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã§ãã çŸå°ã§ã®åå¿ ããŒã¹å±ç€ºãPR æ ã§ã®çºè¡šãéããŠä»¥äžã®ãããªå¬ããåå¿ãããã ããŸããïŒ ãªã³ã©ã€ã³èšºçã¯ãã£ãšæ®åãã¹ãã§ãããå°æ¹å»çã®èª²é¡è§£æ±ºã«ãç¹ããçŽ æŽãããåãçµã¿ã ãšæãã #rubikaigi2018 #rubykaigi #ã¡ãã¬ãŒ â ãµãã / SHOWROOM ã®äººäºããããã (@yufujikochan) May 31, 2018 [https://twitter.com/yucao24hours/status/1002105819297595392:embed] æå
ãåã£ãŠããŸã£ããã©çµåµèãããã«ãã£ã§é
ã£ãŠãããå®å¿ #rubykaigi pic.twitter.com/NeXWfTif6m â Motonori Iwata (@mobcov) June 1, 2018 ããŒã¹ã§ãã2 æ¥ç®ä»¥éã1 æ¥ç®ã®ã»ãã·ã§ã³èŠãŸããããŒããšè©±ããŠãã ããæ¹ãå€ããã¡ãã¬ãŒãšãã®ãããã¯ãã«ã€ã㊠Rubyist ã®çæ§ã«ç¥ã£ãŠããã ããšãŠãè¯ãæ©äŒã«ãªã£ãŠãããšæããŸããã ã»ãã·ã§ã³ã®æ§å ãšã³ãžãã¢ã¯ããŒã¹ã§ã®äŒç€Ÿç޹ä»ã®åéã«åèªæ°ã«ãªã£ãã»ãã·ã§ã³ãèŽè¬ããããããŸããã æèŠã§ãã mruby ãåãããã©ãŒãã³ã¹åšãã®è©±é¡ãå€ãã£ãããã«æããŸãããŸãã« 2018 幎çŸåšã® Ruby ãåãå·»ãç°å¢ã衚ããŠããæããããŸãããšã³ãžãã¢ãšããŠãããã£ãæè¡ã®ã»ãã·ã§ã³ãèããã®ã¯çŽç²ã«æ¥œããã§ãããæ¥ã
ã®éçºã«æŽ»ãããããªãã¿ããã£ãããšããšãŠãææçŸ©ãªæéãéãããŸããã åæ¥ã® keynote ã§ã® 1 ã³ãã Matz ããã® keynote ã«ããããŸãããäœäºããå¡ç¿ã銬ãã§ããæ¯å¹Ž Ruby ã¯æ»ã«ããããŠçãŸãå€ãããŸãïŒã¯ãªã¹ãã¹ã«ïŒãRuby ãåžžã«é²åããŠããããšãèã§æããããšã®ã§ããã»ãã·ã§ã³çŸ€ã§ããã çªå€ç·š ããŠãã¡ãã¬ãŒæäŸïŒïŒïŒã®ãåãã§ããä»åã¯å€§åŽå
«å¹¡å®®ã«åè©£ããããšã«ãªããŸããã 倧åŽå
«å¹¡å®®ã®ç€Ÿæ®¿ã¯åœå®ã«ãæå®ãããŠãããå®åæ¡å±±æä»£ã®è±ªè¯çµ¢çãªæ§åŒã®å»ºç¯ã§ãšãŠãé°å²æ°ã®ããç¥ç€Ÿã§ããã åæãã 3 人ã åæãã 2 人ãšãããæ®åœ±ãã 2 人ã ãããã« æšå¹Žã«åŒãç¶ãã¡ãã¬ãŒã® RubyKaigi åè³ã¯ 2 床ç®ã«ãªããŸããã ããŒã¹ã§äŒç€Ÿããããã¯ãã®èª¬æããŠãããšãã¡ãã¬ãŒç¥ã£ãŠãŸãããšã®å£°ãèãæ©äŒãå€ãããšãŠãå¬ããéãã§ããããããŸã§ä»¥äžã« Rubyãå»ç ÃIT ãçãäžããŠãããã°ãšããæ°æã¡ãèžã«ä»å°ãåŸã«ããŸããã ïŒæ°å¹¹ç·ããä»å°ã®å€çŒãããã·ã£ãªïŒ ãç¥ãã åŒç€Ÿã§ã¯ãå»ç x IT ãžã®ææŠãã«åãçµã¿ãããšã³ãžãã¢ã®ã¿ãªãããå¿ãããåŸ
ã¡ããŠãããŸãïŒ èå³ãããæ¹ã¯ããã¡ãã®ã話ãèããŠã¿ããããããé£çµ¡ãã ããã About æ ªåŒäŒç€Ÿã¡ãã¬ãŒ - Wantedly You can read employee interviews and the latest company's initiative of æ ªåŒäŒç€Ÿã¡ãã¬ãŒ. æ¥éãªé«éœ¢åãå»çè²»ã®é«éš°ãå»ççŸå Žã®ç²åŒãå«ã°ããäžã§ããã®ãŸãŸã§ã¯å®¶èšã倧ããå§è¿«ããŠæ¯ããããªããªããæ¥æ¬ã®å»çã¯åŽ©å£ããŠããŸããŸãããã®ç¶æ
ãè§£æ¶ããããã®éµããå»ççŸå Žã«ãããã¯ã©ãŠã掻çšãé§äœ¿ããæ¥åå¹çåãã§ãã ãããæ¥æ¬ã§ã¯ã忰以äžã®å»çæ©é¢ãããŸã ã«çŽã«ã«ããå©çšããŠãããªã©ãã¯ã©ãŠãåã¯çãããžã¿ã«æŽ»çšãé²ãã§ããªãã®ãçŸç¶ã§ããç§ãã¡ã¯ãã¯ãããžãŒã掻çšããäºæ¥ããããžã§ã¯ããéããŠãå»çãã«ã¹ã±ã¢åéã®ããžã¿ã«æŽ»çšãæšé²ããæ¥æ¬ã®æªæ¥ãäœãããã®åãçµã¿ãè¡ã£ãŠãããŸãã www.wantedly.com éçºæ¬éšã®é°å²æ°ããã£ãšç¥ãããæ¹ã¯ããã¡ãããã©ããã https://www.medley.jp/recruit/creative.html
ããã«ã¡ã¯ïŒéçºæ¬éšã®ãšã³ãžãã¢ã»åŸè€ã§ãã ã¡ãã¬ãŒã¯ 5/31ã6/2 ã«éå¬ããã RurbyKaigi 2018 ã« Lightning Talks Sponsor ãšããŠåè³ãããŠããã ããŸããïŒ æšå¹Ž ã® Ruby Sponsor ã«ç¶ãã2 幎ç®ã®åè³ã§ãïŒã ã€ãã³ãåœæ¥ã¯ãåŒç€Ÿãã CTO ã®å¹³å±±ãæ¡çšã»åºå ±ã®é¿éšãšæ·±æŸ€ããšã³ãžãã¢ã®ç°äžã宿žãåŸè€ã® 6 人ãåå ããŸãããä»åã¯ãã®æ§åãªã©ãã¬ããŒãããŸãã äŒå Žã®æ§å RubyKaigi 2018 㯠ä»å°åœéã»ã³ã¿ãŒ ã§ã®éå¬ã§ãããæšå¹Žã¯ åºå³¶ ãäžæšå¹Žã¯ äº¬éœ ãšããããšã§ãããã§å€©æ©ç«ã»å®®å³¶ã»æŸå³¶ã®æ¥æ¬äžæ¯ããããæ
ãäžæŠå®çµã«ãªããŸããã ä»å°åœéã»ã³ã¿ãŒã¯ä»å°é§
ããå°äžéæ±è¥¿ç·ã§ 3 é§
ç®ãšããã¢ã¯ã»ã¹ã®è¯ã奜ç«å°ã«ãããªããç·ã«å²ãŸããå¿å°ããå Žæã«ãããŸããã ã¡ã€ã³äŒå Žã¯ 1000 人å容ã§ããåºãäŒå Žã«ãªã£ãŠããŸããåã»ãã·ã§ã³ããã®äŒå ŽãåãŸããããã®çæ³ã¶ãã§ããã äžçå°å³&æ¥æ¬å°å³ãæ§ã
ãªå°åããã®åå è
ãããŸããïŒïŒrubyists ã« map ã¡ãœãããããŸããŠãŸããããããã¯å
容ã¯ååå è
ãã·ãŒã«ã貌ã£ãŠå®è£
ãïŒ å°å³ã®é£ã®ã¹ãã³ãµãŒããŒã芧ã«ã¡ãã¬ãŒããŽãããããšã確èªããŠãã·ã£ãã ããŒã¹ã®æ§å ç¶ããŠããŒã¹ã®æ§åã玹ä»ããŸããã¡ãã¬ãŒã³ãŒãã¬ãŒãã«ã©ãŒã®èµ€ãããŒã¹ãšãã以äžãªæãã®ä»äžããã«ãªããŸããã All photographs will be uploaded to this URLs(google photo). day1 https://t.co/w6Dgq8HBb4 day2 https://t.co/X1x03bFEDF day3 https://t.co/8rlXpfZTEB See you next year! #RubyKaigi #RubyKaigi2018 â nil (@KatsumaNarisawa) June 2, 2018 ããã«ãã£ãçšæããŠããŒã¹ã«ãè¶ãããã ããæ¹ã«ãé
ãããŠããŸãããã¹ããã«ãŒããã¡ãããã³ãã¬ããã«å ããŠå»çããããäŒããçµåµèãçšæããŸããã ããŒã¹ã«ã¯ãããããŸã§ãããããã®æ¹ã«ãè¶ãããã ããŸããïŒ CTO 平山ã®çºè¡š ãããŠãåæ¥ã® Lightning Talks åã®ã¹ãã³ãµãŒã® PR æ ã«ãŠåŒç€Ÿã® CTO 平山ãçºè¡šãããŸããã çºè¡šã§ã¯ããå»çãã«ã¹ã±ã¢åéã®èª²é¡ã解決ããããšããããã·ã§ã³ã®ããšã¡ãã¬ãŒã 4 ã€ã®äºæ¥ãè¡ã£ãŠããããšããŸããä»¥å æ¬ããã°ã§çŽ¹ä» ããŸãã 3 æ¬ã®ãã¥ãŒã¹ãªãªãŒã¹ãå«ãããã® 1 幎ã®ã¢ããããŒãå
容ãäžå¿ã«ç޹ä»ãããŠããã ããŸããã å
¬æŒã®éäžã§ã® CTO 平山ããã¡ãã¬ãŒã®ããšãç¥ã£ãŠãã人ïŒãšã®åãããã§ã7ã» 8 å²ã®æ¹ãææãããŠããã®ã¯ææ
šæ·±ãã£ãã§ãã åœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã§ãã çŸå°ã§ã®åå¿ ããŒã¹å±ç€ºãPR æ ã§ã®çºè¡šãéããŠä»¥äžã®ãããªå¬ããåå¿ãããã ããŸããïŒ ãªã³ã©ã€ã³èšºçã¯ãã£ãšæ®åãã¹ãã§ãããå°æ¹å»çã®èª²é¡è§£æ±ºã«ãç¹ããçŽ æŽãããåãçµã¿ã ãšæãã #rubikaigi2018 #rubykaigi #ã¡ãã¬ãŒ â ãµãã / SHOWROOM ã®äººäºããããã (@yufujikochan) May 31, 2018 [https://twitter.com/yucao24hours/status/1002105819297595392:embed] æå
ãåã£ãŠããŸã£ããã©çµåµèãããã«ãã£ã§é
ã£ãŠãããå®å¿ #rubykaigi pic.twitter.com/NeXWfTif6m â Motonori Iwata (@mobcov) June 1, 2018 ããŒã¹ã§ãã2 æ¥ç®ä»¥éã1 æ¥ç®ã®ã»ãã·ã§ã³èŠãŸããããŒããšè©±ããŠãã ããæ¹ãå€ããã¡ãã¬ãŒãšãã®ãããã¯ãã«ã€ã㊠Rubyist ã®çæ§ã«ç¥ã£ãŠããã ããšãŠãè¯ãæ©äŒã«ãªã£ãŠãããšæããŸããã ã»ãã·ã§ã³ã®æ§å ãšã³ãžãã¢ã¯ããŒã¹ã§ã®äŒç€Ÿç޹ä»ã®åéã«åèªæ°ã«ãªã£ãã»ãã·ã§ã³ãèŽè¬ããããããŸããã æèŠã§ãã mruby ãåãããã©ãŒãã³ã¹åšãã®è©±é¡ãå€ãã£ãããã«æããŸãããŸãã« 2018 幎çŸåšã® Ruby ãåãå·»ãç°å¢ã衚ããŠããæããããŸãããšã³ãžãã¢ãšããŠãããã£ãæè¡ã®ã»ãã·ã§ã³ãèããã®ã¯çŽç²ã«æ¥œããã§ãããæ¥ã
ã®éçºã«æŽ»ãããããªãã¿ããã£ãããšããšãŠãææçŸ©ãªæéãéãããŸããã åæ¥ã® keynote ã§ã® 1 ã³ãã Matz ããã® keynote ã«ããããŸãããäœäºããå¡ç¿ã銬ãã§ããæ¯å¹Ž Ruby ã¯æ»ã«ããããŠçãŸãå€ãããŸãïŒã¯ãªã¹ãã¹ã«ïŒãRuby ãåžžã«é²åããŠããããšãèã§æããããšã®ã§ããã»ãã·ã§ã³çŸ€ã§ããã çªå€ç·š ããŠãã¡ãã¬ãŒæäŸïŒïŒïŒã®ãåãã§ããä»åã¯å€§åŽå
«å¹¡å®®ã«åè©£ããããšã«ãªããŸããã 倧åŽå
«å¹¡å®®ã®ç€Ÿæ®¿ã¯åœå®ã«ãæå®ãããŠãããå®åæ¡å±±æä»£ã®è±ªè¯çµ¢çãªæ§åŒã®å»ºç¯ã§ãšãŠãé°å²æ°ã®ããç¥ç€Ÿã§ããã åæãã 3 人ã åæãã 2 人ãšãããæ®åœ±ãã 2 人ã ãããã« æšå¹Žã«åŒãç¶ãã¡ãã¬ãŒã® RubyKaigi åè³ã¯ 2 床ç®ã«ãªããŸããã ããŒã¹ã§äŒç€Ÿããããã¯ãã®èª¬æããŠãããšãã¡ãã¬ãŒç¥ã£ãŠãŸãããšã®å£°ãèãæ©äŒãå€ãããšãŠãå¬ããéãã§ããããããŸã§ä»¥äžã« Rubyãå»ç ÃIT ãçãäžããŠãããã°ãšããæ°æã¡ãèžã«ä»å°ãåŸã«ããŸããã ïŒæ°å¹¹ç·ããä»å°ã®å€çŒãããã·ã£ãªïŒ ãç¥ãã åŒç€Ÿã§ã¯ãå»ç x IT ãžã®ææŠãã«åãçµã¿ãããšã³ãžãã¢ã®ã¿ãªãããå¿ãããåŸ
ã¡ããŠãããŸãïŒ èå³ãããæ¹ã¯ããã¡ãã®ã話ãèããŠã¿ããããããé£çµ¡ãã ããã About æ ªåŒäŒç€Ÿã¡ãã¬ãŒ - Wantedly You can read employee interviews and the latest company's initiative of æ ªåŒäŒç€Ÿã¡ãã¬ãŒ. æ¥éãªé«éœ¢åãå»çè²»ã®é«éš°ãå»ççŸå Žã®ç²åŒãå«ã°ããäžã§ããã®ãŸãŸã§ã¯å®¶èšã倧ããå§è¿«ããŠæ¯ããããªããªããæ¥æ¬ã®å»çã¯åŽ©å£ããŠããŸããŸãããã®ç¶æ
ãè§£æ¶ããããã®éµããå»ççŸå Žã«ãããã¯ã©ãŠã掻çšãé§äœ¿ããæ¥åå¹çåãã§ãã ãããæ¥æ¬ã§ã¯ã忰以äžã®å»çæ©é¢ãããŸã ã«çŽã«ã«ããå©çšããŠãããªã©ãã¯ã©ãŠãåã¯çãããžã¿ã«æŽ»çšãé²ãã§ããªãã®ãçŸç¶ã§ããç§ãã¡ã¯ãã¯ãããžãŒã掻çšããäºæ¥ããããžã§ã¯ããéããŠãå»çãã«ã¹ã±ã¢åéã®ããžã¿ã«æŽ»çšãæšé²ããæ¥æ¬ã®æªæ¥ãäœãããã®åãçµã¿ãè¡ã£ãŠãããŸãã www.wantedly.com éçºæ¬éšã®é°å²æ°ããã£ãšç¥ãããæ¹ã¯ããã¡ãããã©ããã https://www.medley.jp/recruit/creative.html
ããã«ã¡ã¯ïŒéçºæ¬éšã®ãšã³ãžãã¢ã»åŸè€ã§ãã ã¡ãã¬ãŒã¯ 5/31ã6/2 ã«éå¬ããã RurbyKaigi 2018 ã« Lightning Talks Sponsor ãšããŠåè³ãããŠããã ããŸããïŒ æšå¹Ž ã® Ruby Sponsor ã«ç¶ãã2 幎ç®ã®åè³ã§ãïŒã ã€ãã³ãåœæ¥ã¯ãåŒç€Ÿãã CTO ã®å¹³å±±ãæ¡çšã»åºå ±ã®é¿éšãšæ·±æŸ€ããšã³ãžãã¢ã®ç°äžã宿žãåŸè€ã® 6 人ãåå ããŸãããä»åã¯ãã®æ§åãªã©ãã¬ããŒãããŸãã äŒå Žã®æ§å RubyKaigi 2018 㯠ä»å°åœéã»ã³ã¿ãŒ ã§ã®éå¬ã§ãããæšå¹Žã¯ åºå³¶ ãäžæšå¹Žã¯ äº¬éœ ãšããããšã§ãããã§å€©æ©ç«ã»å®®å³¶ã»æŸå³¶ã®æ¥æ¬äžæ¯ããããæ
ãäžæŠå®çµã«ãªããŸããã ä»å°åœéã»ã³ã¿ãŒã¯ä»å°é§
ããå°äžéæ±è¥¿ç·ã§ 3 é§
ç®ãšããã¢ã¯ã»ã¹ã®è¯ã奜ç«å°ã«ãããªããç·ã«å²ãŸããå¿å°ããå Žæã«ãããŸããã ã¡ã€ã³äŒå Žã¯ 1000 人å容ã§ããåºãäŒå Žã«ãªã£ãŠããŸããåã»ãã·ã§ã³ããã®äŒå ŽãåãŸããããã®çæ³ã¶ãã§ããã äžçå°å³&æ¥æ¬å°å³ãæ§ã
ãªå°åããã®åå è
ãããŸããïŒïŒrubyists ã« map ã¡ãœãããããŸããŠãŸããããããã¯å
容ã¯ååå è
ãã·ãŒã«ã貌ã£ãŠå®è£
ãïŒ å°å³ã®é£ã®ã¹ãã³ãµãŒããŒã芧ã«ã¡ãã¬ãŒããŽãããããšã確èªããŠãã·ã£ãã ããŒã¹ã®æ§å ç¶ããŠããŒã¹ã®æ§åã玹ä»ããŸããã¡ãã¬ãŒã³ãŒãã¬ãŒãã«ã©ãŒã®èµ€ãããŒã¹ãšãã以äžãªæãã®ä»äžããã«ãªããŸããã All photographs will be uploaded to this URLs(google photo). day1 https://t.co/w6Dgq8HBb4 day2 https://t.co/X1x03bFEDF day3 https://t.co/8rlXpfZTEB See you next year! #RubyKaigi #RubyKaigi2018 â nil (@KatsumaNarisawa) June 2, 2018 ããã«ãã£ãçšæããŠããŒã¹ã«ãè¶ãããã ããæ¹ã«ãé
ãããŠããŸãããã¹ããã«ãŒããã¡ãããã³ãã¬ããã«å ããŠå»çããããäŒããçµåµèãçšæããŸããã ããŒã¹ã«ã¯ãããããŸã§ãããããã®æ¹ã«ãè¶ãããã ããŸããïŒ CTO 平山ã®çºè¡š ãããŠãåæ¥ã® Lightning Talks åã®ã¹ãã³ãµãŒã® PR æ ã«ãŠåŒç€Ÿã® CTO 平山ãçºè¡šãããŸããã çºè¡šã§ã¯ããå»çãã«ã¹ã±ã¢åéã®èª²é¡ã解決ããããšããããã·ã§ã³ã®ããšã¡ãã¬ãŒã 4 ã€ã®äºæ¥ãè¡ã£ãŠããããšããŸããä»¥å æ¬ããã°ã§çŽ¹ä» ããŸãã 3 æ¬ã®ãã¥ãŒã¹ãªãªãŒã¹ãå«ãããã® 1 幎ã®ã¢ããããŒãå
容ãäžå¿ã«ç޹ä»ãããŠããã ããŸããã å
¬æŒã®éäžã§ã® CTO 平山ããã¡ãã¬ãŒã®ããšãç¥ã£ãŠãã人ïŒãšã®åãããã§ã7ã» 8 å²ã®æ¹ãææãããŠããã®ã¯ææ
šæ·±ãã£ãã§ãã åœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã§ãã çŸå°ã§ã®åå¿ ããŒã¹å±ç€ºãPR æ ã§ã®çºè¡šãéããŠä»¥äžã®ãããªå¬ããåå¿ãããã ããŸããïŒ ãªã³ã©ã€ã³èšºçã¯ãã£ãšæ®åãã¹ãã§ãããå°æ¹å»çã®èª²é¡è§£æ±ºã«ãç¹ããçŽ æŽãããåãçµã¿ã ãšæãã #rubikaigi2018 #rubykaigi #ã¡ãã¬ãŒ â ãµãã / SHOWROOM ã®äººäºããããã (@yufujikochan) May 31, 2018 [https://twitter.com/yucao24hours/status/1002105819297595392:embed] æå
ãåã£ãŠããŸã£ããã©çµåµèãããã«ãã£ã§é
ã£ãŠãããå®å¿ #rubykaigi pic.twitter.com/NeXWfTif6m â Motonori Iwata (@mobcov) June 1, 2018 ããŒã¹ã§ãã2 æ¥ç®ä»¥éã1 æ¥ç®ã®ã»ãã·ã§ã³èŠãŸããããŒããšè©±ããŠãã ããæ¹ãå€ããã¡ãã¬ãŒãšãã®ãããã¯ãã«ã€ã㊠Rubyist ã®çæ§ã«ç¥ã£ãŠããã ããšãŠãè¯ãæ©äŒã«ãªã£ãŠãããšæããŸããã ã»ãã·ã§ã³ã®æ§å ãšã³ãžãã¢ã¯ããŒã¹ã§ã®äŒç€Ÿç޹ä»ã®åéã«åèªæ°ã«ãªã£ãã»ãã·ã§ã³ãèŽè¬ããããããŸããã æèŠã§ãã mruby ãåãããã©ãŒãã³ã¹åšãã®è©±é¡ãå€ãã£ãããã«æããŸãããŸãã« 2018 幎çŸåšã® Ruby ãåãå·»ãç°å¢ã衚ããŠããæããããŸãããšã³ãžãã¢ãšããŠãããã£ãæè¡ã®ã»ãã·ã§ã³ãèããã®ã¯çŽç²ã«æ¥œããã§ãããæ¥ã
ã®éçºã«æŽ»ãããããªãã¿ããã£ãããšããšãŠãææçŸ©ãªæéãéãããŸããã åæ¥ã® keynote ã§ã® 1 ã³ãã Matz ããã® keynote ã«ããããŸãããäœäºããå¡ç¿ã銬ãã§ããæ¯å¹Ž Ruby ã¯æ»ã«ããããŠçãŸãå€ãããŸãïŒã¯ãªã¹ãã¹ã«ïŒãRuby ãåžžã«é²åããŠããããšãèã§æããããšã®ã§ããã»ãã·ã§ã³çŸ€ã§ããã çªå€ç·š ããŠãã¡ãã¬ãŒæäŸïŒïŒïŒã®ãåãã§ããä»åã¯å€§åŽå
«å¹¡å®®ã«åè©£ããããšã«ãªããŸããã 倧åŽå
«å¹¡å®®ã®ç€Ÿæ®¿ã¯åœå®ã«ãæå®ãããŠãããå®åæ¡å±±æä»£ã®è±ªè¯çµ¢çãªæ§åŒã®å»ºç¯ã§ãšãŠãé°å²æ°ã®ããç¥ç€Ÿã§ããã åæãã 3 人ã åæãã 2 人ãšãããæ®åœ±ãã 2 人ã ãããã« æšå¹Žã«åŒãç¶ãã¡ãã¬ãŒã® RubyKaigi åè³ã¯ 2 床ç®ã«ãªããŸããã ããŒã¹ã§äŒç€Ÿããããã¯ãã®èª¬æããŠãããšãã¡ãã¬ãŒç¥ã£ãŠãŸãããšã®å£°ãèãæ©äŒãå€ãããšãŠãå¬ããéãã§ããããããŸã§ä»¥äžã« Rubyãå»ç ÃIT ãçãäžããŠãããã°ãšããæ°æã¡ãèžã«ä»å°ãåŸã«ããŸããã ïŒæ°å¹¹ç·ããä»å°ã®å€çŒãããã·ã£ãªïŒ ãç¥ãã åŒç€Ÿã§ã¯ãå»ç x IT ãžã®ææŠãã«åãçµã¿ãããšã³ãžãã¢ã®ã¿ãªãããå¿ãããåŸ
ã¡ããŠãããŸãïŒ èå³ãããæ¹ã¯ããã¡ãã®ã話ãèããŠã¿ããããããé£çµ¡ãã ããã About æ ªåŒäŒç€Ÿã¡ãã¬ãŒ - Wantedly You can read employee interviews and the latest company's initiative of æ ªåŒäŒç€Ÿã¡ãã¬ãŒ. æ¥éãªé«éœ¢åãå»çè²»ã®é«éš°ãå»ççŸå Žã®ç²åŒãå«ã°ããäžã§ããã®ãŸãŸã§ã¯å®¶èšã倧ããå§è¿«ããŠæ¯ããããªããªããæ¥æ¬ã®å»çã¯åŽ©å£ããŠããŸããŸãããã®ç¶æ
ãè§£æ¶ããããã®éµããå»ççŸå Žã«ãããã¯ã©ãŠã掻çšãé§äœ¿ããæ¥åå¹çåãã§ãã ãããæ¥æ¬ã§ã¯ã忰以äžã®å»çæ©é¢ãããŸã ã«çŽã«ã«ããå©çšããŠãããªã©ãã¯ã©ãŠãåã¯çãããžã¿ã«æŽ»çšãé²ãã§ããªãã®ãçŸç¶ã§ããç§ãã¡ã¯ãã¯ãããžãŒã掻çšããäºæ¥ããããžã§ã¯ããéããŠãå»çãã«ã¹ã±ã¢åéã®ããžã¿ã«æŽ»çšãæšé²ããæ¥æ¬ã®æªæ¥ãäœãããã®åãçµã¿ãè¡ã£ãŠãããŸãã www.wantedly.com éçºæ¬éšã®é°å²æ°ããã£ãšç¥ãããæ¹ã¯ããã¡ãããã©ããã https://www.medley.jp/recruit/creative.html
ããã«ã¡ã¯ïŒéçºæ¬éšã®ãšã³ãžãã¢ã»åŸè€ã§ãã ã¡ãã¬ãŒã¯ 5/31ã6/2 ã«éå¬ããã RurbyKaigi 2018 ã« Lightning Talks Sponsor ãšããŠåè³ãããŠããã ããŸããïŒ æšå¹Ž ã® Ruby Sponsor ã«ç¶ãã2 幎ç®ã®åè³ã§ãïŒã ã€ãã³ãåœæ¥ã¯ãåŒç€Ÿãã CTO ã®å¹³å±±ãæ¡çšã»åºå ±ã®é¿éšãšæ·±æŸ€ããšã³ãžãã¢ã®ç°äžã宿žãåŸè€ã® 6 人ãåå ããŸãããä»åã¯ãã®æ§åãªã©ãã¬ããŒãããŸãã äŒå Žã®æ§å RubyKaigi 2018 㯠ä»å°åœéã»ã³ã¿ãŒ ã§ã®éå¬ã§ãããæšå¹Žã¯ åºå³¶ ãäžæšå¹Žã¯ äº¬éœ ãšããããšã§ãããã§å€©æ©ç«ã»å®®å³¶ã»æŸå³¶ã®æ¥æ¬äžæ¯ããããæ
ãäžæŠå®çµã«ãªããŸããã ä»å°åœéã»ã³ã¿ãŒã¯ä»å°é§
ããå°äžéæ±è¥¿ç·ã§ 3 é§
ç®ãšããã¢ã¯ã»ã¹ã®è¯ã奜ç«å°ã«ãããªããç·ã«å²ãŸããå¿å°ããå Žæã«ãããŸããã ã¡ã€ã³äŒå Žã¯ 1000 人å容ã§ããåºãäŒå Žã«ãªã£ãŠããŸããåã»ãã·ã§ã³ããã®äŒå ŽãåãŸããããã®çæ³ã¶ãã§ããã äžçå°å³&æ¥æ¬å°å³ãæ§ã
ãªå°åããã®åå è
ãããŸããïŒïŒrubyists ã« map ã¡ãœãããããŸããŠãŸããããããã¯å
容ã¯ååå è
ãã·ãŒã«ã貌ã£ãŠå®è£
ãïŒ å°å³ã®é£ã®ã¹ãã³ãµãŒããŒã芧ã«ã¡ãã¬ãŒããŽãããããšã確èªããŠãã·ã£ãã ããŒã¹ã®æ§å ç¶ããŠããŒã¹ã®æ§åã玹ä»ããŸããã¡ãã¬ãŒã³ãŒãã¬ãŒãã«ã©ãŒã®èµ€ãããŒã¹ãšãã以äžãªæãã®ä»äžããã«ãªããŸããã All photographs will be uploaded to this URLs(google photo). day1 https://t.co/w6Dgq8HBb4 day2 https://t.co/X1x03bFEDF day3 https://t.co/8rlXpfZTEB See you next year! #RubyKaigi #RubyKaigi2018 â nil (@KatsumaNarisawa) June 2, 2018 ããã«ãã£ãçšæããŠããŒã¹ã«ãè¶ãããã ããæ¹ã«ãé
ãããŠããŸãããã¹ããã«ãŒããã¡ãããã³ãã¬ããã«å ããŠå»çããããäŒããçµåµèãçšæããŸããã ããŒã¹ã«ã¯ãããããŸã§ãããããã®æ¹ã«ãè¶ãããã ããŸããïŒ CTO 平山ã®çºè¡š ãããŠãåæ¥ã® Lightning Talks åã®ã¹ãã³ãµãŒã® PR æ ã«ãŠåŒç€Ÿã® CTO 平山ãçºè¡šãããŸããã çºè¡šã§ã¯ããå»çãã«ã¹ã±ã¢åéã®èª²é¡ã解決ããããšããããã·ã§ã³ã®ããšã¡ãã¬ãŒã 4 ã€ã®äºæ¥ãè¡ã£ãŠããããšããŸããä»¥å æ¬ããã°ã§çŽ¹ä» ããŸãã 3 æ¬ã®ãã¥ãŒã¹ãªãªãŒã¹ãå«ãããã® 1 幎ã®ã¢ããããŒãå
容ãäžå¿ã«ç޹ä»ãããŠããã ããŸããã å
¬æŒã®éäžã§ã® CTO 平山ããã¡ãã¬ãŒã®ããšãç¥ã£ãŠãã人ïŒãšã®åãããã§ã7ã» 8 å²ã®æ¹ãææãããŠããã®ã¯ææ
šæ·±ãã£ãã§ãã åœæ¥ã®ã¹ã©ã€ãã¯ãã¡ãã§ãã çŸå°ã§ã®åå¿ ããŒã¹å±ç€ºãPR æ ã§ã®çºè¡šãéããŠä»¥äžã®ãããªå¬ããåå¿ãããã ããŸããïŒ ãªã³ã©ã€ã³èšºçã¯ãã£ãšæ®åãã¹ãã§ãããå°æ¹å»çã®èª²é¡è§£æ±ºã«ãç¹ããçŽ æŽãããåãçµã¿ã ãšæãã #rubikaigi2018 #rubykaigi #ã¡ãã¬ãŒ â ãµãã / SHOWROOM ã®äººäºããããã (@yufujikochan) May 31, 2018 [https://twitter.com/yucao24hours/status/1002105819297595392:embed] æå
ãåã£ãŠããŸã£ããã©çµåµèãããã«ãã£ã§é
ã£ãŠãããå®å¿ #rubykaigi pic.twitter.com/NeXWfTif6m â Motonori Iwata (@mobcov) June 1, 2018 ããŒã¹ã§ãã2 æ¥ç®ä»¥éã1 æ¥ç®ã®ã»ãã·ã§ã³èŠãŸããããŒããšè©±ããŠãã ããæ¹ãå€ããã¡ãã¬ãŒãšãã®ãããã¯ãã«ã€ã㊠Rubyist ã®çæ§ã«ç¥ã£ãŠããã ããšãŠãè¯ãæ©äŒã«ãªã£ãŠãããšæããŸããã ã»ãã·ã§ã³ã®æ§å ãšã³ãžãã¢ã¯ããŒã¹ã§ã®äŒç€Ÿç޹ä»ã®åéã«åèªæ°ã«ãªã£ãã»ãã·ã§ã³ãèŽè¬ããããããŸããã æèŠã§ãã mruby ãåãããã©ãŒãã³ã¹åšãã®è©±é¡ãå€ãã£ãããã«æããŸãããŸãã« 2018 幎çŸåšã® Ruby ãåãå·»ãç°å¢ã衚ããŠããæããããŸãããšã³ãžãã¢ãšããŠãããã£ãæè¡ã®ã»ãã·ã§ã³ãèããã®ã¯çŽç²ã«æ¥œããã§ãããæ¥ã
ã®éçºã«æŽ»ãããããªãã¿ããã£ãããšããšãŠãææçŸ©ãªæéãéãããŸããã åæ¥ã® keynote ã§ã® 1 ã³ãã Matz ããã® keynote ã«ããããŸãããäœäºããå¡ç¿ã銬ãã§ããæ¯å¹Ž Ruby ã¯æ»ã«ããããŠçãŸãå€ãããŸãïŒã¯ãªã¹ãã¹ã«ïŒãRuby ãåžžã«é²åããŠããããšãèã§æããããšã®ã§ããã»ãã·ã§ã³çŸ€ã§ããã çªå€ç·š ããŠãã¡ãã¬ãŒæäŸïŒïŒïŒã®ãåãã§ããä»åã¯å€§åŽå
«å¹¡å®®ã«åè©£ããããšã«ãªããŸããã 倧åŽå
«å¹¡å®®ã®ç€Ÿæ®¿ã¯åœå®ã«ãæå®ãããŠãããå®åæ¡å±±æä»£ã®è±ªè¯çµ¢çãªæ§åŒã®å»ºç¯ã§ãšãŠãé°å²æ°ã®ããç¥ç€Ÿã§ããã åæãã 3 人ã åæãã 2 人ãšãããæ®åœ±ãã 2 人ã ãããã« æšå¹Žã«åŒãç¶ãã¡ãã¬ãŒã® RubyKaigi åè³ã¯ 2 床ç®ã«ãªããŸããã ããŒã¹ã§äŒç€Ÿããããã¯ãã®èª¬æããŠãããšãã¡ãã¬ãŒç¥ã£ãŠãŸãããšã®å£°ãèãæ©äŒãå€ãããšãŠãå¬ããéãã§ããããããŸã§ä»¥äžã« Rubyãå»ç ÃIT ãçãäžããŠãããã°ãšããæ°æã¡ãèžã«ä»å°ãåŸã«ããŸããã ïŒæ°å¹¹ç·ããä»å°ã®å€çŒãããã·ã£ãªïŒ ãç¥ãã åŒç€Ÿã§ã¯ãå»ç x IT ãžã®ææŠãã«åãçµã¿ãããšã³ãžãã¢ã®ã¿ãªãããå¿ãããåŸ
ã¡ããŠãããŸãïŒ èå³ãããæ¹ã¯ããã¡ãã®ã話ãèããŠã¿ããããããé£çµ¡ãã ããã æ ªåŒäŒç€Ÿã¡ãã¬ãŒã®äŒç€Ÿæ
å ± - Wantedly æ ªåŒäŒç€Ÿã¡ãã¬ãŒã®é
åãäŒããã³ã³ãã³ããšãäœæã代衚ã»åŸæ¥å¡ãªã©ã®äŒç€Ÿæ
å ±ã§ããæ¥éãªé«éœ¢åãå»çè²»ã®é«éš°ãå»ççŸå Žã®ç²åŒãå«ã°ããäžã§ããã®ãŸãŸã§ã¯å®¶èšã倧ããå§è¿«ããŠæ¯ããããªããªããæ¥æ¬ã®å»çã¯åŽ©å£ããŠããŸããŸãããã®ç¶æ
ãè§£æ¶ããããã®éµããå»ççŸå Žã«ãããã¯ã©ãŠã掻çšãé§äœ¿ããæ¥åå¹çåãã§ãã ãããæ¥æ¬ã§ã¯ã忰以äžã®å»çæ©é¢ãããŸã ã«çŽã«ã«ããå©çšããŠãããªã©ãã¯ã©ãŠãåã¯çãããžã¿ã«æŽ»çšãé²ãã§ããªãã®ãçŸç¶ã§ããç§ãã¡ã¯ãã¯ãããžãŒã掻çšããäºæ¥ããããžã§ã¯ããéããŠãå»çãã«ã¹ã±ã¢åéã®ããžã¿ã«æŽ»çšãæšé²ããæ¥æ¬ã®æªæ¥ãäœãããã®åãçµã¿ãè¡ã£ãŠãããŸãã www.wantedly.com éçºæ¬éšã®é°å²æ°ããã£ãšç¥ãããæ¹ã¯ããã¡ãããã©ããã https://www.medley.jp/recruit/creative.html
ããã«ã¡ã¯ãéçºæ¬éšã®é«äºã§ããã¡ãã¬ãŒéçºæ¬éšã§è¡ãããŠããå匷äŒãTechLunchãã§ React Native ã«ã€ããŠçºè¡šããŸããã ç§ã¯æ®æ®µã¯ SwiftãKotlin/Java ã䜿ã£ãŠãã€ãã£ãã¢ããªãéçºããŠãããReact Native ã«è§Šãã®ã¯åããŠã§ãããããã§ä»åã¯ãã¢ããªãšã³ãžãã¢ã®èŠç¹ãããå®è£
ããããã®åºæ¬çãªç¥èãšåŒç€Ÿã®å®éã®éçºã§äœ¿ãããããæ€èšããçµæã«ã€ããŠã玹ä»ããŸãã ãªã React Native ãè§Šã£ãŠã¿ãããšæã£ãã ãªã³ã©ã€ã³èšºçã¢ããªã CLINICS ãã®éçºã§ã¯ãiOS/Android ã¢ããªãããããã®ãã€ãã£ãèšèªã§å¥ã
ã«éçºããŠãããããå®è£
ãã¬ãã¥ãŒã®éã«ã¯ãã©ãããã©ãŒã éã®ä»æ§ã®éããçè§£ããå¿
èŠãããããªããªã倧å€ã ãšæããŠããŸããã ãããã®èª²é¡ã«å¯Ÿã㊠ãã¡ã ã®ããã°ã§ã玹ä»ãããããªæœçãè¡ã£ãŠæ¹åãè¡ã£ãŠããŸãããããœãŒã¹ãå
±éåããããšã§ããéçºå¹çãåäžã§ããªãããšæããã¯ãã¹ãã©ãããã©ãŒã éçºã«ã€ããŠã調ã¹ãŠã¿ãããšã«ããŸããã ãã®äžã§ã以äžã®çç±ãããä»å㯠React Native ã«ã€ããŠèª¿ã¹ãŠã¿ãããšã«ããŸããã JavaScriptïŒä»¥äž JSïŒã» React ã®ãããWeb ãšã³ãžãã¢ããã€ãã£ãã¢ããªéçºãè¡ãéã®ããŒãã«ãäœãããããšãã§ããã UI ã®å®è£
ã«ãã€ãã£ã UI ã䜿çšããŠããã®ã§èªç¶ãªãã¶ã€ã³ãã€ã³ã¿ã©ã¯ã·ã§ã³ãäœããããã ããçšåºŠãªãªãŒã¹ããæéãçµã£ãŠæ
å ±ãè±å¯ã«ãã ç¹ã«åŒç€Ÿã§ã¯ããã€ãã£ãã¢ããªãã Web éçºãã¡ã€ã³ã«è¡ã£ãŠãããšã³ãžãã¢ã®æ¹ãå€ãããŸã Web ããã³ãã« React ã䜿ãããŠãããããã¯ããããã€ãããã®ã§ãReact Native ãæ¡çšããããšã§ããŒã ã®éçºå¹çã®åäžã ãã§ãªããéçºæ¬éšå
šäœã§ããã€ãã£ãã¢ããªéçºã®åŠç¿ã³ã¹ããäœããªãã®ã§ã¯ãªãããšèããŸããã ããã§ã以éã§ã¯ãã€ãã£ãã¢ããªãšã³ãžãã¢ãš Web ãšã³ãžãã¢ããããã«ãšã£ãŠãéçºãããããã©ãããšãã芳ç¹ã§ React Native ã®éçºæ¹æ³ãèŠãŠãããããšæããŸãã åæèšå®ã«ã€ã㊠ã€ã³ã¹ããŒã«ãã¢ããªå®è¡ ã€ã³ã¹ããŒã«ã¯å
¬åŒã® Getting Started ã«ããããŸããã以äžã®ã³ãã³ãã§å®äºã§ãã $ brew install node $ brew install watchman $ npm install -g react-native-cli ä»åãç§ãè§Šãã«ããã£ãŠã¯ Xcode ãš Android Studio ã®ã·ãã¥ã¬ãŒã¿ïŒãšãã¥ã¬ãŒã¿ïŒã§å®è¡ããªããéçºããŸããããReact Native 㯠Xcode ã Android Studio ãã€ã³ã¹ããŒã«ãããŠããªããŠãã Expo ãšããã¯ã©ã€ã¢ã³ãã¢ããªã宿©ã«ã€ã³ã¹ããŒã«ããããšã§ç»é¢ããã¬ãã¥ãŒããªããéçºããããšãã§ããŸãã ãããªããXcode ã®ããŠã³ããŒããåŸ
ã€å¿
èŠããããŸããïŒïŒiOS ãšã³ãžãã¢ã§ãã¢ããã°ã¬ãŒãã®ãã³ã« Xcode ã®ããŠã³ããŒããåŸ
ã€ã®ã¯ã€ã©ã€ã©ããŸãïŒ æ¬¡ã«ããããžã§ã¯ãäœæãã·ãã¥ã¬ãŒã¿ã§ã®ã¢ããªå®è¡ã¯ä»¥äžã®ã³ãã³ãã§å®è¡ã§ããŸãã ãã ããã·ãã¥ã¬ãŒã¿å®è¡åã« Xcode Command Line Tools ã®ã€ã³ã¹ããŒã«ãš Android Studio ã§ããã€ãã®èšå®ïŒSDK ã®ã€ã³ã¹ããŒã«ãAVD ã®äœæãç°å¢å€æ°ã®èšå®ïŒãå¿
èŠã§ãã # ãããžã§ã¯ãäœæ $ react-native init AwesomeProject  # ã¢ããªå®è¡ïŒã·ãã¥ã¬ãŒã¿ïŒ $ cd AwesomeProject $ react-native run-ios or react-native run-android # Android ã®å Žåãemulator ãå¥éèµ·åããŠããã§ãªããšå®è¡ã§ããªã å®è£
ããŠã¿ãææ³ UI ã®å®è£
æ¹æ³ React Native ã§ã¯ React åæ§ UI ã®åããŒããã³ã³ããŒãã³ããšåŒã³ãããããé
眮ããããšã§ UI ãå®è£
ããŠãããŸããéã㯠Web ã® HTML ã®ä»£ããã« Native ã® UI ãæç»ããããã®ã³ã³ããŒãã³ããšããŠäœ¿ãç¹ã§ãã èŠãç®ãã¬ã€ã¢ãŠã㯠CSS ãšäŒŒããããªåœ¢åŒã§èšè¿°ããŸããReact Native ã§äœ¿ããã¹ã¿ã€ã«ã®ããããã£ã¯åã³ã³ããŒãã³ãã§ç°ãªããŸãããäŸãã°ãView ã³ã³ããŒãã³ãã«èšå®ã§ããããããã£ã«ã¯ä»¥äžã®ãããªãã®ããããŸãã View Style Props Layout Props Web ã§äœ¿ãããŠãããã®ãšå
šãåããšããããã§ã¯ãªãã§ãããflexãmarginãborder ãªã©ã®äœ¿ãæ
£ããŠãã CSS ã®ããããã£åã§èšå®ã§ããã®ã§ãWeb ãšã³ãžãã¢ã«ãšã£ãŠã¯å®è£
ã®ããŒãã«ãäžããã®ã§ã¯ãªãããšæããŸããããã ãæ®æ®µ CSS ãè§Šã£ãŠããªããã€ãã£ãã¢ããªãšã³ãžãã¢ã«ãšã£ãŠã¯åŠç¿ã³ã¹ããããããšæããŸãã ãŸãäžåºŠãã«ãããã°ãJS ã«ããä¿®æ£å
容ããã«ããªãã§ã·ãã¥ã¬ãŒã¿ã«åæ ããããšãã§ããã®ã§ãView åšãã®èª¿æŽã¯å¹ççã«ã§ãããã§ããã // js/components/home.js const renderItem = ({ item , index }) => ( < View style = { styles . row } > < Text style = { styles . title } >        { parseInt ( index , 10 ) + 1 }        { ". " }        { item . title } </ Text >      < Text style = { styles . description } > { item . description } </ Text > </ View > ); const styles = StyleSheet . create ({ row: { borderBottomWidth: 1 , borderColor: "#ccc" , padding: 10 , }, title: { fontSize: 15 , fontWeight: "600" , }, description: { marginTop: 5 , fontSize: 14 , }, }); ãã ãOS ããšã«ãããµãã€ã³ãåãããæ¹éã«ããªãéãã¯ãã³ãŒããå¥ã
ã«ãªããšããããããšå€ããªãããã ãšæããŸããã äŸãã°ãTabBar(iOS)ãš DrawerLayout(Android)ãDatePicker(iOS)ãš TimePicker(Android)ãProgressView(iOS)ãš ProgressBar(Android)ãªã©ã¯ React Native ã§ã¯å¥ã³ã³ããŒãã³ããšããŠæäŸãããŠããŠãAPI ãéã£ãŠããŸããã ç»é¢é·ç§» ç»é¢é·ç§»ïŒããã·ã¥ãã¢ãŒãã«ãã¿ãé·ç§»ãªã©ïŒã®ããã« API ãšããŠå
¬åŒã§æäŸãããŠããã®ã¯ iOS ã®ã¿ã§ Android ã¯å¥éãå®è£
ãããããµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿çšããå¿
èŠããããŸãã ãããã䜿ã£ãŠã¿ã react-native-navigation ã¯ã¢ãŒãã«ãããã·ã¥ãªã©ã®é·ç§»ããã€ãã£ã API ããŒã¹ã§å®è£
ãããŠããã®ã§ããã€ãã£ãèšèªã§å®è£
ããå Žåãšæ¯ã¹ãŠéåæãªãå®è£
ããããšãã§ããŸããã äžèšã®ãããªåœ¢ã§ããã·ã¥ãã¢ãŒãã«è¡šç€ºã§ã®é·ç§»ãã§ããŸããç¹å®ã®ç»é¢ã«æ»ãæ©èœã«ã€ããŠã¯éçºäžã§ãã£ãããæ©èœçãªå¶çŽã¯å°ãããããã§ãããããã现ãããšããã¯ãã€ãã£ãèšèªã§ãã£ãæ¹ãèªç±ãå¹ãã®ã§ãè¯ããªãšæããŸãã ããã§ããiOS ãš Android ã§ã¯è€æ°ç»é¢ã®ç®¡çãé·ç§»ã«ã€ããŠã®èãæ¹ãéããAndroid ãåããŠéçºããæã«åãããšãå®çŸããã®ãé£ããã£ãèŠããããã®ã§ãå
±éã®æ¹æ³ã§å®çŸã§ããã®ã¯äŸ¿å©ã§ãããç¹ã« Web ã ãšããŸãç»é¢éã®é·ç§»ã«ã€ããŠèããããšã¯ãªããšæãã®ã§ãå
±éåãããŠãããšãã€ãã£ãã¢ããªéçºã®åŠç¿ã³ã¹ããäžãããšæããŸãã this . props . navigator . push ({ // ããã·ã¥ screen: "example.PushedScreen" , title: "Pushed Screen" , }); this . props . navigator . pop ({ // åã®ç»é¢ã«æ»ã animated: true , animationType: "fade" , }); this . props . navigator . showModal ({ // ã¢ãŒãã« screen: "example.ModalScreen" , title: "Modal" , animationType: "slide-up" , }); ãããã¯ãŒã¯åšã ãããã¯ãŒã¯çµç±ã§ããŒã¿ãååŸããŠãã¢ãã«ã«å€æããã¢ããªå
ã§äœ¿ããšããããããæäœãè¡ãã«ã¯ Fetch API ãå©çšããŸãã Fetch API 㯠JS ã§æäŸãããŠãã Promise ããŒã¹ã® API ã§ããäŸãã°ã以äžã®ãããªåœ¢ã§ JSON ãè¿ã API ããããŒã¿ãååŸãã receiveHelthNews 颿°ã«ãªããžã§ã¯ãã«å€æããé
åãæž¡ãããšãã§ããŸããJS ã® API ãªã®ã§ Web ãšã³ãžãã¢ã«ãšã£ãŠã¯äœ¿ããããã®ã§ã¯ãªãããšæããŸãã ãã€ãã£ãèšèªã§ããããå®è£
ããå Žåã¯ãURLSession(iOS)ãš HttpURLConnection(Android)ããããã¯åãã©ãããã©ãŒã åãã«æäŸãããŠãããµãŒãããŒãã£ã®ã©ã€ãã©ãªãªã©ã䜿ããšæããŸãããåœç¶ãAPI ã¯ç°ãªãã®ã§ããããã®å®è£
æ¹æ³ãææ¡ããªããšãããªããªããŸããããã«æ¯ã¹ããšåŠç¿ã³ã¹ãã¯äœããªãããã§ãã // js/actions/index.js export function fetchHelthNews () { return ( dispatch ) => fetch ( constructHealthNewsUrl ()) . then (( response ) => response . json ()) . then (( json ) => dispatch ( receiveHelthNews ( json . articles ))) . catch (( error ) => { console . log ( error ); }); } ãã€ãã£ãã¢ããªç¹æã®æ©èœã«ã€ã㊠ãã®ä»ã®ã¢ããªéçºã§ãã䜿ããã€ãã£ãã¢ããªç¹æã®æ©èœãå®è£
ããæ¹æ³ã¯ä»¥äžã®ããã«ãªããŸããå€ãã®æ©èœããµãŒãããŒãã£ã®ã©ã€ãã©ãªã«äŸåããŠããã®ã§ãåèšèªã®ããŒãžã§ã³ã¢ããæã®å¯Ÿå¿ãå°ãå¿é
ã§ã¯ãããŸãããããäœ¿ãæ©èœã«ã€ããŠã¯å®çŸããããšãã§ããŸãã Push éç¥ïŒAndroid ã¯ãã³ããªã³ã°ãã API ãå
¬åŒã§æäŸãããŠããªãã®ã§ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿ã ã«ã¡ã©ãããŒãã§ãŒã³ã¢ã¯ã»ã¹/ãŠãŒã¶ããã©ã«ãïŒå
¬åŒã® API ã¯æäŸãããŠããªãã®ã§ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿ã äœçœ®æ
å ±ã®ååŸïŒå
¬åŒ API ãæäŸãããŠãã ãã£ãŒããªã³ã¯ïŒã¢ããªèµ·åæã«ãã³ããªã³ã°ãè¡ã API ã¯æäŸãããŠããããŠãããŒãµã«ãªã³ã¯ã IntentFilter ã®èšå®ã¯åãã©ãããã©ãŒã ã§åå¥ã«å¿
èŠã«ãªã ãªãªãŒã¹ã¯ã©ãããã ã¢ãŒã«ã€ããã¹ãã¢é
åžã«ã€ããŠã¯ãã€ãã£ãã¢ããªã®é
åžãšåãããã»ã¹ã«ãªããŸãã åãã©ãããã©ãŒã ã§èšŒææžçã®èšå®ãè¡ããXcode ã Android Studioãããã㯠CLI ã§ã³ãã³ããå®è¡ããŠãipa / apk ãã¡ã€ã«ãäœæããå Store ã«ã¢ããããŒãããå¿
èŠããããŸãã CI 㯠Bitrise ãªã©ã䜿ããŸããBitrise ã§ãã«ãã詊ããŠã¿ãŸããããReact Native ã®ãªããžããªãšæ¥ç¶ãããšãã«ã§ããããã©ã«ãã®ã¯ãŒã¯ãããŒã䜿ãã°ãåæã« 2 ãã©ãããã©ãŒã ã®ã¢ãŒã«ã€ããäœæã§ããŠäŸ¿å©ã§ããã ããšããŸã 詊ããŠã¯ããªãã®ã§ãã CodePush ã䜿ãã°ã審æ»ã«æåºããããšãªãã«æ¢åã®ã¢ããªã倿Žããããšãã§ãããããã®ã§ãéåžžã«äŸ¿å©ã ãšæããŸããã ã©ããªå Žåã« React Native ãæ¡çšã§ãããã? React Native ã§éçºããããšã§ãWeb éçºè
ã®èŠç¹ã§èŠããšãã©ãããã©ãŒã ã®ãã€ãã£ãèšèªã§éçºããããããã ãã¶åŠç¿ã³ã¹ããäžããã®ã§ã¯ãªãããšæããŸããããŸããµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿ãã°ãæ©èœçã«å€§ããªåé¡ãšãªããããªããšã¯ãªãããã§ããããã ãç»é¢é·ç§»ã®ã©ã€ãã©ãªãããã ã£ãããã«ãããããããããšãã§ããªããšããå Žåã¯ã劥åããªããšãããªãéšåãåºãŠãããã ãšæããŸããã äžæ¹ãã¢ããªãšã³ãžãã¢ã«ãšã£ãŠã¯ãæ
£ãããŸã§ã¯ããªãéçºé床ãäžãããããªã®ã§ãã¡ãªããã倧ããããªãšæããŸãããReact ãš JSããŸã Redux ãªã©ãæ°ãã«çè§£ãã€ã€éçºããŠããã®ã§çµæ§ããŒãã«ãé«ããšæããŸãããéçºç°å¢ããã«ããéã£ãŠããã¡ã¯ãView åšãã®èª¿æŽãããã«ç¢ºèªã§ããŠè¯ãã£ãã®ã§ãããã©ã³ã¿ã€ã ãšã©ãŒã«ãªããªã©ã§ãã·ãã¥ã¬ãŒã¿ããªããŒãã§ããªããªã£ãå Žåã«å床ãã«ããçŽããšããããšãããèµ·ãããåžžã«å¿«é©ã«éçºã§ãããšããããã§ã¯ãããŸããã§ããã éçšé¢ã§ã¿ããšäžéãã¢ãããªéçºã«å¿
èŠãããªããŒã«ã¯æã£ãŠããã(ã¯ã©ãã·ã¥ç£èŠãCIããã¹ãé
ä¿¡ããªãªãŒã¹)ãCode Push ãªã©äŸ¿å©ãªããŒã«ãããã®ã§å©ç¹ãå€ããšæããŸããã çµè«ãšããŠã¯ãWeb ãšã³ãžãã¢ã瀟å
ã«å€ãã£ãããéçºããŒã ã« ReactãJS ãåŸæãªã¡ã³ããŒããããªããå®éã®éçºã§ã䜿ããããªãšæããŸããããã ãã¢ããªãšã³ãžãã¢ã«ãšã£ãŠã¯ããªãã¹ãã¬ã¹ãããŸããããžã§ã¯ãã«ãªãããã ãšæããŸããã ãŸãšã èªåã®çŸç¶ã§èãããšãã¢ããªã¯åŸæã ãã© JS ã React ã«ãããŸã§è©³ãããªãã®ã§ãããçŽè¿ã®ãããžã§ã¯ãã§é£æåºŠãããããé«ãããã§ããã°ãæ£çŽãããŸã䜿ããããªããªããšããæ°æã¡ããããŸãããã ãæè¡ã®å¹
ãåºãããšããçµç¹å
šäœã®ããŒã¿ããªãã£ãªã©ã®èгç¹ã§èãããšå©ç¹ãçµæ§ããã®ããªãšæããŸãããã£ã³ã¹ãããã°ãã²ããã£ã¬ã³ãžããŠã¿ããã§ãã ãããã¯ã©ã¡ãããšãããšæè¡ãéçºããŒã«ã®æ°ãããããããŠãŒã¶ãšã®æ¥ç¹ã®ãšããã§æ°ããããšãé¢çœãããšã远æ±ããããšæã£ãŠããŸãããéçºå¹çãå質ã®åäžã®ããã«æé©ãªãã®ãéžæã§ããããã«ãä»åŸãæ°ããããŒã«ã®ãã£ããã¢ããã¯ç©æ¥µçã«è¡ã£ãŠãããããšæã£ãŠããŸãã ãç¥ãã ã¡ãã¬ãŒã¯ã5/31-6/2 ã«éå¬ããã RubyKaigi 2018 ã« LT ã¹ãã³ãµãŒãšããŠåè³ããŸããããŒã¹ãæ§ããŠãããŸãã®ã§ãã€ãã³ãã«ãè¶ãã«ãªãæ¹ã¯ããã²ããŒã¹ã«ãéã³ã«ããããŠãã ããïŒ RubyKaigi 2018, 5/31...6/2, Sendai, Miyagi, Japan #rubykaigi RubyKaigi 2018, 5/31...6/2, Sendai, Miyagi, Japan rubykaigi.org
ããã«ã¡ã¯ãéçºæ¬éšã®é«äºã§ããã¡ãã¬ãŒéçºæ¬éšã§è¡ãããŠããå匷äŒãTechLunchãã§ React Native ã«ã€ããŠçºè¡šããŸããã ç§ã¯æ®æ®µã¯ SwiftãKotlin/Java ã䜿ã£ãŠãã€ãã£ãã¢ããªãéçºããŠãããReact Native ã«è§Šãã®ã¯åããŠã§ãããããã§ä»åã¯ãã¢ããªãšã³ãžãã¢ã®èŠç¹ãããå®è£
ããããã®åºæ¬çãªç¥èãšåŒç€Ÿã®å®éã®éçºã§äœ¿ãããããæ€èšããçµæã«ã€ããŠã玹ä»ããŸãã ãªã React Native ãè§Šã£ãŠã¿ãããšæã£ãã ãªã³ã©ã€ã³èšºçã¢ããªã CLINICS ãã®éçºã§ã¯ãiOS/Android ã¢ããªãããããã®ãã€ãã£ãèšèªã§å¥ã
ã«éçºããŠãããããå®è£
ãã¬ãã¥ãŒã®éã«ã¯ãã©ãããã©ãŒã éã®ä»æ§ã®éããçè§£ããå¿
èŠãããããªããªã倧å€ã ãšæããŠããŸããã ãããã®èª²é¡ã«å¯Ÿã㊠ãã¡ã ã®ããã°ã§ã玹ä»ãããããªæœçãè¡ã£ãŠæ¹åãè¡ã£ãŠããŸãããããœãŒã¹ãå
±éåããããšã§ããéçºå¹çãåäžã§ããªãããšæããã¯ãã¹ãã©ãããã©ãŒã éçºã«ã€ããŠã調ã¹ãŠã¿ãããšã«ããŸããã ãã®äžã§ã以äžã®çç±ãããä»å㯠React Native ã«ã€ããŠèª¿ã¹ãŠã¿ãããšã«ããŸããã JavaScriptïŒä»¥äž JSïŒã» React ã®ãããWeb ãšã³ãžãã¢ããã€ãã£ãã¢ããªéçºãè¡ãéã®ããŒãã«ãäœãããããšãã§ããã UI ã®å®è£
ã«ãã€ãã£ã UI ã䜿çšããŠããã®ã§èªç¶ãªãã¶ã€ã³ãã€ã³ã¿ã©ã¯ã·ã§ã³ãäœããããã ããçšåºŠãªãªãŒã¹ããæéãçµã£ãŠæ
å ±ãè±å¯ã«ãã ç¹ã«åŒç€Ÿã§ã¯ããã€ãã£ãã¢ããªãã Web éçºãã¡ã€ã³ã«è¡ã£ãŠãããšã³ãžãã¢ã®æ¹ãå€ãããŸã Web ããã³ãã« React ã䜿ãããŠãããããã¯ããããã€ãããã®ã§ãReact Native ãæ¡çšããããšã§ããŒã ã®éçºå¹çã®åäžã ãã§ãªããéçºæ¬éšå
šäœã§ããã€ãã£ãã¢ããªéçºã®åŠç¿ã³ã¹ããäœããªãã®ã§ã¯ãªãããšèããŸããã ããã§ã以éã§ã¯ãã€ãã£ãã¢ããªãšã³ãžãã¢ãš Web ãšã³ãžãã¢ããããã«ãšã£ãŠãéçºãããããã©ãããšãã芳ç¹ã§ React Native ã®éçºæ¹æ³ãèŠãŠãããããšæããŸãã åæèšå®ã«ã€ã㊠ã€ã³ã¹ããŒã«ãã¢ããªå®è¡ ã€ã³ã¹ããŒã«ã¯å
¬åŒã® Getting Started ã«ããããŸããã以äžã®ã³ãã³ãã§å®äºã§ãã $ brew install node $ brew install watchman $ npm install -g react-native-cli ä»åãç§ãè§Šãã«ããã£ãŠã¯ Xcode ãš Android Studio ã®ã·ãã¥ã¬ãŒã¿ïŒãšãã¥ã¬ãŒã¿ïŒã§å®è¡ããªããéçºããŸããããReact Native 㯠Xcode ã Android Studio ãã€ã³ã¹ããŒã«ãããŠããªããŠãã Expo ãšããã¯ã©ã€ã¢ã³ãã¢ããªã宿©ã«ã€ã³ã¹ããŒã«ããããšã§ç»é¢ããã¬ãã¥ãŒããªããéçºããããšãã§ããŸãã ãããªããXcode ã®ããŠã³ããŒããåŸ
ã€å¿
èŠããããŸããïŒïŒiOS ãšã³ãžãã¢ã§ãã¢ããã°ã¬ãŒãã®ãã³ã« Xcode ã®ããŠã³ããŒããåŸ
ã€ã®ã¯ã€ã©ã€ã©ããŸãïŒ æ¬¡ã«ããããžã§ã¯ãäœæãã·ãã¥ã¬ãŒã¿ã§ã®ã¢ããªå®è¡ã¯ä»¥äžã®ã³ãã³ãã§å®è¡ã§ããŸãã ãã ããã·ãã¥ã¬ãŒã¿å®è¡åã« Xcode Command Line Tools ã®ã€ã³ã¹ããŒã«ãš Android Studio ã§ããã€ãã®èšå®ïŒSDK ã®ã€ã³ã¹ããŒã«ãAVD ã®äœæãç°å¢å€æ°ã®èšå®ïŒãå¿
èŠã§ãã # ãããžã§ã¯ãäœæ $ react-native init AwesomeProject  # ã¢ããªå®è¡ïŒã·ãã¥ã¬ãŒã¿ïŒ $ cd AwesomeProject $ react-native run-ios or react-native run-android # Android ã®å Žåãemulator ãå¥éèµ·åããŠããã§ãªããšå®è¡ã§ããªã å®è£
ããŠã¿ãææ³ UI ã®å®è£
æ¹æ³ React Native ã§ã¯ React åæ§ UI ã®åããŒããã³ã³ããŒãã³ããšåŒã³ãããããé
眮ããããšã§ UI ãå®è£
ããŠãããŸããéã㯠Web ã® HTML ã®ä»£ããã« Native ã® UI ãæç»ããããã®ã³ã³ããŒãã³ããšããŠäœ¿ãç¹ã§ãã èŠãç®ãã¬ã€ã¢ãŠã㯠CSS ãšäŒŒããããªåœ¢åŒã§èšè¿°ããŸããReact Native ã§äœ¿ããã¹ã¿ã€ã«ã®ããããã£ã¯åã³ã³ããŒãã³ãã§ç°ãªããŸãããäŸãã°ãView ã³ã³ããŒãã³ãã«èšå®ã§ããããããã£ã«ã¯ä»¥äžã®ãããªãã®ããããŸãã View Style Props Layout Props Web ã§äœ¿ãããŠãããã®ãšå
šãåããšããããã§ã¯ãªãã§ãããflexãmarginãborder ãªã©ã®äœ¿ãæ
£ããŠãã CSS ã®ããããã£åã§èšå®ã§ããã®ã§ãWeb ãšã³ãžãã¢ã«ãšã£ãŠã¯å®è£
ã®ããŒãã«ãäžããã®ã§ã¯ãªãããšæããŸããããã ãæ®æ®µ CSS ãè§Šã£ãŠããªããã€ãã£ãã¢ããªãšã³ãžãã¢ã«ãšã£ãŠã¯åŠç¿ã³ã¹ããããããšæããŸãã ãŸãäžåºŠãã«ãããã°ãJS ã«ããä¿®æ£å
容ããã«ããªãã§ã·ãã¥ã¬ãŒã¿ã«åæ ããããšãã§ããã®ã§ãView åšãã®èª¿æŽã¯å¹ççã«ã§ãããã§ããã // js/components/home.js const renderItem = ({ item , index }) => ( < View style = { styles . row } > < Text style = { styles . title } >        { parseInt ( index , 10 ) + 1 }        { ". " }        { item . title } </ Text >      < Text style = { styles . description } > { item . description } </ Text > </ View > ); const styles = StyleSheet . create ({ row: { borderBottomWidth: 1 , borderColor: "#ccc" , padding: 10 , }, title: { fontSize: 15 , fontWeight: "600" , }, description: { marginTop: 5 , fontSize: 14 , }, }); ãã ãOS ããšã«ãããµãã€ã³ãåãããæ¹éã«ããªãéãã¯ãã³ãŒããå¥ã
ã«ãªããšããããããšå€ããªãããã ãšæããŸããã äŸãã°ãTabBar(iOS)ãš DrawerLayout(Android)ãDatePicker(iOS)ãš TimePicker(Android)ãProgressView(iOS)ãš ProgressBar(Android)ãªã©ã¯ React Native ã§ã¯å¥ã³ã³ããŒãã³ããšããŠæäŸãããŠããŠãAPI ãéã£ãŠããŸããã ç»é¢é·ç§» ç»é¢é·ç§»ïŒããã·ã¥ãã¢ãŒãã«ãã¿ãé·ç§»ãªã©ïŒã®ããã« API ãšããŠå
¬åŒã§æäŸãããŠããã®ã¯ iOS ã®ã¿ã§ Android ã¯å¥éãå®è£
ãããããµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿çšããå¿
èŠããããŸãã ãããã䜿ã£ãŠã¿ã react-native-navigation ã¯ã¢ãŒãã«ãããã·ã¥ãªã©ã®é·ç§»ããã€ãã£ã API ããŒã¹ã§å®è£
ãããŠããã®ã§ããã€ãã£ãèšèªã§å®è£
ããå Žåãšæ¯ã¹ãŠéåæãªãå®è£
ããããšãã§ããŸããã äžèšã®ãããªåœ¢ã§ããã·ã¥ãã¢ãŒãã«è¡šç€ºã§ã®é·ç§»ãã§ããŸããç¹å®ã®ç»é¢ã«æ»ãæ©èœã«ã€ããŠã¯éçºäžã§ãã£ãããæ©èœçãªå¶çŽã¯å°ãããããã§ãããããã现ãããšããã¯ãã€ãã£ãèšèªã§ãã£ãæ¹ãèªç±ãå¹ãã®ã§ãè¯ããªãšæããŸãã ããã§ããiOS ãš Android ã§ã¯è€æ°ç»é¢ã®ç®¡çãé·ç§»ã«ã€ããŠã®èãæ¹ãéããAndroid ãåããŠéçºããæã«åãããšãå®çŸããã®ãé£ããã£ãèŠããããã®ã§ãå
±éã®æ¹æ³ã§å®çŸã§ããã®ã¯äŸ¿å©ã§ãããç¹ã« Web ã ãšããŸãç»é¢éã®é·ç§»ã«ã€ããŠèããããšã¯ãªããšæãã®ã§ãå
±éåãããŠãããšãã€ãã£ãã¢ããªéçºã®åŠç¿ã³ã¹ããäžãããšæããŸãã this . props . navigator . push ({ // ããã·ã¥ screen: "example.PushedScreen" , title: "Pushed Screen" , }); this . props . navigator . pop ({ // åã®ç»é¢ã«æ»ã animated: true , animationType: "fade" , }); this . props . navigator . showModal ({ // ã¢ãŒãã« screen: "example.ModalScreen" , title: "Modal" , animationType: "slide-up" , }); ãããã¯ãŒã¯åšã ãããã¯ãŒã¯çµç±ã§ããŒã¿ãååŸããŠãã¢ãã«ã«å€æããã¢ããªå
ã§äœ¿ããšããããããæäœãè¡ãã«ã¯ Fetch API ãå©çšããŸãã Fetch API 㯠JS ã§æäŸãããŠãã Promise ããŒã¹ã® API ã§ããäŸãã°ã以äžã®ãããªåœ¢ã§ JSON ãè¿ã API ããããŒã¿ãååŸãã receiveHelthNews 颿°ã«ãªããžã§ã¯ãã«å€æããé
åãæž¡ãããšãã§ããŸããJS ã® API ãªã®ã§ Web ãšã³ãžãã¢ã«ãšã£ãŠã¯äœ¿ããããã®ã§ã¯ãªãããšæããŸãã ãã€ãã£ãèšèªã§ããããå®è£
ããå Žåã¯ãURLSession(iOS)ãš HttpURLConnection(Android)ããããã¯åãã©ãããã©ãŒã åãã«æäŸãããŠãããµãŒãããŒãã£ã®ã©ã€ãã©ãªãªã©ã䜿ããšæããŸãããåœç¶ãAPI ã¯ç°ãªãã®ã§ããããã®å®è£
æ¹æ³ãææ¡ããªããšãããªããªããŸããããã«æ¯ã¹ããšåŠç¿ã³ã¹ãã¯äœããªãããã§ãã // js/actions/index.js export function fetchHelthNews () { return ( dispatch ) => fetch ( constructHealthNewsUrl ()) . then (( response ) => response . json ()) . then (( json ) => dispatch ( receiveHelthNews ( json . articles ))) . catch (( error ) => { console . log ( error ); }); } ãã€ãã£ãã¢ããªç¹æã®æ©èœã«ã€ã㊠ãã®ä»ã®ã¢ããªéçºã§ãã䜿ããã€ãã£ãã¢ããªç¹æã®æ©èœãå®è£
ããæ¹æ³ã¯ä»¥äžã®ããã«ãªããŸããå€ãã®æ©èœããµãŒãããŒãã£ã®ã©ã€ãã©ãªã«äŸåããŠããã®ã§ãåèšèªã®ããŒãžã§ã³ã¢ããæã®å¯Ÿå¿ãå°ãå¿é
ã§ã¯ãããŸãããããäœ¿ãæ©èœã«ã€ããŠã¯å®çŸããããšãã§ããŸãã Push éç¥ïŒAndroid ã¯ãã³ããªã³ã°ãã API ãå
¬åŒã§æäŸãããŠããªãã®ã§ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿ã ã«ã¡ã©ãããŒãã§ãŒã³ã¢ã¯ã»ã¹/ãŠãŒã¶ããã©ã«ãïŒå
¬åŒã® API ã¯æäŸãããŠããªãã®ã§ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿ã äœçœ®æ
å ±ã®ååŸïŒå
¬åŒ API ãæäŸãããŠãã ãã£ãŒããªã³ã¯ïŒã¢ããªèµ·åæã«ãã³ããªã³ã°ãè¡ã API ã¯æäŸãããŠããããŠãããŒãµã«ãªã³ã¯ã IntentFilter ã®èšå®ã¯åãã©ãããã©ãŒã ã§åå¥ã«å¿
èŠã«ãªã ãªãªãŒã¹ã¯ã©ãããã ã¢ãŒã«ã€ããã¹ãã¢é
åžã«ã€ããŠã¯ãã€ãã£ãã¢ããªã®é
åžãšåãããã»ã¹ã«ãªããŸãã åãã©ãããã©ãŒã ã§èšŒææžçã®èšå®ãè¡ããXcode ã Android Studioãããã㯠CLI ã§ã³ãã³ããå®è¡ããŠãipa / apk ãã¡ã€ã«ãäœæããå Store ã«ã¢ããããŒãããå¿
èŠããããŸãã CI 㯠Bitrise ãªã©ã䜿ããŸããBitrise ã§ãã«ãã詊ããŠã¿ãŸããããReact Native ã®ãªããžããªãšæ¥ç¶ãããšãã«ã§ããããã©ã«ãã®ã¯ãŒã¯ãããŒã䜿ãã°ãåæã« 2 ãã©ãããã©ãŒã ã®ã¢ãŒã«ã€ããäœæã§ããŠäŸ¿å©ã§ããã ããšããŸã 詊ããŠã¯ããªãã®ã§ãã CodePush ã䜿ãã°ã審æ»ã«æåºããããšãªãã«æ¢åã®ã¢ããªã倿Žããããšãã§ãããããã®ã§ãéåžžã«äŸ¿å©ã ãšæããŸããã ã©ããªå Žåã« React Native ãæ¡çšã§ãããã? React Native ã§éçºããããšã§ãWeb éçºè
ã®èŠç¹ã§èŠããšãã©ãããã©ãŒã ã®ãã€ãã£ãèšèªã§éçºããããããã ãã¶åŠç¿ã³ã¹ããäžããã®ã§ã¯ãªãããšæããŸããããŸããµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿ãã°ãæ©èœçã«å€§ããªåé¡ãšãªããããªããšã¯ãªãããã§ããããã ãç»é¢é·ç§»ã®ã©ã€ãã©ãªãããã ã£ãããã«ãããããããããšãã§ããªããšããå Žåã¯ã劥åããªããšãããªãéšåãåºãŠãããã ãšæããŸããã äžæ¹ãã¢ããªãšã³ãžãã¢ã«ãšã£ãŠã¯ãæ
£ãããŸã§ã¯ããªãéçºé床ãäžãããããªã®ã§ãã¡ãªããã倧ããããªãšæããŸãããReact ãš JSããŸã Redux ãªã©ãæ°ãã«çè§£ãã€ã€éçºããŠããã®ã§çµæ§ããŒãã«ãé«ããšæããŸãããéçºç°å¢ããã«ããéã£ãŠããã¡ã¯ãView åšãã®èª¿æŽãããã«ç¢ºèªã§ããŠè¯ãã£ãã®ã§ãããã©ã³ã¿ã€ã ãšã©ãŒã«ãªããªã©ã§ãã·ãã¥ã¬ãŒã¿ããªããŒãã§ããªããªã£ãå Žåã«å床ãã«ããçŽããšããããšãããèµ·ãããåžžã«å¿«é©ã«éçºã§ãããšããããã§ã¯ãããŸããã§ããã éçšé¢ã§ã¿ããšäžéãã¢ãããªéçºã«å¿
èŠãããªããŒã«ã¯æã£ãŠããã(ã¯ã©ãã·ã¥ç£èŠãCIããã¹ãé
ä¿¡ããªãªãŒã¹)ãCode Push ãªã©äŸ¿å©ãªããŒã«ãããã®ã§å©ç¹ãå€ããšæããŸããã çµè«ãšããŠã¯ãWeb ãšã³ãžãã¢ã瀟å
ã«å€ãã£ãããéçºããŒã ã« ReactãJS ãåŸæãªã¡ã³ããŒããããªããå®éã®éçºã§ã䜿ããããªãšæããŸããããã ãã¢ããªãšã³ãžãã¢ã«ãšã£ãŠã¯ããªãã¹ãã¬ã¹ãããŸããããžã§ã¯ãã«ãªãããã ãšæããŸããã ãŸãšã èªåã®çŸç¶ã§èãããšãã¢ããªã¯åŸæã ãã© JS ã React ã«ãããŸã§è©³ãããªãã®ã§ãããçŽè¿ã®ãããžã§ã¯ãã§é£æåºŠãããããé«ãããã§ããã°ãæ£çŽãããŸã䜿ããããªããªããšããæ°æã¡ããããŸãããã ãæè¡ã®å¹
ãåºãããšããçµç¹å
šäœã®ããŒã¿ããªãã£ãªã©ã®èгç¹ã§èãããšå©ç¹ãçµæ§ããã®ããªãšæããŸãããã£ã³ã¹ãããã°ãã²ããã£ã¬ã³ãžããŠã¿ããã§ãã ãããã¯ã©ã¡ãããšãããšæè¡ãéçºããŒã«ã®æ°ãããããããŠãŒã¶ãšã®æ¥ç¹ã®ãšããã§æ°ããããšãé¢çœãããšã远æ±ããããšæã£ãŠããŸãããéçºå¹çãå質ã®åäžã®ããã«æé©ãªãã®ãéžæã§ããããã«ãä»åŸãæ°ããããŒã«ã®ãã£ããã¢ããã¯ç©æ¥µçã«è¡ã£ãŠãããããšæã£ãŠããŸãã ãç¥ãã ã¡ãã¬ãŒã¯ã5/31-6/2 ã«éå¬ããã RubyKaigi 2018 ã« LT ã¹ãã³ãµãŒãšããŠåè³ããŸããããŒã¹ãæ§ããŠãããŸãã®ã§ãã€ãã³ãã«ãè¶ãã«ãªãæ¹ã¯ããã²ããŒã¹ã«ãéã³ã«ããããŠãã ããïŒ https://rubykaigi.org/2018
ããã«ã¡ã¯ãéçºæ¬éšã®é«äºã§ããã¡ãã¬ãŒéçºæ¬éšã§è¡ãããŠããå匷äŒãTechLunchãã§ React Native ã«ã€ããŠçºè¡šããŸããã ç§ã¯æ®æ®µã¯ SwiftãKotlin/Java ã䜿ã£ãŠãã€ãã£ãã¢ããªãéçºããŠãããReact Native ã«è§Šãã®ã¯åããŠã§ãããããã§ä»åã¯ãã¢ããªãšã³ãžãã¢ã®èŠç¹ãããå®è£
ããããã®åºæ¬çãªç¥èãšåŒç€Ÿã®å®éã®éçºã§äœ¿ãããããæ€èšããçµæã«ã€ããŠã玹ä»ããŸãã ãªã React Native ãè§Šã£ãŠã¿ãããšæã£ãã ãªã³ã©ã€ã³èšºçã¢ããªã CLINICS ãã®éçºã§ã¯ãiOS/Android ã¢ããªãããããã®ãã€ãã£ãèšèªã§å¥ã
ã«éçºããŠãããããå®è£
ãã¬ãã¥ãŒã®éã«ã¯ãã©ãããã©ãŒã éã®ä»æ§ã®éããçè§£ããå¿
èŠãããããªããªã倧å€ã ãšæããŠããŸããã ãããã®èª²é¡ã«å¯Ÿã㊠ãã¡ã ã®ããã°ã§ã玹ä»ãããããªæœçãè¡ã£ãŠæ¹åãè¡ã£ãŠããŸãããããœãŒã¹ãå
±éåããããšã§ããéçºå¹çãåäžã§ããªãããšæããã¯ãã¹ãã©ãããã©ãŒã éçºã«ã€ããŠã調ã¹ãŠã¿ãããšã«ããŸããã ãã®äžã§ã以äžã®çç±ãããä»å㯠React Native ã«ã€ããŠèª¿ã¹ãŠã¿ãããšã«ããŸããã JavaScriptïŒä»¥äž JSïŒã» React ã®ãããWeb ãšã³ãžãã¢ããã€ãã£ãã¢ããªéçºãè¡ãéã®ããŒãã«ãäœãããããšãã§ããã UI ã®å®è£
ã«ãã€ãã£ã UI ã䜿çšããŠããã®ã§èªç¶ãªãã¶ã€ã³ãã€ã³ã¿ã©ã¯ã·ã§ã³ãäœããããã ããçšåºŠãªãªãŒã¹ããæéãçµã£ãŠæ
å ±ãè±å¯ã«ãã ç¹ã«åŒç€Ÿã§ã¯ããã€ãã£ãã¢ããªãã Web éçºãã¡ã€ã³ã«è¡ã£ãŠãããšã³ãžãã¢ã®æ¹ãå€ãããŸã Web ããã³ãã« React ã䜿ãããŠãããããã¯ããããã€ãããã®ã§ãReact Native ãæ¡çšããããšã§ããŒã ã®éçºå¹çã®åäžã ãã§ãªããéçºæ¬éšå
šäœã§ããã€ãã£ãã¢ããªéçºã®åŠç¿ã³ã¹ããäœããªãã®ã§ã¯ãªãããšèããŸããã ããã§ã以éã§ã¯ãã€ãã£ãã¢ããªãšã³ãžãã¢ãš Web ãšã³ãžãã¢ããããã«ãšã£ãŠãéçºãããããã©ãããšãã芳ç¹ã§ React Native ã®éçºæ¹æ³ãèŠãŠãããããšæããŸãã åæèšå®ã«ã€ã㊠ã€ã³ã¹ããŒã«ãã¢ããªå®è¡ ã€ã³ã¹ããŒã«ã¯å
¬åŒã® Getting Started ã«ããããŸããã以äžã®ã³ãã³ãã§å®äºã§ãã $ brew install node $ brew install watchman $ npm install -g react-native-cli ä»åãç§ãè§Šãã«ããã£ãŠã¯ Xcode ãš Android Studio ã®ã·ãã¥ã¬ãŒã¿ïŒãšãã¥ã¬ãŒã¿ïŒã§å®è¡ããªããéçºããŸããããReact Native 㯠Xcode ã Android Studio ãã€ã³ã¹ããŒã«ãããŠããªããŠãã Expo ãšããã¯ã©ã€ã¢ã³ãã¢ããªã宿©ã«ã€ã³ã¹ããŒã«ããããšã§ç»é¢ããã¬ãã¥ãŒããªããéçºããããšãã§ããŸãã ãããªããXcode ã®ããŠã³ããŒããåŸ
ã€å¿
èŠããããŸããïŒïŒiOS ãšã³ãžãã¢ã§ãã¢ããã°ã¬ãŒãã®ãã³ã« Xcode ã®ããŠã³ããŒããåŸ
ã€ã®ã¯ã€ã©ã€ã©ããŸãïŒ æ¬¡ã«ããããžã§ã¯ãäœæãã·ãã¥ã¬ãŒã¿ã§ã®ã¢ããªå®è¡ã¯ä»¥äžã®ã³ãã³ãã§å®è¡ã§ããŸãã ãã ããã·ãã¥ã¬ãŒã¿å®è¡åã« Xcode Command Line Tools ã®ã€ã³ã¹ããŒã«ãš Android Studio ã§ããã€ãã®èšå®ïŒSDK ã®ã€ã³ã¹ããŒã«ãAVD ã®äœæãç°å¢å€æ°ã®èšå®ïŒãå¿
èŠã§ãã # ãããžã§ã¯ãäœæ $ react-native init AwesomeProject  # ã¢ããªå®è¡ïŒã·ãã¥ã¬ãŒã¿ïŒ $ cd AwesomeProject $ react-native run-ios or react-native run-android # Android ã®å Žåãemulator ãå¥éèµ·åããŠããã§ãªããšå®è¡ã§ããªã å®è£
ããŠã¿ãææ³ UI ã®å®è£
æ¹æ³ React Native ã§ã¯ React åæ§ UI ã®åããŒããã³ã³ããŒãã³ããšåŒã³ãããããé
眮ããããšã§ UI ãå®è£
ããŠãããŸããéã㯠Web ã® HTML ã®ä»£ããã« Native ã® UI ãæç»ããããã®ã³ã³ããŒãã³ããšããŠäœ¿ãç¹ã§ãã èŠãç®ãã¬ã€ã¢ãŠã㯠CSS ãšäŒŒããããªåœ¢åŒã§èšè¿°ããŸããReact Native ã§äœ¿ããã¹ã¿ã€ã«ã®ããããã£ã¯åã³ã³ããŒãã³ãã§ç°ãªããŸãããäŸãã°ãView ã³ã³ããŒãã³ãã«èšå®ã§ããããããã£ã«ã¯ä»¥äžã®ãããªãã®ããããŸãã View Style Props Layout Props Web ã§äœ¿ãããŠãããã®ãšå
šãåããšããããã§ã¯ãªãã§ãããflexãmarginãborder ãªã©ã®äœ¿ãæ
£ããŠãã CSS ã®ããããã£åã§èšå®ã§ããã®ã§ãWeb ãšã³ãžãã¢ã«ãšã£ãŠã¯å®è£
ã®ããŒãã«ãäžããã®ã§ã¯ãªãããšæããŸããããã ãæ®æ®µ CSS ãè§Šã£ãŠããªããã€ãã£ãã¢ããªãšã³ãžãã¢ã«ãšã£ãŠã¯åŠç¿ã³ã¹ããããããšæããŸãã ãŸãäžåºŠãã«ãããã°ãJS ã«ããä¿®æ£å
容ããã«ããªãã§ã·ãã¥ã¬ãŒã¿ã«åæ ããããšãã§ããã®ã§ãView åšãã®èª¿æŽã¯å¹ççã«ã§ãããã§ããã // js/components/home.js const renderItem = ({ item , index }) => ( < View style = { styles . row } > < Text style = { styles . title } >        { parseInt ( index , 10 ) + 1 }        { ". " }        { item . title } </ Text >      < Text style = { styles . description } > { item . description } </ Text > </ View > ); const styles = StyleSheet . create ({ row: { borderBottomWidth: 1 , borderColor: "#ccc" , padding: 10 , }, title: { fontSize: 15 , fontWeight: "600" , }, description: { marginTop: 5 , fontSize: 14 , }, }); ãã ãOS ããšã«ãããµãã€ã³ãåãããæ¹éã«ããªãéãã¯ãã³ãŒããå¥ã
ã«ãªããšããããããšå€ããªãããã ãšæããŸããã äŸãã°ãTabBar(iOS)ãš DrawerLayout(Android)ãDatePicker(iOS)ãš TimePicker(Android)ãProgressView(iOS)ãš ProgressBar(Android)ãªã©ã¯ React Native ã§ã¯å¥ã³ã³ããŒãã³ããšããŠæäŸãããŠããŠãAPI ãéã£ãŠããŸããã ç»é¢é·ç§» ç»é¢é·ç§»ïŒããã·ã¥ãã¢ãŒãã«ãã¿ãé·ç§»ãªã©ïŒã®ããã« API ãšããŠå
¬åŒã§æäŸãããŠããã®ã¯ iOS ã®ã¿ã§ Android ã¯å¥éãå®è£
ãããããµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿çšããå¿
èŠããããŸãã ãããã䜿ã£ãŠã¿ã react-native-navigation ã¯ã¢ãŒãã«ãããã·ã¥ãªã©ã®é·ç§»ããã€ãã£ã API ããŒã¹ã§å®è£
ãããŠããã®ã§ããã€ãã£ãèšèªã§å®è£
ããå Žåãšæ¯ã¹ãŠéåæãªãå®è£
ããããšãã§ããŸããã äžèšã®ãããªåœ¢ã§ããã·ã¥ãã¢ãŒãã«è¡šç€ºã§ã®é·ç§»ãã§ããŸããç¹å®ã®ç»é¢ã«æ»ãæ©èœã«ã€ããŠã¯éçºäžã§ãã£ãããæ©èœçãªå¶çŽã¯å°ãããããã§ãããããã现ãããšããã¯ãã€ãã£ãèšèªã§ãã£ãæ¹ãèªç±ãå¹ãã®ã§ãè¯ããªãšæããŸãã ããã§ããiOS ãš Android ã§ã¯è€æ°ç»é¢ã®ç®¡çãé·ç§»ã«ã€ããŠã®èãæ¹ãéããAndroid ãåããŠéçºããæã«åãããšãå®çŸããã®ãé£ããã£ãèŠããããã®ã§ãå
±éã®æ¹æ³ã§å®çŸã§ããã®ã¯äŸ¿å©ã§ãããç¹ã« Web ã ãšããŸãç»é¢éã®é·ç§»ã«ã€ããŠèããããšã¯ãªããšæãã®ã§ãå
±éåãããŠãããšãã€ãã£ãã¢ããªéçºã®åŠç¿ã³ã¹ããäžãããšæããŸãã this . props . navigator . push ({ // ããã·ã¥ screen: "example.PushedScreen" , title: "Pushed Screen" , }); this . props . navigator . pop ({ // åã®ç»é¢ã«æ»ã animated: true , animationType: "fade" , }); this . props . navigator . showModal ({ // ã¢ãŒãã« screen: "example.ModalScreen" , title: "Modal" , animationType: "slide-up" , }); ãããã¯ãŒã¯åšã ãããã¯ãŒã¯çµç±ã§ããŒã¿ãååŸããŠãã¢ãã«ã«å€æããã¢ããªå
ã§äœ¿ããšããããããæäœãè¡ãã«ã¯ Fetch API ãå©çšããŸãã Fetch API 㯠JS ã§æäŸãããŠãã Promise ããŒã¹ã® API ã§ããäŸãã°ã以äžã®ãããªåœ¢ã§ JSON ãè¿ã API ããããŒã¿ãååŸãã receiveHelthNews 颿°ã«ãªããžã§ã¯ãã«å€æããé
åãæž¡ãããšãã§ããŸããJS ã® API ãªã®ã§ Web ãšã³ãžãã¢ã«ãšã£ãŠã¯äœ¿ããããã®ã§ã¯ãªãããšæããŸãã ãã€ãã£ãèšèªã§ããããå®è£
ããå Žåã¯ãURLSession(iOS)ãš HttpURLConnection(Android)ããããã¯åãã©ãããã©ãŒã åãã«æäŸãããŠãããµãŒãããŒãã£ã®ã©ã€ãã©ãªãªã©ã䜿ããšæããŸãããåœç¶ãAPI ã¯ç°ãªãã®ã§ããããã®å®è£
æ¹æ³ãææ¡ããªããšãããªããªããŸããããã«æ¯ã¹ããšåŠç¿ã³ã¹ãã¯äœããªãããã§ãã // js/actions/index.js export function fetchHelthNews () { return ( dispatch ) => fetch ( constructHealthNewsUrl ()) . then (( response ) => response . json ()) . then (( json ) => dispatch ( receiveHelthNews ( json . articles ))) . catch (( error ) => { console . log ( error ); }); } ãã€ãã£ãã¢ããªç¹æã®æ©èœã«ã€ã㊠ãã®ä»ã®ã¢ããªéçºã§ãã䜿ããã€ãã£ãã¢ããªç¹æã®æ©èœãå®è£
ããæ¹æ³ã¯ä»¥äžã®ããã«ãªããŸããå€ãã®æ©èœããµãŒãããŒãã£ã®ã©ã€ãã©ãªã«äŸåããŠããã®ã§ãåèšèªã®ããŒãžã§ã³ã¢ããæã®å¯Ÿå¿ãå°ãå¿é
ã§ã¯ãããŸãããããäœ¿ãæ©èœã«ã€ããŠã¯å®çŸããããšãã§ããŸãã Push éç¥ïŒAndroid ã¯ãã³ããªã³ã°ãã API ãå
¬åŒã§æäŸãããŠããªãã®ã§ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿ã ã«ã¡ã©ãããŒãã§ãŒã³ã¢ã¯ã»ã¹/ãŠãŒã¶ããã©ã«ãïŒå
¬åŒã® API ã¯æäŸãããŠããªãã®ã§ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿ã äœçœ®æ
å ±ã®ååŸïŒå
¬åŒ API ãæäŸãããŠãã ãã£ãŒããªã³ã¯ïŒã¢ããªèµ·åæã«ãã³ããªã³ã°ãè¡ã API ã¯æäŸãããŠããããŠãããŒãµã«ãªã³ã¯ã IntentFilter ã®èšå®ã¯åãã©ãããã©ãŒã ã§åå¥ã«å¿
èŠã«ãªã ãªãªãŒã¹ã¯ã©ãããã ã¢ãŒã«ã€ããã¹ãã¢é
åžã«ã€ããŠã¯ãã€ãã£ãã¢ããªã®é
åžãšåãããã»ã¹ã«ãªããŸãã åãã©ãããã©ãŒã ã§èšŒææžçã®èšå®ãè¡ããXcode ã Android Studioãããã㯠CLI ã§ã³ãã³ããå®è¡ããŠãipa / apk ãã¡ã€ã«ãäœæããå Store ã«ã¢ããããŒãããå¿
èŠããããŸãã CI 㯠Bitrise ãªã©ã䜿ããŸããBitrise ã§ãã«ãã詊ããŠã¿ãŸããããReact Native ã®ãªããžããªãšæ¥ç¶ãããšãã«ã§ããããã©ã«ãã®ã¯ãŒã¯ãããŒã䜿ãã°ãåæã« 2 ãã©ãããã©ãŒã ã®ã¢ãŒã«ã€ããäœæã§ããŠäŸ¿å©ã§ããã ããšããŸã 詊ããŠã¯ããªãã®ã§ãã CodePush ã䜿ãã°ã審æ»ã«æåºããããšãªãã«æ¢åã®ã¢ããªã倿Žããããšãã§ãããããã®ã§ãéåžžã«äŸ¿å©ã ãšæããŸããã ã©ããªå Žåã« React Native ãæ¡çšã§ãããã? React Native ã§éçºããããšã§ãWeb éçºè
ã®èŠç¹ã§èŠããšãã©ãããã©ãŒã ã®ãã€ãã£ãèšèªã§éçºããããããã ãã¶åŠç¿ã³ã¹ããäžããã®ã§ã¯ãªãããšæããŸããããŸããµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿ãã°ãæ©èœçã«å€§ããªåé¡ãšãªããããªããšã¯ãªãããã§ããããã ãç»é¢é·ç§»ã®ã©ã€ãã©ãªãããã ã£ãããã«ãããããããããšãã§ããªããšããå Žåã¯ã劥åããªããšãããªãéšåãåºãŠãããã ãšæããŸããã äžæ¹ãã¢ããªãšã³ãžãã¢ã«ãšã£ãŠã¯ãæ
£ãããŸã§ã¯ããªãéçºé床ãäžãããããªã®ã§ãã¡ãªããã倧ããããªãšæããŸãããReact ãš JSããŸã Redux ãªã©ãæ°ãã«çè§£ãã€ã€éçºããŠããã®ã§çµæ§ããŒãã«ãé«ããšæããŸãããéçºç°å¢ããã«ããéã£ãŠããã¡ã¯ãView åšãã®èª¿æŽãããã«ç¢ºèªã§ããŠè¯ãã£ãã®ã§ãããã©ã³ã¿ã€ã ãšã©ãŒã«ãªããªã©ã§ãã·ãã¥ã¬ãŒã¿ããªããŒãã§ããªããªã£ãå Žåã«å床ãã«ããçŽããšããããšãããèµ·ãããåžžã«å¿«é©ã«éçºã§ãããšããããã§ã¯ãããŸããã§ããã éçšé¢ã§ã¿ããšäžéãã¢ãããªéçºã«å¿
èŠãããªããŒã«ã¯æã£ãŠããã(ã¯ã©ãã·ã¥ç£èŠãCIããã¹ãé
ä¿¡ããªãªãŒã¹)ãCode Push ãªã©äŸ¿å©ãªããŒã«ãããã®ã§å©ç¹ãå€ããšæããŸããã çµè«ãšããŠã¯ãWeb ãšã³ãžãã¢ã瀟å
ã«å€ãã£ãããéçºããŒã ã« ReactãJS ãåŸæãªã¡ã³ããŒããããªããå®éã®éçºã§ã䜿ããããªãšæããŸããããã ãã¢ããªãšã³ãžãã¢ã«ãšã£ãŠã¯ããªãã¹ãã¬ã¹ãããŸããããžã§ã¯ãã«ãªãããã ãšæããŸããã ãŸãšã èªåã®çŸç¶ã§èãããšãã¢ããªã¯åŸæã ãã© JS ã React ã«ãããŸã§è©³ãããªãã®ã§ãããçŽè¿ã®ãããžã§ã¯ãã§é£æåºŠãããããé«ãããã§ããã°ãæ£çŽãããŸã䜿ããããªããªããšããæ°æã¡ããããŸãããã ãæè¡ã®å¹
ãåºãããšããçµç¹å
šäœã®ããŒã¿ããªãã£ãªã©ã®èгç¹ã§èãããšå©ç¹ãçµæ§ããã®ããªãšæããŸãããã£ã³ã¹ãããã°ãã²ããã£ã¬ã³ãžããŠã¿ããã§ãã ãããã¯ã©ã¡ãããšãããšæè¡ãéçºããŒã«ã®æ°ãããããããŠãŒã¶ãšã®æ¥ç¹ã®ãšããã§æ°ããããšãé¢çœãããšã远æ±ããããšæã£ãŠããŸãããéçºå¹çãå質ã®åäžã®ããã«æé©ãªãã®ãéžæã§ããããã«ãä»åŸãæ°ããããŒã«ã®ãã£ããã¢ããã¯ç©æ¥µçã«è¡ã£ãŠãããããšæã£ãŠããŸãã ãç¥ãã ã¡ãã¬ãŒã¯ã5/31-6/2 ã«éå¬ããã RubyKaigi 2018 ã« LT ã¹ãã³ãµãŒãšããŠåè³ããŸããããŒã¹ãæ§ããŠãããŸãã®ã§ãã€ãã³ãã«ãè¶ãã«ãªãæ¹ã¯ããã²ããŒã¹ã«ãéã³ã«ããããŠãã ããïŒ RubyKaigi 2018, 5/31...6/2, Sendai, Miyagi, Japan #rubykaigi RubyKaigi 2018, 5/31...6/2, Sendai, Miyagi, Japan rubykaigi.org