Rubyを使ったエンタープライズ・インテグレーション

2006年10月18日(水)
Steve Vinoski江川 潔(訳)

ネットワークとミドルウェア

   エンタープライズアプリケーションは、ネットワークを介して互いに通信を行います。単純なソケットベースの通信を使う場合ではソケットをシンプルに 利用できるのでRubyやその他のスクリプト言語が優れています。その他のエンタープライズアプリケーションは、CorbaやJava 2 Enterprise Edition、メインフレーム、あるいは様々なメッセージングの方式を利用しています。

   この本では最初に単純なソケットの例をあげて、HTTPベースのRubyアプリケーションを簡単に作ることができることを示しています。Rubyの HTTPクライアントがシンプルに作れると期待されているかもしれませんが、むしろHTTPサーバが容易に開発できることを示しています。

   Ruby WEBrickフレームワークは、ビジネスロジック以外のHTTPサーバとしての複雑な動作をカバーします。WEBrickのアプリケーションモデルは、 受信したHTTPリクエストによってフレームワーク上に実装された特定のメソッドを呼び出すところがJavaのサーブレットモデルとよく似ています。

   例えばHTTP GETリクエストに応答する場合、WEBrickフレームワークはこのリクエストを処理するために作成されたRubyサーブレット上のdo_GETオペ レーションを呼び出します。またWEBrickは、ファイルの処理(File-Handlerサーブレット)やCGIスクリプトの実行 (CGIHandlerサーブレット)などの様々なサーブレットを提供しています。

   WEBrickのような機能では、XML-RPCやSOAPのようなHTTPベースのプロセス間通信をRubyアプリケーションが非常に簡単に処理 できるようになります。もしXML-RPCアプリケーションと通信しなければならなかったり、システムにXML-RPCのサポート機能を追加するときは、 XML-RPCの完全な実装を備えているxmlrpc4rモジュールを使うと簡単に実現できます。同様にRubyはSOAP 1.1を実装したsoap4rライブラリをサポートしています。

   WSDLベースのサービスとのインテグレーションでは、soap4rが提供するWSDLDriverFactoryクラスがWSDLファイルを参照 し、WSDLが定義しているサービスに対する実行時のクライアントプロキシとスタブを生成します。またsoap4rが、WSDL文章で定義されたサービス をベースとしてRubyのコードを生成する「wsdl2ruby」と呼ばれる個別のツールを提供します。

   同じように、WSDLからJavaやC++のコードを生成するツールを提供しているWebサービスシステムは数多くあります。そのような同様のツー ルをよく知っている開発者にとって、wsdl2rubyの機能は、エンタープライズアプリケーションをRubyで開発するためのよい導入ポイントとなりま す。

   この本で記述されているすべての事柄をお薦めしたいと思っているのですが、ただCorbaの記述はいくつか問題があります。1991年から Corbaに関わり続けてきたこともあり、私は平均的な分散アプリケーションの開発関係者より多少知識があると思っています。特にCorbaの仕様につい ては、数年に渡ってかなりの貢献をしてきました。

   この本では、Schmidt氏はCorbaのような仕様は大変複雑であり、「SunやBorland、IBMのような大きな企業だけがCorbaを 実装する力のあり、そのような企業でさえも時々正しく利用することができない」と記述されています。しかし私の所属するアイオナテクノロジーズは、 1993年から一貫してCorba市場のリーダであり、もっとも拡大したときでも500名弱の従業員で構成されていました。このことから、明らかに Corbaの実装が大きな企業に限られていることにはなりません。

   さらにこの本は、次のようにCorbaについて記述しています。

   「結果的に、現状では混乱しています。ほんの少しのプログラミング言語にしか対応しておらず、ベンダーの個別の拡張のために多くのシステムが相互運 用できていません。このような古い"標準"は、すっかり、XML-RPCのような、新しくて新鮮な後継者に置き換わっています」

   この文章の中の3つの指摘はすべてが間違っています。まずCorbaの実装は、C、C++、Java、Smalltalk、Lisp、Ada、 Cobol、PL/I、PhthonやPerlといった様々なプログラミング言語の環境でサポートされています。次に異なるCobraの実装の間の相互運 用性は、実際にはScmidt氏が問題視しているよりも非常に良好です、最後に私は個人的にもXML-RPCに置き換えられたCorbaのプロジェクトを 知りません。

   このようなテクノロジの性能やユーティリティ機能は、実効的に比較することができない程に異なっているのです。現在でもCorbaは多くのテレコム と金融アプリケーションで稼動しています。さらに高い応答性能と拡張性で、これらのアプリケーションをカバーしていて、すぐに置き換えられることはありま せん。

   Corbaの歴史や記述の誤りにも関わらず、この本ではRubyとCorbaのインテグレーションへの理にかなったアプローチを紹介しています。 Rubyで完全なオブジェクトリクエストブローカ(ORB)を開発しようとするのではなく、Ruby Javaブリッジ(RJB)によってCorbaのJavaクライアントとRubyをインテグレーションすることを薦めています。

   RJBによってRubyアプリケーションはJavaのクラスをインポートし、Java Native Interface(JNI)を介して透過的に呼び出すことができます。これによりクライアントは簡単にCorbaサーバのアプリケーションを呼び出すこ とが可能です(この本では、この他のアプローチとして、Java virtual machine(JVM)上でのRubyの実装であるJRubyを利用するとCorbaクライアントにRubyを組み込むことを紹介しています)。

   またSchmidt氏は、CorbaクライアントがWEBrickサーバとなり、効率的にCorbaアプリケーションへアクセスするHTTPのルートを提供する方法も示しています。

IONA Technologies,Plc.

IONA Technologiesの主管エンジニア。
17年以上にわたりミドルウェアの仕事に従事し、Object Management Group(OMG)やWorld Wide Web Consortium(W3C)においてミドルウェアの標準化に貢献している。IEEE Internet Computing Magazine の"Toward Integration"コラムを執筆しているほか、IEEE Internet Computing MagazineとInternational Journal of Web Service Researchの編集委員を勤めている。

日本アイオナテクノロジーズ株式会社 テクニカルセールスマネージャ

株式会社富士通SSLでNTT仕様のオペレーティング・システムの開発に従事したのち、日本ディジタルイク イップメント株式会社でNTT向けシステムの開発、その後、ソフトウェアとハードウェアのプリセールス活動を展開した。DECの合併を経て、現職のミドル ウェア製品のマーケティング、アライアンス、プリセールスなどに従事。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています