Rubyの拡張によるアプローチの違い
Rubyをエンタープライズで使う
前回は、ミドルウェアのインテグレーションプロジェクトにダイナミック言語を適用できるかを考えるために、Maik Schmidt氏の「Rubyを使ったエンタープライズ・インテグレーション(Enterprise Integration with Ruby)」を紹介しました。
第2回:Rubyを使ったエンタープライズ・インテグレーション
http://www.thinkit.co.jp/free/article/0606/8/2/
ここではレガシーなサービスがJavaやC++、C言語といった従来のミドルウェア言語で開発されている場合、プロジェクトにRubyなどを利用す ることで既存のサービスにアクセスするダイナミック言語のアプリケーション開発に直接的な効果があることを説明します。
データベースのドライバやネットワークのコネクションのように、確実に分離できるアクセス方法のみでサービスを利用するのと同様、通常このアプローチではダイナミック言語のアプリケーションが利用するサービスのアドレススペースから分離されているのです。
しかしすべてのエンタープライズ規模のシステム統合プロジェクトで明確に区別されているとは限りません。ではRubyのようなダイナミック言語の有効な使い方として、ダイナミックなコードとレガシーのコードを直接組み合わせることが必要なのかを考えてみました。
筆者自身、最近まで既存のC++のミドルウェアシステムへRubyをスムーズに統合する方法を模索していました。そこで今回は、実際の調査の中で浮かび上がってきた問題や、より優れていると思われる方法の詳細をご紹介します。
Javaは簡単
今回はJavaとダイナミック言語の統合に関しては説明しません。その理由は、単純だからです。Microsoftの共通言語ランタイム(CLR) との競合やダイナミック言語を利用しているユーザから寄せられたリクエストにより、Java仮想マシン(JVM)はマルチ言語プラットフォームへと変わっ ています。
多くのダイナミック言語の実装手法は、すでにJVM上に存在しています。例えばJavaScriptやECMAScript(E4X)、 Jython、BeanShell、Groovy、JRubyなどがあげられます(Java 6ではMozilla Rhino JavaScriptが実装予定)。
Javaとダイナミック言語を統合させることは比較的容易に行えるものです。これは、これらの言語は全て同一のVMを共有可能なため、Javaコー ドとデータを共有化できるからです。いくつかのJava仕様要求(JSR)では、具体的には下記のものが定義されています。
- 223(スクリプティング・エンジン)
- 241(Groovyスクリプティング言語)
- 274(BeanShellスクリプティング言語)
- 292(ダイナミック言語のためのVMバイトコードの追加)
この現状から、Javaとダイナミック言語の統合は明らかに重要度が高まっていることがわかります。