誰ããŸã è¬åã«é
ããããšãã§ããŸããã§ããã
ãã¬ã³ãã£ã³ã»ããã«
å é±ãGoogleã®ããŒã ããããã 2015幎ãã話é¡ã«ãªã£ãŠããJ2CLãã¬ãŒã ã¯ãŒã¯ã®ãœãŒã¹ã³ãŒããã¢ããããŒãããŸãã ã JavaãJavaScriptã«ç¿»èš³ãããšããã¢ã€ãã¢ã¯æ±ºããŠæ°ãããã®ã§ã¯ãªãã誰ããé·ãéGoogle Web Toolkitã§ã³ãŒã³ãåããŠããŸããããã³ãã¥ããã£ã¯ãã®è£œåãä»ã«é¡ãã¿ãã«åŸ ã£ãŠããŸãã-圌ãã¯ããã«ã€ããŠè©±ããã¹ããŒããããŸãããã誰ããããèŠãŸããã§ããã

ââââ
æåã®çºè¡šãã3幎以äžãçµéãã補åã¯çãŸããããšãããªãåžå Žã倱ã£ãããã§ãã ä»æ¥ã Scala.js ã Kotlin.js ã JSweetããããŸã ããã¡ãããWebéçºã¯TypeScriptã«ãã£ãŠãã€ãžã£ãã¯ãããŠãããJavaçšã®ã¹ããŒã¹ã¯æ®ã£ãŠããŸããã ãã®éãå€ãã®ç±å¿ãªãžã£ãã¹ãã§ããããJava for Front-endããžã®ä¿¡é Œã倱ãããã®JavaScriptãã¬ãŒã ã¯ãŒã¯ãæå¶ããŸããã
ãªãªãŒã¹ãè¡ãããã®ã§ãäœãèµ·ãã£ãã®ãã誰ã«åœ¹ç«ã€ãèŠãŠã¿ãŸãããã
ã¢ã€ãã¢
åºæ¬çã«ããã©ãŠã¶ã§JVMããšãã¥ã¬ãŒãããã®ã¯é£ããã¿ã¹ã¯ã§ãã Google Web Toolkitã®éçºè ã¯é·ãéããã解決ããŠããŠãããäžå®ã®æåãåããŠããŸãããã©ã³ã¹ã¬ãŒã¿ãæ§ç¯ããæšæºJavaã©ã€ãã©ãªã®ãšãã¥ã¬ãŒã·ã§ã³ã¡ã«ããºã ãéçºããã¢ããªã±ãŒã·ã§ã³éçºã®ãã¥ãŒãã³ã°ãæäŸããŸããã
ãã®ã¢ãããŒãã«ã¯å€ãã®å©ç¹ããããŸãïŒéçåä»ãããã©ãŠã¶ã§ãµãŒããŒã³ãŒããåå©çšããæ©èœãããã³Java IDEã®åœ¢ã®æ¢è£œããŒã«ã å ã GWTã§èŠå®ãããŠããã¢ãããŒãã®å€ãã¯ãTypeScriptãWeb Packãããã³ãã®ä»ã®ããã³ããšã³ãéçºããŒã«ã§èŠãããŸãã
å€ãGoogle Web Toolkitã¯ãUIãæ§ç¯ããããã®ããã°ããšæœè±¡åã®ããã«å¥œãŸããŸããã§ããã J2CLã®èãæ¹ã¯ããåçŽã§ããJavaãå¯èœãªéãäœãã³ã¹ãã§JavaScriptã«å€æã§ãããããJavaScriptããJavaãç°¡åã«åŒã³åºãããšãã§ãããã®éãå¯èœã§ãã
ãããŠã2015幎ã«JSã«äžèŠãªã¬ããŒãžããªããã°é«å質ã®Javaãã©ã³ã¹ã¬ãŒã¿ãæ¬åœã«ãã£ããšããããWebéçºãããã«çºå±ãããã©ããã¯ããããŸããã
ããã¯ã°ã©ãŠã³ãJ2CL
2015幎ã®åãã«ãGoogle GWTããŒã ã¯é£ãããå¿ èŠãªæ±ºå®ãäžããŸãããããã¯ãããã³ããšã³ãéçºã§Javaã䜿çšã§ããããã«ããæ°ãã補åãéçºããããšã§ãã
ããã¯äž»ã«ãWebéçºã®ãã¬ã³ãã®å€åãšãWebã®Javaãå€ç«ãããšã³ã·ã¹ãã ã§ã¯ãªãã倧èŠæš¡ãªã¹ã¿ãã¯ã®äžå¯æ¬ ãªéšåãšèŠãªããŠããæ°ããå éšã¯ã©ã€ã¢ã³ããåå ã§ããã ããã«ã¯ãå®å šã«æ°ããããžã§ã³ãšãŒãããã®ããŒã«ã®äœæãå¿ èŠã§ãããä»ã®ãšã³ã·ã¹ãã ãšå¯æ¥ã«çµ±åããå¿ èŠããããŸãã
GWTã§ã¯ããããã®ç®æšãéæããããšã¯ã»ãšãã©äžå¯èœã§ããã GWTã«ã¯JavaSciptãšã®åæ¹åã®å¯Ÿè©±çšã®ããŒã«ããããŸãããããã¬ãŒã ã¯ãŒã¯ã¯UIãRPCã©ã€ãã©ãªããã®ä»ã®ã¢ããªã±ãŒã·ã§ã³APIã®åœ¢ã§å€§éã®è·ç©ãåãé€ãããšãã§ããŸããã§ããã
ãã®ç£ã¯äœã§ãã
éçºè ã«ãããš ãJ2CLã¯JavaScriptã¢ããªã±ãŒã·ã§ã³ãžã®Javaã³ãŒãã®ã·ãŒã ã¬ã¹ãªçµ±åãæäŸããŸãã Closure Compilerã䜿çšããã³ãŒãæé©åã«éç¹ã眮ãããã·ã³ãã«ã§è»œéãªJavaããJavaScriptãžã®ãã©ã³ã¹ã¬ãŒã¿ãŒã§ãã
- 1ã€ã®ãããžã§ã¯ãã§JavaãšJavaScriptãç°¡åã«çµã¿åãããŠãåèšèªããæé«ã®çµæãåŸãããšãã§ããŸãã
- ãµãŒããŒãœãªã¥ãŒã·ã§ã³ãWebã¢ããªã±ãŒã·ã§ã³ãAndroidãã©ãããã©ãŒã éã§ã³ãŒããåå©çšã§ããŸãã GuavaãDaggerãAutoValueãªã©ãå€æ°ã®Javaã©ã€ãã©ãªãå©çšå¯èœã§ãã
- ã¢ãã³ã§å¿«é©ã ãããžã§ã¯ãã®ã¢ã»ã³ããªã¯ãLive-reloadã§ãµããŒããããBazelã«åºã¥ããŠããŸãã
- 確èªæžã¿ã J2CLã¯GSuiteãããžã§ã¯ãïŒGMailãDocsãSlidesãCalendarïŒã®æ¬çªç°å¢ã§äœ¿çšãããŠãããšèšãããŠããŸãã
åºæ¬çã«ãJ2CLã¯ãJavaã¯ã©ã¹ãã€ãã³ãŒãã䜿çšããã«ãJavaãœãŒã¹ã³ãŒããJavaScriptã³ãŒãã«å€æããŸãã ã€ãŸããGoogle Web Toolkitã®å Žåã®ããã«ããããžã§ã¯ããã³ã³ãã€ã«ããã«ã¯ã䜿çšãããã¹ãŠã®ã©ã€ãã©ãªã®ãœãŒã¹ã³ãŒããå¿ èŠã§ãã ããã«ãããã«ãããæ°ãããªãªãŒã¹ã§ã®Javaèšèªæ©èœã®ãµããŒãã«é¢ãã質åãçºçããŸãã çŸæç¹ã§ã¯ãéçºè ã¯Java 11ã®ãã¹ãŠã®æ§ææ©èœã®ãµããŒããçŽæããŠããŸãã
J2CLã¯GWTãŠã£ãžã§ãããGWT RPCãããã³ãã®ä»ã®GWTã©ã€ãã©ãªããµããŒãããŸãã-åºæ¬çãªJavaããã³JavaScriptçµ±åã¡ã«ããºã ã®ã¿-JSInterop ã
ã€ãŸã ããã¯ããŸã£ããæ°ãããã©ã³ã¹ããŒã¿ãŒãåããGWTã®éåžžã«éå®ãããããŒãžã§ã³ã§ãã ãŸããæ°è£œåã¯GWTãšã®äºææ§ããªããªã£ããããGWTã§ã¯ãªãJ2CLãšåŒã°ããŸãã ãã®çµæãGWT 3ã®äºå®ãããŠãããªãªãŒã¹ã¯ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã©ã€ãã©ãªããã©ã³ã¹ã¬ãŒã¿èªäœã®ã·ã¹ãã ã¬ãã«ããåé¢ãããJ2CLäžã®ãã¬ãŒã ã¯ãŒã¯ã«ãªããŸãã
æ¢åã®Javaäºææ§ã®å¶éã¯GitHubã§èª¬æãããŠããŸã ã åºæ¬çã«ããããã¯GWTãšåããŸãŸã§ãã-ãªãã¬ã¯ã·ã§ã³ã®ãµããŒãã¯ãªããJavaãããã¯ãŒã¯APIã¯ãããŸããã ããããäœããç°ãªããŸããããšãã°ãé åãšãªã¹ãã®ã»ãã³ãã£ã¯ã¹ã¯ãšãã¥ã¬ãŒããããŸãããããšãã°ãã€ã³ããã¯ã¹ã¯é åã®å¢çã§ã®åºçŸããã§ãã¯ããŸããã éçºè ã¯JVMã®åäœããšãã¥ã¬ãŒãããããšã§ã¯ãªãããªãŒããŒããããæå°éã«æããå®å šãªäºææ§ã確ä¿ããããã«å€§éã®JavaScriptãçæããªãããã«èšèªã®æ§æã«çŠç¹ãåãããŸãã
J2CLã¯æ¬çªç°å¢ã§äœ¿çšã§ããŸãããOSSããŒãžã§ã³ã¯ãŸã ãŸã é ãã§ãã ããšãã°ã Windowsã§ã®ãããžã§ã¯ãã®éå§ã«åé¡ããããéçºè ã¯å®å®ããAPIãçŽæããŠããŸããã
Googleã®å éšè£œåã®ãã«ãã·ã¹ãã ãšããŠBazelãéžæããã®ã¯ç°¡åã«èª¬æã§ããŸãããã³ãã¥ããã£ã«ãã©ã¹ã¯ãããŸããããŸãããã®ãã«ãã·ã¹ãã ãåŠã¶ä»¥å€ã«J2CLã䜿çšããæ¹æ³ã¯ãããŸããã ä»ã®ãšãããã³ãã¥ããã£ãMaven / Gradleã®ãã©ã°ã€ã³ãäœæããã®ãåŸ ã€ããšããã§ããŸããã
è©ŠããŠ
ãŸããä»ããJ2CLãè©Šãã«ã¯ãMac OSãŸãã¯Linuxãå¿
èŠã§ãã
次ã«ã Bazel -Googleã®ãããšããŸããã¯ãªãã«ãã·ã¹ãã ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã
ããã§ãå°ãªããšãå ¬åŒãªããžããªãã HelloWorldãªã©ã®äœããåéã§ããŸãã
> bazel build src/main/java/com/google/j2cl/samples/helloworld:helloworld
çµè«ãèŠããšãå¬ããé©ãããããŸãã
> cat bazel-bin/src/main/java/com/google/j2cl/samples/helloworld/helloworld.js document.write('Hello from Java! and JS!');
ãã¡ãããããã¯äœã蚌æããŸããããGWTã¢ãžã¥ãŒã«ã®åŸã®ããããªãºã ã«éåžžã«æºè¶³ããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã®åªããäŸã¯ãŸã ãããŸããããç»å ŽãããŸã§ãåŸ ã¡ãã ããã
xxx.jsãããå Žåããªãå¿ èŠãªã®ã§ãã
ãªããããèŠã€ããå¿ èŠãããã®ãââãšãã質åã«å¯Ÿããçãã¯ããŸã é£ããã§ãã äžèŠãããšãããJ2CLã«ã¯éåžžã«åŒ·åãªã¢ã€ãã¢ããããŸãã人ã ãTypeScriptã䜿çšããã®ãšåãããã«Javaãããã³ããšã³ãã«åå©çšããããšã§ãã äžæ¹ããããžã§ã¯ãã¯é ããŠããããã§ãã
Kotlin.jsãScala.jsãªã©ãJSã®æ°ãããã©ã³ã¹ãã€ã©ãŒãããžã§ã¯ãã¯ãã³ã³ãã€ã©ãã©ã°ã€ã³ãšããŠå®è£ ããããœãŒã¹ã³ãŒããå解æããå¿ èŠã¯ãããŸããã ãŸãããã®ç¹ã«é¢ããŠãJ2CLã¯è§£æãããœãŒã¹ã³ãŒããå¿ èŠãšãããããåŸéããŠããŸãã
å¥ã®ãã€ã³ãã¯ãJavaèšèªèªäœã§ãã ç°¡æœãªKotlinã§ãµãŒããŒéšåãšã¯ã©ã€ã¢ã³ãéšåã®äž¡æ¹ãèšè¿°ã§ããå Žåããªãåé·Javaã§èšè¿°ããŸããïŒ
ãã ããå¥ã®åæ§ã®ãããžã§ã¯ãã§ããJSweetãšæ¯èŒãããšãJ2CLãããä¿¡é ŒããŠããŸãã JSweetããŒã«ã¯ãã䜿ãããããããã«äœ¿çšã§ããŸãããJSweetã«ã¯å°ããªã³ãã¥ããã£ãããããã®ã»ãšãã©ãã¹ãŠã1人ã®ãŠãŒã¶ãŒã«ãã£ãŠäœæãããŠããŸãã
ãªãŒãã³ãœãŒã¹ã³ãŒããšèšããŸããïŒ
ãããžã§ã¯ããApache 2.0ã®ãªãŒãã³ã©ã€ã»ã³ã¹ãæã£ãŠããããšã¯ç¢ºãã«åã°ããããšã§ãã
æ®å¿µãªããã ãªãŒãã³ãœãŒã¹ã¯ãªãŒãã³ãªéçºããã»ã¹ãæå³ãããã®ã§ã¯ãããŸããã ã³ãã¥ããã£ã®æ倧ã®å€±æã¯3幎åã«çºè¡šãããJ2CLãããžã§ã¯ãã§ããããœãŒã¹ã³ãŒããå ¬éããŠãã人ã¯ããŸãããæçµAPIã«åœ±é¿ãäžããããšã¯ã§ãããããããéä¿¡ããå Žæããªããããéçºããã»ã¹ãã¹ããŒãã¢ããã§ããŸããã
ç¶æ³ãæ¹åãã補åãå®è¡å¯èœã«ãªãããšãæåŸ ããŸãããã
æŽæ°ïŒ GWT2ãã移æ€ãããæåã®J2CLã¢ããªã±ãŒã·ã§ã³-https : //github.com/DominoKit/dominodo