Toward Integration/システム統合への道
第2回:Rubyを使ったエンタープライズ・インテグレーション
著者:IONA Technologies Steve Vinoski
訳者:日本アイオナテクノロジーズ 江川 潔
ダイナミックなスクリプト言語
もし皆さんが、インテグレーション・プロジェクトを担当させられるとすると、「エンタープライズ・インテグレーション」という言葉は嫌な記憶を思い起こさせるかもしれません。残念なことにプロジェクトマネージャーや開発担当者は、プロジェクトが期限に間に合わないことや予算をオーバーしてしまうこと、あるいは要求された機能をリリースできないことの言い訳のために、エンタープライズ・インテグレーションに対する、そんな思いを利用して、プロジェクトの重要性や状況が悪いことを意図的に助長しています。
この傾向は、IT業界のどこでも見られるようです。ある開発者は、そのことを軽蔑的なニュアンスの言い方で「enterprisey」と表現します。幸いにもすべてのエンタープライズ・インテグレーションがenterpriseyであるわけではありません。多くのプロジェクトは新しい機能を予定通りリリースして、コストの節約に貢献しています。
インテグレーションのためのダイナミックなスクリプト言語についてのコラムとして、今回はMaik Schmidt氏の新しい本である「Enterprise Integration with Ruby」を詳細に調べてみました(訳注:原書では、本原稿以外に同様のコラムが2回あります)。
Toward Integration/システム統合への道
第3回:Rubyの拡張によるアプローチの違い
著者:IONA Technologies Steve Vinoski
訳者:日本アイオナテクノロジーズ 江川 潔
Rubyをエンタープライズで使う
ここではレガシーなサービスがJavaやC++、C言語といった従来のミドルウェア言語で開発されている場合、プロジェクトにRubyなどを利用することで既存のサービスにアクセスするダイナミック言語のアプリケーション開発に直接的な効果があることを説明します。
データベースのドライバやネットワークのコネクションのように、確実に分離できるアクセス方法のみでサービスを利用するのと同様、通常このアプローチではダイナミック言語のアプリケーションが利用するサービスのアドレススペースから分離されているのです。しかしすべてのエンタープライズ規模のシステム統合プロジェクトで明確に区別されているとは限りません。ではRubyのようなダイナミック言語の有効な使い方として、ダイナミックなコードとレガシーのコードを直接組み合わせることが必要なのかを考えてみました。
筆者自身、最近まで既存のC++のミドルウェアシステムへRubyをスムーズに統合する方法を模索していました。そこで今回は、実際の調査の中で浮かび上がってきた問題や、より優れていると思われる方法の詳細をご紹介します。
必要なものを簡単に作る
ここで1つの例をあげます。筆者が原稿執筆に利用しているPowerBook G4は、時々AC電源コードが抜けてバッテリ動作となっていながらも、バッテリ低下のアラームが鳴るまで気が付かないことが多々あります。
そこでMac OS X 10.4のIOKitフレームワークを使って、バッテリや電源に関する情報を得るアプリケーションを作成しました。C++やC、Object-Cを使ってこのような処理を実行するアプリケーションを書きたいとは思わなかったので、Rubyを使って書くことに決めました。ここではRubyのレベルのフレームワーク機能があるSWIGを使うことにしたのです。
このフレームワークを使うことにより、動作しているのがAC電源なのかバッテリかが判別できる以外にも、バッテリ残量までもわかります。さらにAC電源からバッテリに切り替わったときにポップアップして警告することもできます。