BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Lift と JRuby の統合 - Ruby と Scala 間を橋渡し

Lift と JRuby の統合 - Ruby と Scala 間を橋渡し

原文(投稿日:2011/02/01)へのリンク

Scala で人気の Webフレームワークである Lift (詳細は InfoQ の Lift 資料を参照) は, JRuby 専用 API を用意することで Ruby 開発者たちを招き寄せようとしている。Lift の製作者である David Pollak 氏の説明による 現在の状況は,"いくつか例外はありますが,[...] Lift は JRuby からも十分に利用可能です。" というものだ。

しかし Ruby 開発者は Lift の使用を望むだろうか? Ruby には Rails を始めとする,Web アプリケーション用のフレームワークがすでに存在するのだ。今回の発表で,David は次のように書いている。

Lift は間違いなく,現在入手可能な最高の Web フレームワークです。Comet および Ajax 用のセマンティクスでは,他のどの Web フレームワークよりも優れていますし,デフォルト状態でほとんどの Web フレームワークより安全です。Lift ベースのアプリケーションは,大多数の Web アプリに比較して記述が簡潔で,スケール性においても良好です。 別の言い方をするなら,よりセキュアかつスケーラブルで,インタラクティブ性の高いアプリ構築を実現する Web フレームワークを探しているのであれば,Lift がまさにそれなのです。

Lift の Seven Things web サイトでは,この主張を自身で確かめることができる。このサイトには "他のフレームワークでは実現困難な7つの事" に関するデモと実装例が公開されている。

Ruby プログラマに Lift を提供することの動機について,私たちは David に質問した。

私は Scala が好きです。Scala は私のお気に入りのプログラミング言語なのです。これまで数多くの開発組織で,Scala に関する話をしてきました。しかしその後の Scala の普及状況を見たとき,私はこの言語が Ruby や,あるいは Python の採用レベルにさえも達しそうもないことに気付いたのです。その一方で Lift は,他のどのフレームワークよりもセキュアで,インタラクティブなアプリケーションを指向する Web フレームワークとして,発展を続けています (Seven Things をご覧ください)。ですから私は,Lift で Scala 以外の言語をサポートしようと決心したのです。

この作業を適切に行うために私は,Lift への Ruby API 実装作業を手助けしてくれるハードコアな Rubyist を募集してきました。そう,Ruby API です。Lift に何かをボルト留めするようなやり方ではなく ... Lift-Ruby コードを Ruby で実装することにしたのです。その第一歩については,http://liftjr.org でご覧ください。

私は Ruby API を通じて ,Scala API よりも新しく,よい方法で Lift を公開したいと本当に願っています ... いつの日にか,Ruby での実績を Scala API にも反映できればと思います。

ただし,静的言語である Scala の愛好者のひとりとして,私からはあまり多くを語るつもりはありません。Ruby API をよいものにする方法についての意見を集約することが,私の目標なのです。

InfoQ: JRuby から Scala に,あるいはその逆にアクセスするとき,どのような問題に突き当たるのでしょうか。

JRuby API はよく考えられた,クリーンで使いやすい API です。実質的な問題は何もありません ... 強いていえば一般的な,単一型 (unityped) と完全型 (fully typed) の問題くらいでしょうか。この件に関しては philip Wadler 氏の解説 を参照してください。

JRuby から Scala へのアクセスに関しては,Scala のシングルトン (object キーワード) 関連でいくつか問題があります。現在これを Ruby Class オブジェクトとして扱えるように,JRuby を拡張していることろです。Scala にはこの他にも,シンボリックなメソッド名 (!,%,&,など) があり,これらを JRuby に公開する方法が必要です。この問題についても現在作業中です。

InfoQ: Scala のパターンマッチングはとても巧妙で,よく利用される機能ですが,Ruby にはこれに相当するものがありません。Ruby のパターンマッチングとして DSL (Domain-Specific Language / ドメイン固有言語) に言及されていますが,どのようなものか教えて頂けますか?

これは今回のプロジェクトの,おそらく最も困難な部分です。私たちは Actor に関する設計をしました (まだ実装はされていません) が,これはなかなかよいと思っています。

class MyActor < LiftActor
def string(str) # same as case str: String =>
end

def some_message(p1, p2) # same as case SomeMessage(p1, p2) =>
end
end

その他のパターンマッチングについても,ケースバイケース (case-by-case – パターンマッチングですからね) で取り組んでいるところです。もう一度言いますと,アイデアとしては Ruby による API の実装なのですが,特殊な Scala 構文の代わりに Lift の構文を Ruby 構文に転換する,ということです。

これに関しては,Lift Google Group のその他の Rubyist からも意見を頂ければと思います。

Lift と JRuby の統合に関する 専用 web サイトが liftjr.org にある。読者のみなさんはどのような感想をお持ちだろう?Ruby と Scala 双方のコミュニティにとって,この異種交配は有益なものになるだろうか?

この記事に星をつける

おすすめ度
スタイル

BT