Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

NashornとServerSideJavaScript

3,474 views

Published on

Published in: Technology
  • Be the first to comment

NashornとServerSideJavaScript

  1. 1. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSide JavaScript標準から見た Nashornの意義
  2. 2. html5j エンタープライズ部 #jjug_ccc #ccc_r17 自己紹介 酒巻 瑞穂 グロースエクスパートナーズ株式会社 所属 Twitter @SakamakiM Facebook www.facebook.com/miz.sak.9 FxOSコードリーティング わるだくらみ担当 http://reading.fxos.org/ html5エンタープライズ部 スタッフ http://html5biz.org/
  3. 3. html5j エンタープライズ部 #jjug_ccc #ccc_r17
  4. 4. html5j エンタープライズ部 #jjug_ccc #ccc_r17 はじめに
  5. 5. html5j エンタープライズ部 #jjug_ccc #ccc_r17 はじめに 1. Scriptのついている方のJavaの話
  6. 6. html5j エンタープライズ部 #jjug_ccc #ccc_r17 はじめに 1. Scriptのついている方のJavaの話 2. Nashornコードや内部アーキテクチャ   などの技術的に深い話はありません
  7. 7. html5j エンタープライズ部 #jjug_ccc #ccc_r17 今日のおはなし 1. Server Side JavaScript History
  8. 8. html5j エンタープライズ部 #jjug_ccc #ccc_r17 今日のおはなし 1. Server Side JavaScript History 2. what is Nashorn
  9. 9. html5j エンタープライズ部 #jjug_ccc #ccc_r17 今日のおはなし 1. Server Side JavaScript History 2. what is Nashorn 3. Server Side JavaScript of Now
  10. 10. html5j エンタープライズ部 #jjug_ccc #ccc_r17 今日のおはなし 1. Server Side JavaScript History 2. what is Nashorn 3. Server Side JavaScript of Now 4. Summary
  11. 11. html5j エンタープライズ部 #jjug_ccc #ccc_r17 の、前に
  12. 12. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Question!
  13. 13. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Question! この単語に聞き覚えのある、知っている方 ● V8 ● SpiderMoncky ● Rhino
  14. 14. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Question! Nashornに興味ある?
  15. 15. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Question! JSは好きですか!
  16. 16. html5j エンタープライズ部 #jjug_ccc #ccc_r17 一時限目
  17. 17. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSide JavaScript History ~ Genealogy of Netscape ~
  18. 18. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Netscape 誕生 Mochaが生まれる 後のLiveScriptである。 1994~1999
  19. 19. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSide JavaScriptの始祖 Netscape Enterprise Server上で動作する LiveWireが誕生 1994~1999 HTML JS File Livewire RDBBrowser NES
  20. 20. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Netscape2発表! このタイミングでLiveScriptはJavaScriptに 1994~1999
  21. 21. html5j エンタープライズ部 #jjug_ccc #ccc_r17 http://www6.uniovi.es/java-http/pr951204-03.html 1994~1999
  22. 22. html5j エンタープライズ部 #jjug_ccc #ccc_r17 http://www6.uniovi.es/java-http/pr951204-03.html 1994~1999
  23. 23. html5j エンタープライズ部 #jjug_ccc #ccc_r17 http://www6.uniovi.es/java-http/pr951204-03.html 1994~1999 JavaScriptとJavaは、Sun Microsystems社の商標です。
  24. 24. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Netscape2発表! このタイミングでLiveScriptはJavaScriptに (ただし商標はSunが持ってます) 1994~1999
  25. 25. html5j エンタープライズ部 #jjug_ccc #ccc_r17 このあたりで、SpiderMonkeyのJavaClone 「Rhino」の開発も開始 1994~1999
  26. 26. html5j エンタープライズ部 #jjug_ccc #ccc_r17 順風満帆なNetscapeであったが・・・ 1994~1999
  27. 27. html5j エンタープライズ部 #jjug_ccc #ccc_r17 1994~1999 Vesion 3
  28. 28. html5j エンタープライズ部 #jjug_ccc #ccc_r17 第1次ブラウザ大戦(画像はイメージです) 1994~1999
  29. 29. html5j エンタープライズ部 #jjug_ccc #ccc_r17 戦争の詳しい話は 多分ぐぐればでてくるだろうなので 割愛! 1994~1999
  30. 30. html5j エンタープライズ部 #jjug_ccc #ccc_r17 争いの最中、NetscapeはJavaScriptを European Computer Manufacturers Association (欧州電子計算機工業会) に標準化してもらう。 これがECMAScript(ECMA-262)である。 1994~1999
  31. 31. html5j エンタープライズ部 #jjug_ccc #ccc_r17 そしてこの標準規格にそって、 各ブラウザベンダーはJavaScriptっぽいのを実装 1994~1999
  32. 32. html5j エンタープライズ部 #jjug_ccc #ccc_r17 1997年~1999年の間に ECMA-262の仕様が一気にEdition3に! ● 1997/06 Ecma Edition 1 ● 1998/06 Ecma Edition 2 ● 1999/12 Ecma Edition 3 1994~1999
  33. 33. html5j エンタープライズ部 #jjug_ccc #ccc_r17 一方その頃ServeSideJavaScriptは・・・・ 1994~1999
  34. 34. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Sun Microsystemsが協力的(Java) ECMAScriptの進化 1994~1999
  35. 35. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Oracle ServerSideJavaScript Guid ( 1998 ) 1994~1999 http://docs.oracle.com/cd/E19957-01/816-6411-10/
  36. 36. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSideいけるんじゃね? 1994~1999
  37. 37. html5j エンタープライズ部 #jjug_ccc #ccc_r17 1994~1999
  38. 38. html5j エンタープライズ部 #jjug_ccc #ccc_r17 1994~1999 おのれMS!!
  39. 39. html5j エンタープライズ部 #jjug_ccc #ccc_r17 を買うと標準搭載 Comコンポーネントがつかえる と言うメリットから  SSJS(Livewire)のシェアはASPに取られていった。   1994~1999
  40. 40. html5j エンタープライズ部 #jjug_ccc #ccc_r17 これから始まるのはServerSideJavaScript 冬の時代である。 2000~2006
  41. 41. html5j エンタープライズ部 #jjug_ccc #ccc_r17 おこったこと 2000~2006
  42. 42. html5j エンタープライズ部 #jjug_ccc #ccc_r17 おこったこと Rhino、Java6に標準搭載される 2000~2006
  43. 43. html5j エンタープライズ部 #jjug_ccc #ccc_r17 以上 2000~2006
  44. 44. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2007~2009
  45. 45. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSideJavaScriptとか盛り上がり始める。 2007~2009
  46. 46. html5j エンタープライズ部 #jjug_ccc #ccc_r17 混沌の時代 2007~2009
  47. 47. html5j エンタープライズ部 #jjug_ccc #ccc_r17 しかしここに来て牽引約が登場! 2007~2009 ECMAに続く第二のJS標準!?
  48. 48. html5j エンタープライズ部 #jjug_ccc #ccc_r17 各々バラバラだったServerSideJavaScriptが この標準に向けて実装を開始するようになった。 2007~2009
  49. 49. html5j エンタープライズ部 #jjug_ccc #ccc_r17 そして  大ServerSideJavaScript時代の  幕開けである 2007~2009
  50. 50. html5j エンタープライズ部 #jjug_ccc #ccc_r17 大型ルーキー登場 2007~2009
  51. 51. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2007~2009
  52. 52. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2010~2013 ECMAScript5.1
  53. 53. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2010~2013
  54. 54. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2010~2013 CommonJSはもう終わってる NodeJSの中の人いわく http://www.reddit.com/r/node/comments/h1m2o/i_am_ryan_dahl_creator_of_nodejs_ama/c1rxntv
  55. 55. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2010~2013 決別中・・・?
  56. 56. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2010~2013 そんな争いがあった翌年 一つの産声が・・・
  57. 57. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2010~2013
  58. 58. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2010~2013 も誕生したけど、ではなく・・・・
  59. 59. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2010~2013 JavaOne 2012 Nashorn発表!
  60. 60. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2010~2013 Google Trends
  61. 61. html5j エンタープライズ部 #jjug_ccc #ccc_r17 2010~2013 2014年 Java8へのNashorn標準搭載 このNashornの登場が 混沌としたSSJSの世界に どのような波を与えるのか・・・!
  62. 62. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ~2014 coming soon.
  63. 63. html5j エンタープライズ部 #jjug_ccc #ccc_r17 おまけ
  64. 64. html5j エンタープライズ部 #jjug_ccc #ccc_r17 what is Nashorn? ~サイの飼育方法~
  65. 65. html5j エンタープライズ部 #jjug_ccc #ccc_r17 NashornはJava8から標準搭載されたJSエンジンです Nashornをつかうまえに
  66. 66. html5j エンタープライズ部 #jjug_ccc #ccc_r17 NashornはJava8から標準搭載されたJSエンジンです NashornはJDKで無くても開発できます。 (JREにも住んでいます) Nashornをつかうまえに
  67. 67. html5j エンタープライズ部 #jjug_ccc #ccc_r17 NashornはJava8から標準搭載されたJSエンジンです NashornはJDKで無くても開発できます。 (JREにも住んでいます) Java8が入って入れば 実はコマンド一発で起動できたりします。(後述) Nashornをつかうまえに
  68. 68. html5j エンタープライズ部 #jjug_ccc #ccc_r17 https://blogs.oracle.com/wlc/entry/javaee_c117 ■JavaでJavaScriptを使う理由(WebLogicCannelから抜粋) ● Javaに用意された膨大なライブラリやツール・セットをJavaScriptから使いたい ● JavaScriptを使って迅速にプロトタイピングを行いたい ● JavaScriptを利用してビジネス・プロセスを統合したい ● JavaScriptにより、サービスを組み合わせた開発(コンポジット開発)を行いたい ● 他のスクリプト言語と比べて、実現できる機能が多彩である ● クライアント・サイド(JavaFX)でもサーバ・サイド(CommonJS、Node.js)でも、 アプリケーションを書くことができる Nashornをつかうアドバイス
  69. 69. html5j エンタープライズ部 #jjug_ccc #ccc_r17 https://blogs.oracle.com/wlc/entry/javaee_c117 ■JavaでJavaScriptを使う理由(WebLogicCannelから抜粋) ● Javaに用意された膨大なライブラリやツール・セットをJavaScriptから使いたい ● JavaScriptを使って迅速にプロトタイピングを行いたい ● JavaScriptを利用してビジネス・プロセスを統合したい ● JavaScriptにより、サービスを組み合わせた開発(コンポジット開発)を行いたい ● 他のスクリプト言語と比べて、実現できる機能が多彩である ● クライアント・サイド(JavaFX)でもサーバ・サイド(CommonJS、Node.js)でも、 アプリケーションを書くことができる Nashornをつかうアドバイス
  70. 70. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ちょこっとハンズオン (PC持ってきている方向け) Nashornのつかいかた
  71. 71. html5j エンタープライズ部 #jjug_ccc #ccc_r17 事前準備と確認 ・JRE8または JDK8が入ってる事。 Nashornのつかいかた
  72. 72. html5j エンタープライズ部 #jjug_ccc #ccc_r17 事前準備と確認 ・JRE8または JDK8が入ってる事。 ・JavaScriptプログラムを書く準備 Nashornのつかいかた
  73. 73. html5j エンタープライズ部 #jjug_ccc #ccc_r17 事前準備と確認 ・JRE8または JDK8が入ってる事。 ・JavaScriptプログラムを書く準備 ・Java8へのパスがちゃんと通ってること。 Nashornのつかいかた
  74. 74. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ・ServerSideJavaScriptプログラム(例) Nashornのつかいかた print("hello Nashorn”);print("hello Nashorn”);
  75. 75. html5j エンタープライズ部 #jjug_ccc #ccc_r17 用意したJavaScriptファイルを引数にして コマンドラインで「jjs」と叩きます。 Nashornのつかいかた C:¥> jjs hoge.js
  76. 76. html5j エンタープライズ部 #jjug_ccc #ccc_r17 以上! Nashornのつかいかた
  77. 77. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ちょっと実演 Nashornのつかいかた
  78. 78. html5j エンタープライズ部 #jjug_ccc #ccc_r17 それだけだと寂しいので多少補足 ● jdk / jre共に「jjs.exe」が入っています ● Javaからは「ScriptEngineManager」が中身Nashorn ● 標準出力は「print」 ● オプションで「-scripting」をつけると、ちょっと不思議な動作に ● ECMAScript6の仕様を多少先取り ● Object Binding 個人的に翻訳中、そんなものでよければ以下を参照。 https://github.com/MSakamaki/PlayJavaScript/tree/master/Nashorn/Extensions Nashornをつかう時の留意事項
  79. 79. html5j エンタープライズ部 #jjug_ccc #ccc_r17 三時限目
  80. 80. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Server Side JavaScript Of Now (Nashornと周囲の生態系)
  81. 81. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSide比較の土俵 物事を公平に比較するにはまず同じ目線で By Victor Savkin
  82. 82. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSide比較の土俵 ServerSide JavaScript Applicationアプリケーション
  83. 83. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSide比較の土俵 NodeJSGromJSVert.X ServerSide JavaScript Application インタプリタ層 アプリケーション
  84. 84. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSide比較の土俵 SpiderMoncky GoogleV8Rhino NodeJSGromJSVert.X ServerSide JavaScript Application エンジン層 インタプリタ層 アプリケーション
  85. 85. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSide比較の土俵 SpiderMoncky GoogleV8Rhino NodeJSGromJSVert.X ServerSide JavaScript Application C/C++ C++Javaエンジン記述言語 エンジン層 インタプリタ層 アプリケーション
  86. 86. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSide比較の土俵 SpiderMoncky GoogleV8Rhino NodeJSGromJSVert.X ServerSide JavaScript Application C/C++ C++Javaエンジン記述言語 エンジン層 インタプリタ層 アプリケーション CommonJSはここら辺の考え
  87. 87. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ServerSide比較の土俵 SpiderMoncky GoogleV8Rhino NodeJSGromJSVert.X ServerSide JavaScript Application C/C++ C++Javaエンジン記述言語 エンジン層 インタプリタ層 アプリケーション Nashornをこれに当てはめると?
  88. 88. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Avatar.js ServerSide比較の土俵 SpiderMoncky GoogleV8Rhino NodeJSGromJSVert.X ServerSide JavaScript Application C/C++ C++Java Nashorn
  89. 89. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Avatar.js ServerSide比較の土俵 SpiderMoncky GoogleV8Rhino NodeJSGromJSVert.X ServerSide JavaScript Application C/C++ C++Java Nashorn 厳密に言うとAvatar.jsはGlassfishがいるのでちょっと違う・・・
  90. 90. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Avatar.js ServerSide比較の土俵 SpiderMoncky GoogleV8Rhino NodeJSGromJSVert.X ServerSide JavaScript Application C/C++ C++Java Nashorn 今回は各エンジン層が、どれだけのECMA力(ちから)を 秘めてるのかの観点で比較します ECMA力もない物がCommonJSを実装なんて・・・・
  91. 91. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ECMA力(ちから)の比較 各エンジンでECMA262のテスト (2014/05/15時点) どの程度ECMA262に準拠しているの? http://test262.ecmascript.org/ 興味がある方は、やり方を軽くまとめてるのでチャレンジ! https://github.com/MSakamaki/PlayJavaScript/tree/master/ECMAScript/Test
  92. 92. html5j エンタープライズ部 #jjug_ccc #ccc_r17 test262の結果
  93. 93. html5j エンタープライズ部 #jjug_ccc #ccc_r17 test262の結果 (Nashorn追加)
  94. 94. html5j エンタープライズ部 #jjug_ccc #ccc_r17 test262の結果 (use strict)
  95. 95. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScript機能の比較 JavaScriptベンチマーク (性能/ライブラリとの親和性)
  96. 96. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScript機能の比較 Google Octaneで今時のJS力を計測!
  97. 97. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScript機能の比較 閑話 何も考えず、octaneを動作させた時
  98. 98. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScript機能の比較 >jjs run.js Richards: 227 DeltaBlue: 31.9 Crypto: 46.0 RayTrace: 125 EarleyBoyer: 328 RegExp: 31.6 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"
  99. 99. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScript機能の比較 >jjs run.js Richards: 227 DeltaBlue: 31.9 Crypto: 46.0 RayTrace: 125 EarleyBoyer: 328 RegExp: 31.6 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main" 落ちたし!
  100. 100. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScript機能の比較 ちょっと調べて見たところ「Splay」で 「OutOfMemoryError: Java heap space」 が発生している。 Splay データ操作ベンチマーク。 スプレー木(splay tree) を使って 自動メモリ管理サブシステムを実行する とりあえず設定最適化したり落ちたところを修正したりして再実行 原因調査はまた今後
  101. 101. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScriptベンチマーク結果
  102. 102. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScript機能の比較 あまりに遅すぎるので、jjs.exeのソースを調査 動作時にコンパイルが毎回動作しており、そこが遅い! JITコンパイル後に、Octaneを実行するように作り直し JavaScript → JITコード → Octaneをcall
  103. 103. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScriptベンチマーク結果 ちゃんとコンパイルすると早いですね。
  104. 104. html5j エンタープライズ部 #jjug_ccc #ccc_r17 まとめ エンジンとしてのNashorn 割とECMA-262基準になってる。 strictモードはちゃんとやってる 処理系は一旦JIT後、実行すれば安定速度が出る スクリプト言語とは一体・・・・? (処理系をJSでやるならv8つかおう是 ミ☆) 用途としてはJSエンジンと言うより、 Java資産を呼び出すためのJSインタプリタ と言う意味合いが強そう
  105. 105. html5j エンタープライズ部 #jjug_ccc #ccc_r17 おわりの会
  106. 106. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ナマNashorn評価
  107. 107. html5j エンタープライズ部 #jjug_ccc #ccc_r17 Javaエンジニア にとってのNashorn JREに標準で入ってる → 追加の環境構築とかが必要ない  (気軽にスクリプトプログラミングできる) Javaで資産を作りJavaScriptで資産を連携する。 → BPELに変わる選択肢
  108. 108. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScriptエンジニア にとってのNashorn フロント系JavaScriptエンジニアにとって朗報? エンジン層だけ(ナマJS)でアプリは普通作らないと思う。 Shell用に機能が多少拡張されているが、 アプリやサービス作成には力不足 (ちょっとしたツール程度なら申し分ないが) 今後NashornベースのVert.Xとか Avatar.jsのお世話にはなるかも。
  109. 109. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScriptエンジニア にとってのNashorn じゃぁサーバサイド系(Node使いとか) JavaScriptエンジニアにとって朗報?
  110. 110. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScriptエンジニア にとってのNashorn じゃぁサーバサイド系(Node使いとか) JavaScriptエンジニアにとって朗報? いえ、NodeJSでいいです。
  111. 111. html5j エンタープライズ部 #jjug_ccc #ccc_r17 JavaScriptエンジニア にとってのNashorn じゃぁサーバサイド系(Node使いとか) JavaScriptエンジニアにとって朗報? いえ、NodeJSでいいです。 >JavaScriptを使って迅速にプロトタイピングを行いたい Node.jsで迅速にプロトタイピングを行い。 その資産をAvatar EEで使う。 NodeライクなSSJS開発へのOracleサポート ※ Avatar.jsはNodeJS互換を意識(https://avatar-js.java.net/)   あとは処理系をJSで書いた時のAvatarEEの性能次第?
  112. 112. html5j エンタープライズ部 #jjug_ccc #ccc_r17 最後に(JSについて) 言語として ・ 割と学習が容易 ・ ES6の登場による言語の強化
  113. 113. html5j エンタープライズ部 #jjug_ccc #ccc_r17 最後に(JSについて) 背景(提供されるソリューション) ・ フロント(HTML5)/バックエンド(NodeJS)両方で使える ・ Web Of Things ・ A社とかM社とかI社とかO社とか最近積極的!
  114. 114. html5j エンタープライズ部 #jjug_ccc #ccc_r17 ご清聴ありがとうございました。

×