2010年12月30日木曜日

JRubyの一年を振り返って

原文: チャールズ=オリバー=ナター

皆さん、こんにちは。

2010年ももうすぐ終わり。この一年を振り返ってJRubyにとって重要な出来事や人々を見て行きましょう。
2010年は、JRubyにとって素晴らしい年でした。様々なプロジェクトに採用され、また、第一級のRuby言語実装としても第一級のJVM言語としても人々に認知され、更にはJRuby自体も多いに進化した一年でした。早速みていきましょう。

JRubyを巡る人々


JRubyの大事な使命の一つは、より多くの人にRubyというプログラム言語を届ける事です。
その為に、世界中を飛び回ったり、ブログ記事を書いたり、援助者を募り、パッチを取り込んだり、ユーザのサポートに努めてきました。2010年特に貢献のあった方々を挙げて行きましょう。

浅里洋嗣氏


浅里氏は2009年を通じて貢献の実績があり、メーリングリストIRCチャンネルでも、JRubyを使ったアプリケーションを動かす際に起こる様々な問題点を解決する手助けをする常連でした。
2010年初頭にEngine Yard社がJRubyサポートエンジニアの募集を行ったとき、浅里氏はこの仕事に適任だったと言えます。
彼はフルタイムで雇用され、JRubyコミッタに迎え入れられました。
今年の終わりにはカンファレンスなどでも講演をする事にもなりました。


Nahi(中村浩士)氏


NahiさんはRuby(CRuby、つまりMRI)のコアチームのメンバーとして、OpenSSLに代表される暗号、I/O等、システムレベルを専門に貢献されてきました。
Rubyの標準ライブラリを覗いてみると、彼の名前が其処彼処に見えるでしょう。
2010年の半ば頃、NahiさんはJRubyでopensslライブラリを使う為のjruby-opensslの手伝いを買って出てくれました。
NahiさんはOla Bini氏のOpenSSLの移植という大作を基に、CRubyバージョンとほぼ100%互換性のあるライブラリを造り上げてくれました。 opensslが如何に低水準の事を取り扱うのかを考えてみると、これは正に驚くべき偉業です。
この後、Nahiさんは他の厄介なサブシステムの手伝いをされ、またJRubyの大きな支援者として活躍されています。

David Calavera氏


Calavera氏もまた2009年以来の貢献者で、2010年も引き続き多くの貢献をしてくれました。
彼の貢献の多くはRuby 1.9仕様の充実や、ユーザから報告のあった不具合の修正、そしてメーリングリストとIRCでのユーザサポートです。
加えてDavidは素晴らしいTrinidad gem(Tomcatを組み込んだ、JRubyによるRails/Rackアプリケーションコンテナサーバ)を書きました。Trinidadは急速に世界中のJRubyユーザの間に浸透しています。

Joe O'Brien氏


O'Brien氏はオハイオ州に本社を置くRubyとRailsのコンサルタンティング会社EdgeCaseの創始者の一人です。
大企業関係のプロジェクトに経験が多く、大企業の新しいテクノロジーを取り入れる傾向の薄さを知るO'Brien氏はJRubyの偉大な支持者の一人です。
2010年、O'Brien氏は彼自身のプロジェクトである"eRubyConf"を一年休んで、始めての単体開催となるJRubyConfの実施を現実のものとする手伝いをして下さいました。
このような機会に恵まれてJRubyをより多くの人に知ってもらう事が出来るのはとても素晴らしい事です。
O'Brien氏のお陰でJRubyConfが実に素晴らしいイベントであった事は言うまでもありません。

Engine Yard社


Engine Yard社の絶え間ないJRubyへのサポートにも感謝致します。
Engine Yard社はJRubyのコアメンバー(筆者、Tom Enebo氏、Nick Sieger氏、浅里氏)の新しい「家」となり、またマーケティング、トラベル、技術的そして精神的な面からも支えて頂いています。

