今回のコラムで取り上げるのは,過去何回も書いてきた「再利用」です。主要キーワードは“RAS”。ある現実解を目するチャンスがあったことがきっかけです。

ソフトウエア・コンポーネントの再利用。ここ数年に渡り,このテーマをめぐって様々な議論が出ています。筆者もこの分野で何本か記事を書きましたが,実像をとらえるのが難しい分野と感じていました。各社の業務上の秘密という壁があり,実際のデータを目にするチャンスが滅多にないからです。

 そんな中で,公開可能で比較対象の基準になることを狙ったシステム開発の実例が出てきました。「EJBコンポーネントに関するコンソーシアム」の「再利用ベストプラクティス研究会」です。同研究会はJ2EEベースのシステム開発でソフトウエア・コンポーネントを再利用する試みを行い,その成果を公表するべく準備中です。実際にどのような試みを行ったのか,今回はその内容について書きます。

 同研究会では「EJBコンポーネントの再利用」という言い方はしていません。採用した手法は,IBM/Rationalが作り,OMG(Object Management Group)で標準化を進めているRAS(Reusable Asset Specification)と呼ぶ仕様です。EJBにももちろん利用可能ですが,EJB以外のソフトウエアでも有効と考えられる仕様です。

 RASは,「ソフトウエアの再利用」という非常に一般的な目的を達成するための仕様です。ソフトウエアの再利用に必要と考えられる成果物をひとまとめにして,「アセット(Asset)」という単位で扱います。その内容は,ソースコード,UMLによる設計書,テスト用コード,アプリケーションへの組み込み手順,パターンなど多岐にわたります。なお,MicrosoftもRASの普及に参加しており,Java/J2EEだけでなく.NETも対象となります。

「RASを採用したのは,それ以外に『器』になるものがなかったから」。ベストプラクティス研究会主査の堂山真一氏(NTTコムウェア)は打ち明けます。実際にデモンストレーションを見せてもらうと,このRASは,まさに「器」以外の何者でもないことが分かりました。

 デモンストレーション環境は,開発環境として,IBM WebSphere Studio。それにRASをサポートした設計ツールRational XDEを組み合わせています。このXDEの機能が再利用の手順を一部支援してくれる訳です。今のところRASを扱うにはXDEの特別なバージョンが必要なのですが,RASが標準仕様として確立した後は,他社製品や,オープンソース製品がRASをサポートする可能性もあります。

 デモンストレーションが題材とするサンプル・アプリケーションは,IBM/RationalでRAS開発を担当しているGrant Larsen氏が提供した簡単なeコマース・アプリケーションです。オリジナルのアプリケーションでは,「受注結果を集計し,まとめて請求伝票を印刷する」というクラシカルな仕様ですが,これに,「受注時にWebサービスでクレジットカードの認証を取る」という機能を追加します。この機能追加を,ソフトウエア・コンポーネントを組み込むことで実現するという筋書きです。

 ここで,コンポーネントのリポジトリを使い,必要な機能を実装したコンポーネントを検索します。デモでは,コンポーネントスクエアが開発したCCM(コンポーネント管理システム)を使っています。

 必要な部品を検索し,RAS形式のファイルをダウンロードします。これをXDEに読み込ませると,画面上には「タスク」と呼ぶコンポーネント組み込み手順が出てきます(画面左下,画像クリックで拡大画面)。「研究会のみんなには,これが『目からウロコ』でした」と堂山氏は話しています。画面上に表示されている組み込み手順を具体的になぞっていくことで,作業がスムーズに進む。こう説明すると何のことはないように聞こえますが,現実の再利用の局面ではこうした仕組みこそが大事になるとのことです。

 ダウンロードしたRAS形式のファイル(アセット)の中には,テスト用コードも入っています。ここで組み込む「クレジットカード認証用Webサービス」の動作を検証するテスト・コードをまず動かし,その後にアプリケーションにコードを組み込みます。

 デモンストレーションのハイライトは,コンポーネントの組み込みを一部自動化したことです。コンポーネント本体はEJBコンポーネントとして実装されており,アプリケーションにはそのクライアント・コードを埋め込むのですが,この作業をXDEの機能で一部自動化したのです。

 利用する機能はXDEの「パターン・エンジン」と呼ぶ機能。あらかじめ登録されている「パターン」に固有名詞を与え,「コード・テンプレート」と呼ぶ付帯コードをくっつけたコードを自動生成します。デザイン・パターンの開発局面での利用を図る機能なのですが,「昔でいうマクロ機能と思えばいい」(堂山氏)。要するに,再利用コードを組み込むためのマクロも,コンポーネントの一部だという訳です。

 ただし,実際の開発局面では,人間の判断も必要になりそうです。デモでは,「消費税の計算」というビジネス・ロジックを実行する「前」にクレジット・カードの認証を行うというコードになってしまい,これを人間が修正するという場面が入っています。こうした業務知識をパターンなどの機械的なやり方で表現できない場合には,人間が判断を下すことになります。

 こうして,コンポーネント再利用の実像を示すデモンストレーションが終了しました。このデモで大きな役割を果たしているのは,ソフトウエア再利用のための仕様RASと,開発ツールXDEです。もちろん,このデモのような開発手法を実践するには,コンポーネント供給者の側がどんどん部品を作ることが必要ですが,デモでは「コンポーネントを利用する側」に焦点を絞っています。

 ここでコンポーネント利用者側のスキルは何でしょうか? と質問すると,堂山氏は「UMLを読めること,Javaコードを読めること,XDEの操作ができること」と答えてくれました。つまり,コンポーネントを組み込むだけの開発者であれば,従来型のプログラマより短い訓練期間で養成できる可能性があります。

 一方,コンポーネントを供給する側の課題は--たくさんありすぎて,この記事では書き切れません。ただし,RASのような枠組みの整備と普及は,コンポーネント指向開発を推進する上では必要なステップではないかと思います。

●関連記事:
ソフト再利用のコストを考える (RASに関して一部紹介)

(星 暁雄=日経BP Javaプロジェクト)