Rubyを使ったエンタープライズ・インテグレーション
ダイナミックなスクリプト言語
もし皆さんが、インテグレーション・プロジェクトを担当させられるとすると、「エンタープライズ・インテグレーション」という言葉は嫌な記憶を思い 起こさせるかもしれません。残念なことにプロジェクトマネージャーや開発担当者は、プロジェクトが期限に間に合わないことや予算をオーバーしてしまうこ と、あるいは要求された機能をリリースできないことの言い訳のために、エンタープライズ・インテグレーションに対する、そんな思いを利用して、プロジェク トの重要性や状況が悪いことを意図的に助長しています。
この傾向は、IT業界のどこでも見られるようです。ある開発者は、そのことを軽蔑的なニュアンスの言い方で「enterprisey」と表現しま す。幸いにもすべてのエンタープライズ・インテグレーションがenterpriseyであるわけではありません。多くのプロジェクトは新しい機能を予定通 りリリースして、コストの節約に貢献しています。
インテグレーションのためのダイナミックなスクリプト言語についてのコラムとして、今回はMaik Schmidt氏の新しい本である「Enterprise Integration with Ruby」を詳細に調べてみました(訳注:原書では、本原稿以外に同様のコラムが2回あります)。
Schmidt氏は「enterprise」という言葉の意味をデータベース、LDAP(Lightweight Directory Access Protocol)、XML、メッセージング、RPC(Remote Procedure Call)、分散オブジェクトのような複数のテクノロジやアプローチが混在しているシステム群と定義しています。もしそれらが相互に連携して運用される必 要があるのであれば、氏は経験上、Rubyを使って実現することを薦めています。
Rubyは、株式会社ネットワーク応用通信研究所のまつもと"Matz"ゆきひろ氏が、1996年にリリースしたオブジェクト指向スクリプト言語で す。オブジェクト指向プログラミングを実現するための種々の機能を持っています。彼は「perl(真珠)」上の「ruby(ルビー)」のように、Perl やPythonにならってこの言語を開発したそうですが、それらよりもオブジェクト指向の色合いを強くしたいと考えていたそうです。
リリースから10年の間にrubyは多くのユーザに利用されるようになり、最近ではRuby on RailsというWebアプリケーション開発フレームワーク(http://www.rubyonrails.org)が注目されています。
データベース
データベースのユビキティ(訳注:再配置可能性)に対して、Schmidt氏がRubyを使ってデータベースアプリケーションの開発について解説し ているのは妥当なことです。ここではネイティブなデータベースのドライバやSQLに対する低いレベルの抽象化に関して提示することからはじめています。そ して特定のデータベースドライバに依存することのないよう、アプリケーションがRubyデータベースインターフェース(DBI)をどのように利用するかを 説明しています。
enterpriseyを唱える多くの人々は、高いレベルで抽象化のためにネイティブなドライバの代わりに、DBIを使うことを薦めるかもしれませ ん。しかしSchmidt氏は、そのようなことを避けるようにDBIの抽象化の利点と欠点をバランスよく示しています。
いずれかのレベルで、データベースシステムに対するポータビリティや非依存といった要件がない限り、性能面や抽象化による問題でデータベースの重要 な機能が利用できないといったケースの場合には、DBIの利用は避けるべきだと述べています。このようにエンタープライズ・インテグレーションでは、アプ リケーションを開発する際に現実的なトレードオフを検討しなければならないことがよく発生します。
このほかにもデータベースの抽象化のレベルとして、オブジェクト/リレーショナル(O/R)マッピングについて説明しています。O/Rアプローチや それに類するマッピングの手法では、オブジェクトモデルとリレーションモデルが異なるため、インテグレーションの際には不一致の問題に悩むことになりま す。
それにも関わらず、RubyのActive Recordモジュールは多くのアプリケーションでO/Rマッピングを利用しており、この本の中でもいくつかの例が示されています。ただしSchmidt 氏はActive Recordのエンタープライズへの対応についてはバランスを考えた議論を行っています。つまりActive Recordの規約に従うことのできないレガシーなデータベースシステムでは適合できないケースが出てくるかもしれません。
またSchmidt氏は、RubyアプリケーションがLDAPを使って個人や組織のレコードのようなエンタープライズの情報にアクセスできるかを示 しています。データベースアプリケーションと類似点の多いアプリケーションでは、ActiveRecordデータベースモジュールと同様のコンセプトで組 み込まれているRuby/LDAPモジュール、あるいはActiveLDAPモジュールのいずれかを使ってLDAPのリポジトリへアクセスすることができ るのです。