JRubyのサポートとプロフェッショナルサービスは今年開始されました。
xCloudではJRubyは既にサポートされていますし、
AppCloudでもベータプログラムによりJRubyを試用することが可能です。
Engine Yard社で働く事は素晴らしく、会社の収益に貢献出来るのは尚の事素晴らしいです。

ユーザと貢献者の皆さん


勿論、ユーザと貢献者無しにJRubyを語る事は出来ません。
今年に入ってJRubyを使っているというサイトの報告を何十も貰いましたし、Ruby gemの作者達もJRubyを意識してテストやサポートを始めました。
Rails作者であるDavid Heinemeier Hansson氏によれば、Rails 3.0は(C Rubyに加えて)JRubyでも動くように設計されています
Twitterにおいても毎日JRubyについてのツイートが何百もありJRubyに関するメーリングリストも今年に入って14000件の投稿があり、何十もの世界中のカンファレンスを通じて、何千というユーザや将来のユーザたり得る人々に出会う事が出来ました。
2010年をJRubyにとって最高の年にして下さったユーザ、貢献者、そしてRubyライブラリとアプリケーションの作者の皆さんに感謝の意を表します。

JRubyの進化


勿論JRuby自体にも多くの動きがありました。
今年に入ってのコミットの数は(マスターブランチで)2300を超え567に上るバグレポートを解決し(とは言うものの、更に868件の追加がありましたので我々の仕事はまだまだ続きます)、八つ(1.4.1, 1.5.0-1.5.6)のJRubyリリースを行い、 "RubySpec"のテスト結果を 1.8互換モードで99%、1.9互換モードで90%を越えるまでに改善しました。
2011年初めに予定されているJRuby 1.6のリリースで公式な発表となります。
主立った改善点を見ていきましょう。

Ruby 1.9との互換


今年八月のRuby 1.9.2リリースを受けて、JRubyでもこの1.9系統のRubyとの互換性を最優先事項にしました。Marcin Mielzynski氏、Ola Bini氏、David Calavera氏、そして浅里氏らの貢献により断片的なサポートの素地は既に在りましたが、本格的な作業はRubyのコアチームが最終的な1.9.2をリリースするまでは保留にしておきました。
夏の1.9.2リリースから、何百ものコミットがあり、また多数の不具合を修正しました。その結果JRubyは1.9互換モードでRubySpecの90%、そしてRailsの一部であるActiveSupportのテストの95%をパスするまでになりました。
JRubyはこの先数ヶ月で正式に1.9互換となる見込みです。

Windowsのサポート


私達はJRubyが「どこにでもRuby」を実現する最善の手段であると信じています。
このために2010年にはWindows上でJRubyをより良く動かす為の手段を講じてきました。
様々なJVMについて言える事ですが、JRubyのコアである仮想マシンは既に堅牢なものです。
ところがRubyの機能という物はシステムレベルでの機能を含んでおり、あらゆるOSプラットフォームでのサポートを一様に実現するのは難しいものがあります。
機能を苦労して実装しても、RubyプログラマはWindowsではどうしても動かなかったりビルド出来ないC拡張に出くわす事がしばしばあります。
最新のRubyのビルドを手にする事すらままならない可能性もあります。
私達は、鍵となるC拡張をJava(またはRubyとJavaの統合)に移植する事によってWindowsを使う人たちが初めの一歩を踏み出しやすくする為の努力を続けています。
そしてJRubyはWindowsでRubyを使う最も簡単な方法と考えられる事もあります。
2011年もこの方面での作業は続きます。

Rails 3のテスト


JRubyはCRuby以外のRuby言語実装の中では(2006年以来)最も長く「Railsを走らせて」いますが、この間Rails自体のテストを100%通す事は実は出来ていませんでした。
2010年、浅里氏、Calavera氏、Nick Sieger氏、Tom Enebo氏らの貢献により事態は一変し、JRubyはRailsのテストを100%通すようになりました。
更に素晴らしいのは、JRubyは多くのRuby言語実装のうち、継続的インテグレーションをRailsに対して毎日行っている唯一のものであるという点です。
RailsをJRubyで動かそうとするユーザが快適な環境を提供する努力を我々は怠りません。

