(Translated by https://www.hiragana.jp/)
JRuby - Wikipedia コンテンツにスキップ

JRuby

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
JRuby
開発元かいはつもと Charles Nutter、Thomas Enebo、Ola Bini、Nick Sieger
最新さいしんばん
9.4.1.0 / 2023ねん2がつ7にち (16かげつまえ) (2023-02-07)[1]
リポジトリ ウィキデータを編集
対応たいおうOS 各種かくしゅ
プラットフォーム Java仮想かそうマシン
種別しゅべつ Rubyインタプリタ
ライセンス CPL/GPL/LGPL
公式こうしきサイト http://www.jruby.org/
テンプレートを表示ひょうじ

JRuby は、RubyインタプリタJavaによる実装じっそうである。フリーソフトウェアであり、CPL/GPL/LGPL の3つのライセンスを採用さいようしている。JRuby はJavaみつ連携れんけいしており、インタプリタを任意にんいのJavaアプリケーションにむことができ、JavaとRubyのコードあいだ双方向そうほうこうのアクセスを可能かのうにしている。

JRuby のおも開発かいはつしゃは Charles Nutter[1]、Thomas Enebo[2]、Ola Bini[3]、Nick Sieger[4] である。2006ねん9がつサン・マイクロシステムズは Enebo と Nutter を雇用こようし、仕事しごととして JRuby の開発かいはつをさせている[2]。2007ねん6がつ、ThoughtWorks は Ola Bini を雇用こようし、Ruby と JRuby にかんする仕事しごとをさせている[3]。 2009ねん7がつ、JRubyの開発かいはつしゃらはサンをはなれ、Engine YardでJRubyの開発かいはつ継続けいぞくしている[4]

歴史れきし[編集へんしゅう]

JRuby は2001ねん、Jan Arne Petersen が開発かいはつした。その当時とうじ(およびそれからすう年間ねんかん)、そのコードは Ruby 1.6 のC言語げんごコードの直接的ちょくせつてき移植いしょくぎなかった。Ruby 1.8.6 のリリースをきっかけとして、JRuby を 1.8.6 対応たいおうさせる作業さぎょう開始かいしされた。2001ねんからプロジェクトには何人なんにんかのコントリビュータが参加さんかし、最終さいしゅうてき現在げんざいの4にん中核ちゅうかくとするチームになった。

NetBeans Ruby Pack は NetBeans 6.0 から利用りよう可能かのうになっており、Ruby および JRuby の統合とうごう開発かいはつ環境かんきょうとして利用りようできるとともに、2つのRuby実装じっそうでの Ruby on Rails開発かいはつ環境かんきょうとしても利用りようできる[5][6]

JRuby 1.1 は実行じっこうコンパイラ事前じぜんコンパイラ追加ついかし、Ruby 1.8.6 リファレンス実装じっそうよりもおおくの場合ばあい高速こうそく動作どうさする[7][8]

JRuby 1.1.1 は Fedora 9 にパッケージとしてふくまれるようになった[9][10]

バージョン 1.1.1 以降いこう、JRubyチームはポイントリリース頻繁ひんぱんおこない、ユーザーに指摘してきされた問題もんだい素早すばや対処たいしょするようにしている[11]

2015ねん7がつ22にち「JRuby 9.0.0.0」をリリースした。やく3ねんぶりのメジャーリリースとなり、Ruby 2.2けい互換ごかんせいがある[12]

Rails[編集へんしゅう]

JRuby はバージョン 0.9(2006ねん5がつ以降いこう Ruby on Rails をサポートしており[13][14]同時どうじRubyGemsWEBrick実行じっこう可能かのうである。サンが2人ふたり開発かいはつしゃやとって以来いらい、Rails 対応たいおう性能せいのう大幅おおはば強化きょうかされてきた。JRuby バージョン 1.0 は Rails のテストケースのほとんどにパスした[15]。その、JRuby を Rails アプリケーション開発かいはつ環境かんきょう使つか開発かいはつしゃがでてきた[16]

マルチ Virtual Machine 共同きょうどう開発かいはつ[編集へんしゅう]

2008ねん2がつ27にちサン・マイクロシステムズ東京大学とうきょうだいがくは、RubyまたはJRubyアプリケーションを複数ふくすう同時どうじに1つのインタプリタじょう実行じっこうできる仮想かそう機械きかい実装じっそうおこな共同きょうどう研究けんきゅうプロジェクトを発表はっぴょうした[17]

Java仮想かそうマシンじょう動的どうてき[編集へんしゅう]

JSR 292 (Supporting Dynamically Typed Languages on the JavaTM Platform) [18]以下いか提案ていあんしている。

  • あらたに JVM レベルで invokedynamic 命令めいれい追加ついかし、動的どうてきかた検査けんさもとづくメソッドしを可能かのうにする。
  • 実行じっこう動的どうてきにクラスやメソッドを変化へんかさせられるようにする。

サンのオープンソースプロジェクト Da Vinci Machine で、このJSRのプロトタイプ実装じっそうおこなっている[19]最初さいしょのプロトタイプは OpenJDK のパッチとして開発かいはつされ、2008ねん8がつまつ完成かんせい発表はっぴょうされた[20][21]

JRubyチームは、非常ひじょう簡単かんたん方法ほうほうだが、コードベースに動的どうてきしをんだ。動的どうてきしはつぎの 1.1.5 でリリースされ、動的どうてきしのないJVMうえではそれが機能きのうしないようにしておくことになる[22]

設計せっけい[編集へんしゅう]

2006ねんはじめごろから、JRubyチームはそれまでのC言語げんごコードのたんなる移植いしょくからJavaのバイトコードをかした高性能こうせいのう実装じっそうにする努力どりょく開始かいしした。そして、JRuby を使つかって Ruby on Railsまったくわえずにそのまま実行じっこうできるようにすることを目標もくひょうとした。その過程かていでJRubyのテストスイートも拡張かくちょうされ、JRubyの「ただしさ」を保証ほしょうする役目やくめたした。結果けっかとして2006ねんまつから2007ねんはじめにはJRubyの中核ちゅうかく部分ぶぶんさい設計せっけいとリファクタリングにとりかかることが可能かのうになった。

JRuby は複数ふくすうモードの Ruby よう仮想かそう機械きかいとして設計せっけいされている。コードは直接ちょくせつインタプリタで解釈かいしゃく実行じっこうされるだけでなく、JITコンパイラJavaバイトコード実行じっこうにコンパイルされたり、AOTコンパイラ実行じっこうまえにJavaバイトコードにコンパイルされたりする。2007ねん10がつまではインタプリタモードしかなかったが、バージョン1.1からAOT/JITコンパイラがサポートされるようになった[23]。これらのモードは混在こんざい可能かのうであり、また生成せいせいしたバイトコードからJavaクラスファイル生成せいせいすることもできる。

JRubyプログラミング[編集へんしゅう]

JRuby は基本きほんてきには Ruby インタプリタだが、Java実装じっそうされているてんことなる。JRuby と Ruby は基本きほんてきおなじだが、JRuby では Java との緊密きんみつ連携れんけい可能かのうである[24]

JRuby から Java を[編集へんしゅう]

JRuby の強力きょうりょく機能きのうひとつとして、Javaプラットフォームのクラスをすことができる。これをするには、まず "include Java"(以前いぜんのバージョンでは "require 'java'")として JRuby の Java サポートをロードする。以下いかれいは、Javaの JFrameJLabel付与ふよしたものを生成せいせいする。

include Java

frame = javax.swing.JFrame.new()
frame.getContentPane().add(javax.swing.JLabel.new('Hello, World!'))
frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE)
frame.pack()
frame.set_visible(true)

また、JavaコードをよりRubyてきアンダースコアを使つかった命名めいめい規則きそくし、JavaBeanのプロパティを属性ぞくせいとして参照さんしょうできる。

frame.content_pane.add label
frame.visible = true

Java から JRuby を[編集へんしゅう]

JRuby は容易よういに Java からすことができ、それには JSR 223[25] Scripting for Java 6 か Bean Scripting Framework使つかう。くわしくは JRuby Wiki参照さんしょうされたい。

性能せいのう[編集へんしゅう]

JRuby は上述じょうじゅつしたように、インタプリタモード、AOTモード、JITモードをサポートしている(2しゃはバージョン1.1から[23])。

インタプリタモード[編集へんしゅう]

このモードでは、JRuby は標準ひょうじゅんの Ruby リファレンス実装じっそうよりもおそ[26]

たとえば、Rails 処理しょりをインタプリタモードでおこなうと Ruby 1.8 のリファレンス実装じっそうくらべて 50% から 70% おそい。

Ruby 1.9 (YARV)ベンチマークを Java 6使つかってみると、JRuby は Ruby の4ばいおそさである(時間じかんふくむ)[27]

JITモード[編集へんしゅう]

JITモードは JRuby 1.1 から利用りよう可能かのうである。ベンチマークの結果けっかかられば、Ruby 1.8 リファレンス実装じっそうよりも高速こうそくである[28][7] [29]。ただし Ruby 1.9 よりは低速ていそくである[8]。しかし、JRubyチームは 1.1 の性能せいのうが Ruby 1.9 をも一部いちぶベンチマークで凌駕りょうがしつつあると指摘してきしている[30]

また、実際じっさいのアプリケーションであるMongrelというWebサーバでは、Ruby よりも JRuby のほう性能せいのうがよい(JVM完了かんりょう[31]

AOTモード[編集へんしゅう]

サーバVMのままさらにインタプリタからコンパイルモードにえると、ほとんどRuby 1.9.1とわらない実行じっこう速度そくど実現じつげんしており、さらに各種かくしゅ最適さいてき実施じっしすることで実行じっこう速度そくど向上こうじょうし、How JRuby Makes Ruby Fastで紹介しょうかいしているかぎりでは最終さいしゅうてきにRuby 1.8.6よりも50ばい、Ruby 1.9.1よりも10ばい高速こうそく実行じっこう速度そくど計測けいそくされている[32]

脚注きゃくちゅう[編集へんしゅう]

  1. ^ JRuby 9.4.1.0 Released”. 2023ねん2がつ10日とおか閲覧えつらん
  2. ^ Jacki (2006ねん9がつ7にち). “Sun Welcomes JRuby Developers”. On the Record. 2006ねん9がつ9にち閲覧えつらん
  3. ^ Ola Bini. “ThoughtWorks”. On the Record. 2008ねん9がつ16にち閲覧えつらん
  4. ^ JRuby guys jumped from fear of the unknown” (2009ねん8がつ3にち). 2009ねん12月15にち閲覧えつらん
  5. ^ Ruby & JRuby Support Available in NetBeans IDE
  6. ^ Ruby brightens the NetBeans platform
  7. ^ a b JRuby performance benchmark”. shootout.alioth.debian.org (2007ねん11月5にち). 2007ねん11月5にち閲覧えつらん
  8. ^ a b Cangiano, Antonio (2007ねん3がつ12にち). “The Great Ruby Shootout”. 2008ねん2がつ1にち閲覧えつらん
  9. ^ Nutter, Charles (2008ねん4がつ25にち). “JRuby 1.1.1 in RedHat Fedora”. 2008ねん4がつ26にち閲覧えつらん
  10. ^ jruby”. fedoraproject.org. 2008ねん4がつ26にち閲覧えつらん
  11. ^ JRuby 1.1.3 Released”. jruby.codehaus.org (2008ねん7がつ19にち). 2008ねん7がつ19にち閲覧えつらん。 “Our goal is to put out point releases more frequently for the next several months (about 3-4 weeks a release). We want a more rapid release cycle to better address issues brought up by users of JRuby.
  12. ^ Ruby 2.2互換ごかんの「JRuby 9.0.0.0」リリース”. OSDN Magazine (2015ねん7がつ23にち). 2015ねん7がつ24にち閲覧えつらん
  13. ^ Rails Support”. JRuby Team. 2008ねん2がつ17にち閲覧えつらん
  14. ^ Nutter, Charles (2008ねん8がつ24にち). “Zero to Production in 15 Minutes”. 2008ねん8がつ27にち閲覧えつらん
  15. ^ 2807のRails固有こゆうテストケースのうち 98.6% にパスした。くわしくは JRuby 0.9.8 Released 参照さんしょう
  16. ^ Success Stories”. JRuby Wiki (2008ねん1がつ29にち). 2008ねん2がつ17にち閲覧えつらん
  17. ^ 東京大学とうきょうだいがくとサン・マイクロシステムズ、産学さんがく連携れんけいモデルによる共同きょうどう研究けんきゅうテーマを決定けってい研究けんきゅう活動かつどう開始かいし”. サン・マイクロシステムズ (2008ねん1がつ10日とおか). 2008ねん9がつ16にち閲覧えつらん
  18. ^ see JSR 292
  19. ^ Sub-Projects and Investigations”. Sun Microsystems (2007ねん). 2008ねん2がつ6にち閲覧えつらん
  20. ^ Rose, John (2008ねん8がつ26にち). “Happy International Invokedynamic Day!”. 2008ねん9がつ3にち閲覧えつらん
  21. ^ Lorimer, R.J. (2008ねん9がつ1にち). “Dynamic Invocation Runs on OpenJDK”. infoq.com. 2008ねん9がつ3にち閲覧えつらん
  22. ^ Nutter, Charles (2008ねん9がつ11にち). “A First Taste of InvokeDynamic”. 2008ねん9がつ13にち閲覧えつらん。 “I managed to successfully wire InvokeDynamic directly into JRuby's dispatch process! Such excitement! The code is already in JRuby's trunk, and will ship with JRuby 1.1.5 (though it obviously will be disabled on JVMs without InvokeDynamic).
  23. ^ a b Nutter, Charles (2007ねん9がつ27にち). “The Compiler Is Complete”. 2007ねん10がつ12にち閲覧えつらん
  24. ^ Script your Java applications and efficiently reuse your Java libraries with this dynamic language”. javaworld.com (2006ねん7がつ17にち). 2008ねん4がつ26にち閲覧えつらん
  25. ^ JSR 223: Scripting for the Java Platform Specification Request
  26. ^ Nutter, Charles (2007ねん4がつ16にち). “Paving the Road to JRuby 1.0: Performance”. 2007ねん11月5にち閲覧えつらん
  27. ^ 一部いちぶのテストケースをのぞくと、Ruby 1.8 にくらべて 50% 程度ていどおそさである(一部いちぶとは全部ぜんぶで39のうち、thread_create_join, sieve, count_words, mandelbrot, and answer の5つ)
  28. ^ Nutter, Charles (2007ねん10がつ12にち). “Performance Update”. 2007ねん10がつ12にち閲覧えつらん
  29. ^ Nutter, Charles (2007ねん10がつ12にち). “Performance Update”. 2007ねん10がつ12にち閲覧えつらん
  30. ^ Nutter, Charles (2008ねん2がつ16にち). “JRuby RC2 Released; What's Next?”. 2008ねん2がつ17にち閲覧えつらん。 “JRuby's performance regularly exceeds Ruby 1.8.6, and in many cases has started to exceed Ruby 1.9.
  31. ^ Sieger, Nick (2007ねん10がつ25にち). “JRuby on Rails: Fast Enough”. 2007ねん10がつ28にち閲覧えつらん
  32. ^ JRuby 50ばいそく、MacRubyはすでに到達とうたついき - 竹内たけうち関数かんすう

関連かんれん項目こうもく[編集へんしゅう]

外部がいぶリンク[編集へんしゅう]

マルチメディア[編集へんしゅう]