C拡張のサポート


2010年のRuby Summer of Codeのプロジェクトの一つとして、Wayne Meissner氏が造り上げたプロトタイプを基にTim Felgentreff氏はJRubyにおけるC拡張のサポートを実現しました。
予想を遙かに超えた、実に素晴らしい努力の賜物で、(私は絶対に不可能だと考えていたのですが、Felgentreff氏とMeissner氏は私が間違っていた事を証明してくれました)よく見かける多くのC拡張は「一通り動く」ようになりました。
勿論、(多くのOSプラットフォームで、安定して、また並行して動かすという観点から)Javaでそれに相当する物や移植した物があればそちらを薦める事に変わりはありませんが、JRubyへの移行を楽にする短期的な手段としては問題ないでしょう。
これも近いうちにリリースされるでしょう。

性能


言語実装としてのJRubyも見えない所で進化しています。
Subbu Sastry氏とEnebo氏は、新しいIR(中間表現)と、それを利用してRubyコードを最適化するコンパイラの実装を進めていて、既におおよその形が出来上がっています。2011年にはこれを基にしてJRubyのパフォーマンスの更なる向上が期待出来そうです。
私もJRubyの動的最適化に努めています。インタープリタをプロファイリングする事で動的な呼び出しを取り除いたり、Rubyメソッドの呼び出し毎に起こるオーバーヘッドを取り除いたり、といった具合です。
暫定的なテストによると、この「dynopts」オプションを使うとJavaそのもののパフォーマンスに匹敵するような結果を得る事も可能である事が分ります。同時に、(Ruby言語実装の中にあって既に最善のものの一つであるとは言え)JRubyのパフォーマンスがこれ以上ないくらい最適化されているのではないということを実感する一瞬でもあります。
2011年初頭にはこの方面での作業が続きます。

周辺のソフトウェア


JRubyのコアチームがJRubyの改善に努力する一方、多くの方々がJRubyに関わるライブラリ、サーバなどを進化させています。
これらのうち幾つかを見ていきましょう。

win32ole


JRubyのバグトラッカーで解決されずにいた物のうちで最も古い物の一つが「win32ole」ライブラリの問題でした。
win32oleライブラリは、Windows上でOLEへのクリーンなアクセスを可能にします。
これにより、ネーティブのコードを書かずにマイクロソフトOfficeやインターネットエクスプローラ、その他のWindows固有のアプリケーションやライブラリを呼び出すことが出来るようになります。
これはEngine Yard社のAudentes Technology社とのプロフェッショナルサービス契約の一環として行われました。
JavaとCOMのブリッジであるJacobライブラリを大幅に改善し、それをガッチリ統合してwin32oleサポートを実現しました。
Enebo氏の数週間に渡る並々ならぬ努力の結果、Rubyで使うwin32oleライブラリとしては最も堅牢でマルチスレッドで利用できるものが生まれました。

ActiveRecord JDBC


Rails 3.0をサポートする為には、JRuby自体の修正に加えてデータベース接続の為のアダプターも数々のデータベースのいずれにおいてもテストを100%パスする物である必要がありました。
ActiveRecord-JDBC」の強力な推進者であるSieger氏は、AR-JDBC 1.0を今年リリースしてそれを実現しました。
この仕事は続いており、Javaで書かれたデータベースであるDerbyJavaDB)、Hypersonic SQLH2をもサポートしています。
これによりJRubyは、多種多様なプラットフォームでRailsアプリケーションを動かすのに最も手軽な手段になったと言えるでしょう。
JRubyのユーザの中には実に変わったデータベースとOS環境の人々が居るのがその証左です。

デプロイメントのオプション


以下に挙げる方々の貢献でJRubyでサーバアプリケーションを書くのが一層簡単になりました。

Nick Sieger氏はwarblerとjruby-rackライブラリのバージョン1.0を今年リリースしました。
Warblerにより、Rackに準拠したアプリケーション(Railsを含む)をWAR(Web ARchive)ファイルとしてJavaウェブコンテナにデプロイ出来ます。
WinStoneというサーバの搭載により、実行可能なウェブサーバをWarblerだけで造り上げることも可能になりました。
さらにSieger氏は、"warble"コマンドだけで、Rubyのアプリケーションを1つの実行可能JAR形式にまとめられるようにしてくれました。凄いです。
Railsを大企業向けに浸透させる事が出来る可能性を持ったデプロイメントの選択肢はWarberを置いて他にありません。
その意味でバージョン1.0は記念すべきマイルストーンです。
Warblerと表裏一体を成すjruby-rackは、rack仕様のインターフェイスとJava servlet APIの互換を実現し、servletに拠ったRubyアプリケーションの中核を成す物です。

コマンドラインを使う人々にはTrindadもデビューしました。David Calavera氏はjruby-rackを使ってTomcatを組み込んだツールを作りました。これによりJRubyユーザは高速で並行処理に長けたサーバをたったの7MBのgemで手にする事が出来るようになりました。
これと似た物として、浅里氏がメンテナを務めるGlassFish gemが挙げられます。
TomcatのかわりにOracleのGlassFishサーバの中心を成すGrizzlyを組み込んでいます。
この二つのgemは紛れもなくRailsのアプリケーションを世に出す最も簡単な方法と言えます。

JBossを好む向きには、Bob McWhirter氏とRedHatの彼のチームにより産み出されたTorqueBoxがあります。
これにはJavaのアプリケーションサーバの中で最も素晴らしいJRubyが実現されています。
TorqueBoxはjruby-rackによってJRubyアプリケーションをデプロイしていますが、それに加えてJava EEサブシステムの為のRubyで書かれたAPIやプラグイン、バッチ処理、ウェブサービス、その他諸々を提供しています。
「Java EEの為のRuby」として最善のオプションと言えます。
既にJBossやJava EEを使っていてRubyを弄ってみたいと言う人(またそうでなくとも色々なサービスが初めから備わっている方が良いという人)にはこれをお勧めします。

最後にJohn Woodell氏とRyan Brown氏が続けているGoogle AppEngine for JavaにおけるJRubyサポートが挙げられます。
GAE/Jは小さなサービスを手軽に実現出来るツールで、JRubyで書かれたアプリケーションを動かす場所として成果を挙げています。
両氏はJRuby-on-GAEを通じてJRubyユーザをサポートしており、JRubyユーザはデプロイメント手段の選択の幅が広がる事を歓迎しています。

開発ツールと管理ツール


JRubyでは標準のJVM/JDKツール管理インターフェイスを使う事が出来ますが、このようなツールはRubyを普段使うプログラマにとっては馴染みが薄く、時に仰々しい物です。
このため、「--profile」というフラグでRubyコードだけを考慮する計測化プロファイラーを動かす事が出来ます。(コールグラフのサポートも近く追加される見込みです。)
ruby-debug gemのメンテナ諸氏との連携によりJRubyをバックエンドとするデバッガが正式にリリースされ、ruby-debug gemは綺麗にインストールされるようになりました。
RubyGemsにも起動時間短縮の為のパッチを提供しましたし、JRubyが使うスクリプトも(mkristian氏の多大なる協力の元)修正してmavenライブラリをRuby gemとしてインストールしたり依存の解消を行ったり出来るようになりました。
AntとRakeの双方向統合も今年リリースされました。
これによりAntで書かれたビルドスクリプトをRakefileで書き換えたり二つをシームレスに組み合わせる事が至極簡単になりました。

Java純正のNokogiri


2009年頃、RubyでXMLを扱うライブラリの定番としてNokogiriが定着し始めました。
クリーンで高速なこのライブラリは人気のあるlibxmlライブラリを使っています。
JRubyユーザもこのライブラリの恩恵にあやかる事が出来ましたが、それは速度にC拡張に劣るFFIを使った物を使わざるを得ませんでした。
Ruby Summer of Codeのプロジェクトの一つとしてSergio Arbeo氏はJavaのライブラリであるXercesを使って純正Javaのライブラリを作り始めました。
完了にはまだ沢山の課題が残っているうちに、残念ながら夏は終わってしまいましたが、原田洋子氏(組み込みJRuby、JSR-223及びBSFの実装者)がこの後を引き継いでくれました。
この結果、どのプラットフォームでもlibxmlの有無に関わらずネーティブのコードを書く事無しにほぼ完璧に動くNokogiriが完成しました。
これは最もポータブルなNokogiriであると言うだけでなく、FFIバージョンに較べてかなり高速な物です。

JRubyを取り巻くコミュニティ


前にも述べましたが、JRubyを使ってくれるユーザ、イベント、そしてプロジェクトなしにはJRubyはJRubyたり得ません。
JRubyのコミュニティではどんな事が起こったのかを振り返ってみます。

JRubyConf 2010


Joe O'Brien氏とEngine Yard社の協力により、始めての単体開催となるJRubyConfがありました。10月の初めに150人を超す参加者が世界中からオハイオ州コロンバスに集い、JRuby、JRuby on Rails、JRuby on Android、JRuby関連のプロジェクト、その他(勿論JRubyに特化されていない議題もありました)についての講演に耳を傾けました。
昨年RubyConf 2009直後に開催されたJRubyConf 2009と今年のJRubyConf 2010の成功を受けて、来年も是非JRubyConf 2011を開催したい所です。ヨーロッパでもJRubyConfを、という気運もあります。あなたの参加をお待ちしています。

ブログ


JRubyのコミュニティの面々は何百と言う記事を今年書きました。多すぎてここでは挙げません。いずれ纏めて発表出来ればいいと思いますが、それまではどうか独自に検索して下さい。JRubyが実に目新しい方法で使用されているのが解ると思います。

会議とユーザグループ


RubyとJavaの両方に根差すJRubyは両方のイベントに気を配る必要があります。
そしてJRubyの普及の為、色んな場所へと旅をしました。
今では世界中でRubyやJavaの会議と言えば誰かがJRubyについて話をしてしているでしょうし、RubyやJavaのユーザグループでは最低一回JRubyについての発表があったのではないでしょうか。
JRubyのコアチームメンバーがした物が多いですが、実際にJRubyを使っているユーザによる発表も数多くあり、JRubyの普及に一役かっています。
JRubyコミュニティは益々多くのイベントに姿を現していますし、この傾向は2011年も続くよう期待しています。

2010年にはJRubyを中心に据えたユーザグループが誕生しました。JRuby Users JPです。片手に余る回数の会合を既に開催しており、Ruby会議2010ではメンバーの方々ともお会いする事が出来ました。

さあ、あなたもJRubyについて発表されては如何ですか?

RubyConf 2010でのJRubyトラック


筆者自身による初めてのJRubyについての(実は人前で喋る最初の)発表はRubyConf 2005でした。当時JRubyはIRBを動かす事もままならず、他の講演者達はJRubyをネタにしてジョークを飛ばしていました。
それが2010年になると、JRubyを主な題材とする講演は数多くあり、その他の講演でも取り上げられる事がしばしばになりました。
RubyConf主催者の方々に感謝します。そして、JRubyを受け入れてくれたRubyのコミュニティの人々に敬意を表します。
我々の努力が、諸氏がより良いRubyプログラマとなる一助となっている事を実感しています。

LinkedIn社の"Signal"

LinkedIn社は多くのプログラミング言語を用いて開発をする事で知られている所で、JRubyをユーザ向けに使った(LinkedIn Polls)先駆者の一つです。
LinkedIn社は今年、野心的な、Signalというソーシャルアグリゲータをユーザのプロファイルへとつなげるアプリケーションを発表しました。
そのフロントエンドはJRubyで、Scala等、他のJVM言語によりバックエンドサービスが実装されています。
このプロジェクトの成功により、これに似たプロジェクトの幾つかにゴーサインが出ているそうです。

RedCar


Macユーザなら、エディタはTextMateを使っているのではないでしょうか。
大人気のこのエディタに触発されてDan Lucraft氏RedCarを書きました。
そして手軽に弄る事が出来るよう、Lucraft氏はRedCarをRubyで書いたのです。
2009年の終わり頃、Lucraft氏はマルチプラットフォームでのサポートを容易にするため、コードベースをC RubyとGTKで書かれた物からJRubyへと移植する決断をしました。
2010年、RedCarは幾つかのリリースを経て、沢山のフィーチャを備え、多くのユーザと貢献者を獲得しました。
かく言う私もTextMateからRedCarに乗り換えたユーザの一人です。
JRubyについての講演でRedCarを使うのは実に快いです。
そしてJRubyで書かれたデスクトップのアプリケーションに人気が出るのもとても良い事です。

Ruboto


2010年はAndroidプラットフォームの人気が爆発した年でもありました。
AndroidはJavaに似たシステムですので、Javaの行く所にはJRubyもついて行きます。
2009年に私が実験的に行ったJRubyをAndroidに移植する試みを
Jan Berkel氏Scott Moyer氏等がRuboto IRBに大幅に手を加え、今年Androidマーケットプレイスにリリースされました
Ruby Summer of Codeの参加者であるDaniel Jackoway氏Ruboto Coreプロジェクトを起こし、Androidで動くJRubyベースのアプリケーションの生成器とそれにまつわるAPIを作り上げました。
またJay McGavren氏等はRubotoでの実験を多いに宣伝して、Rubyのモバイルの分野での可能性を示してくれています。

「Using JRuby」刊行


5人の執筆者(コアチームからの四人—私、Sieger氏、Enebo氏、Bini氏とIan Dees氏)による二年の歳月を経て、JRuby本の決定版とも言うべき「Using JRuby」が遂に完成しました。
この記事を書いている現在、本は版組みに入っており、2011年一月に出荷の予定になっています。
これにはPragmatic Programmersからの根気強い支持が欠かせませんでした。
それを主題とするカンファレンスと、そしてそれを主題とする本が出版されたと言うことは、私にとってみれば、そのプロジェクトが一人前になったと言う事です。
JRubyにも遂にその日がやって来ました。

The Bossie


JRubyは他の分野でも認められるに至りました。InfoWorld誌による(Best Open Source Application Development Software)部門Bossie賞の受賞です。
これで「InfoWorld誌が認めたRuby言語実装」と書いても差し支えありませんね。

次はあなたの番です


さあ、あなたもJRubyコミュニティに参加してみませんか。
あなたの地域のJava、Ruby、OO、その他テクノロジー関係のグループで発表したり、コーディングイベントを主催してみませんか。
近くのカンファレンスでの発表はどうですか。
自分のプロジェクトにJRubyを使ってみて、JRubyが改良すべき点などを教えて下さい。
ブログ記事を書いたり、スクリーンキャストを収録されてはどうですか。
JRubyがどんなに素晴らしいか、友人に伝えて下さい。
JRubyのトラッカーを眺めたり、今動かないRubySpecsを見たり
メーリングリストで話題になっている問題などを読んで、貢献出来るかどうか見てみて下さい。
JRuby wikiを読んでみて、改善すべき所を見つけたり、新しい記事を書いたり、或いは他の言語への翻訳などの手伝いをしてみませんか。
Rubyを広める手伝いをお願いします。
私達はJRubyをより良い物にする努力を続けて行きます。

最後に…。あなたにとって印象深いJRubyの出来事は何でしたか。コメント欄でもいいですし、ブログ記事などでも構いません。お待ちしています。

0 件のコメント:

コメントを投稿