@IT|@IT自分戦略研究所|QA@IT|イベントカレンダー+ログ | ||
Loading
|
@IT > ソフトウェア開発4つの課題(3) |
企画:アットマーク・アイティ
営業企画局 制作:アットマーク・アイティ 編集局 掲載内容有効期限:2004年12月31日 |
|
|
ソフトウェア開発4つの課題 第3回 アーキテクチャについて アーキテクチャ基礎講義 日本IBM 藤井智弘 「アーキテクチャ」。この言葉が意味するものはあまりにも幅広く、その存在を正確に捉えている人はとても少ないようだ。今回はRational Unified Process(RUP)で定義されている「アーキテクチャ」を軸に、初心者にもわかりやすくアーキテクチャの真髄を解き明かしていく。キーワードは、コンポーネントとインターフェイスにある。(アットマーク・アイティ編集局)
さて今回はアーキテクチャの話である。……とはいいつつ、魔物ですね、このテーマは。「ワンランク上のエンジニア」を対象とする記事では、よく“アーキテクチャ”という言葉を見かける。プログラミング作法ではなく、アーキテクチャについて語ることが、「ワンランク上のエンジニア」の証であるかのように扱われているようにも思える。しかし、アーキテクチャという言葉自体は、非常に幅広く使われており、「どこからがアーキテクチャで、どこからがアーキテクチャではないのか」という境界は、この記事を書いている私自身、よくわからない。
本稿を書くにあたり、@ITサイトでの過去の記事もざっくりと眺めてみた(とはいっても、タイトルだけだが)が、“J2EEのアーキテクチャ”や“.NETアーキテクチャ”やらの「フレームワーク解説」的実装に近い話から、いきなりEA(Enterprise Architecture)やSOAの話へと一気にジャンプする。「Rational Unified Process(RUP)」をはじめとする反復型開発を標榜するプロセスでは、多かれ少なかれ「アーキテクチャ・リスクを減らしましょう」とか「しっかりとしたアーキテクチャをつくりましょう」という“アーキテクチャ重視”の姿勢が打ち出されているが、そもそも「アーキテクチャって何か?」が明確でなければ、重視のしようがない。 本稿では、[J2EEより上層]で[SOAほど上層じゃない]、個々のシステム開発プロジェクトにおいて意識すべき層にフォーカスをあてていきたい。
「ソフトウェア開発者ギルド」を開始するときの露払いとして、オンラインのアンケートが実施されたことを覚えていらっしゃるだろうか? Rationalという事業体は、ソフトウェア開発のベスト・プラクティスとして「反復型開発」や「コンポーネントベース・アーキテクチャ」を一貫して推奨してきたが、「では、日本の実際はどうなの?」という所を拾いだしたくてアンケートを行った。そこで、あえて“アーキテクチャ”という言葉を説明せずに、「皆さんが使っているアーキテクチャは何ですか?」という設問をおいたところ、ほとんどの方が、J2EEや.NETをアーキテクチャとしてあげていた。 では業界のお歴々はどう見るか? 「ITアーキテクト宣言」だ。厳密には開発者の役割としてのアーキテクトについて業界の著名人が言及したものであるが、逆にそこから「アーキテクトが扱うモノとしてのアーキテクチャ」の答えがないか……と思って読んではみたが、筆者の結論は「結局、大所高所からモノを見て、でもプロジェクトの金勘定はしない人」であった(あ、なんか、あちらこちらから怒られそう)。しかし、「大所高所から見たモノ」だけでは、“アーキテクチャ・リスク”って何かわからないし……。
そこで、まずは「Rational Unified Process」におけるアーキテクチャの定義をご覧いただこう。 その環境におけるシステムの最も重要な概念です[IEEE]。特定時点でのソフトウェアシステムのアーキテクチャとは、重要なコンポーネント間のインターフェースを通じた相互作用の構成を示します。システムの組織の構成[UML]。アーキテクチャは、インターフェイスを通じて相互作用を行う部分、これらの部分を繋ぐ関係およびそれらを組み立てるための制約に、段階的に分解できます。インターフェイスを通じて相互作用を行う部分には、クラス、コンポーネントおよびサブシステムが含まれます。(Rational Unified Process Ver2003.06.13より引用)。 そもそも、アーキテクチャという言葉自体は、単に“構造”といっているに過ぎない。上記の定義からは、次のことが読み取れる。
これをもう少し噛み砕いてみたい。例として、(個人的にはまってみたい)コンポーネント・ステレオを例にしてみよう。
まずは、「図 コンポーネント・ステレオの構成要素」をご覧いただきたい(って、ほんとはB&Oの写真でも使いたいところですが……)。コンポーネント・ステレオの利点とは何だろうか?
実は、これらはソフトウェア開発の世界で、コンポーネントベース開発が目指しているところのものと全く同じである。これらのメリットを実現するために、コンポーネント・ステレオの世界では、次の条件が満たされている。
ソフトウェアアーキテクチャとは、上記に見るような所定の目的を達成するために必要な、分割と相互作用の構造のことなのである。
あなたは、お気に入りのミュージシャンのCDを今買ってきたばかりだ。封を切るのももどかしく、CDを入れ、Playボタンを……音が出ない。あなたはまず何を疑うだろうか?
まず真っ先に疑うのは、あなたに対して公開されているインターフェイス(電源? ボリュームノブ?)か、コンポーネント間を結びつけるインターフェイスの欠落(ケーブルが抜けてる。挿す場所を間違えている)ではないだろうか? 個々のコンポーネントはばっちりメーカー保証付き。南極みたいな部屋で聞こうって訳でもないので、常識的な気温だ。そこであなたは、インターフェイスを疑う……。 ここで議論したいのは、「日本の製造業ってのはたいしたものだ」という礼賛ではない。システムがシステムとして意味のある活動をするためには、個々のコンポーネントが十分な品質レベルに達成していることと同時に、ステレオの例に見るようなアーキテクチャが定義され、動かなければならないということだ。加えて言えば、前述のインターフェイスのリスクは、規定されたルールが守られている限り、コンポーネント内部の質には直接は関係ない(たとえ音質が悪くても、ケーブルが正しくつながっていれば、とりあえず音は鳴る)。 その意味では、様々な処理のバリエーションを考慮して内部をじっくり作り込まなくても、ある程度アーキテクチャを規定することができ、検証(テスト)もできる可能性があるということだ。
前述の例では、CDプレイヤーを、“もっと音質の良い”CDプレイヤーに交換することはできる。しかし、このコンポーネント構造が、CDプレイヤーをベースに“デザイン”されていては、MDプレイヤーやMP3プレイヤーを組み入れることができない。アナログディスク全盛の頃にはCDプレイヤーなどは想像の範囲外であっただろうし、CDプレイヤー全盛時のエンジニアにとって、MP3やMDも同様だったろう。 それでも、これらの将来発生した機能拡張に応えることができているのは、コンポーネント・ステレオのアーキテクチャが、アナログディスクプレイヤーやCDプレイヤーをそのままデザインのベースにするのではなく、「音を発生させるもの:音源」として抽象度を上げて捉えられているからである。“音源”としての性質を継承するものであれば、物理的なメディアは問わない。コンポーネントベースのシステムは、機能向上や、トラブル対応の局所化に効果がある(もちろん、再利用もある)。しかし、将来での拡張にも応えるようなベースとするためには、“抽象化”が必要不可欠となる。
フレームワークを作ることを生業とする開発者ならいざ知らず、業務系システムを作る開発者にとって、気を配るべきアーキテクチャの範囲とはどこなのだろうか? 確かに、J2EEや.NETはそれ自身のアーキテクチャを持つ。しかし、これらオブジェクト指向技術を基盤とするフレームワークを使う目的の1つは、「多様な変更に対応できる柔軟性」だろう。とするなら、その柔軟性に対処する場所は、J2EEや.NETの“上層”で動くシステムであるはずだ。 システム全体で変更に対しての柔軟性を確保するために、MVCというアーキテクチャ・モデルがあるが、これも“表示系”、“IO処理”、“モデル”という単位で、変更の範囲を局所化したものだ。業務やビジネスモデルの変更が、システム開発の主要課題になっている今、アーキテクチャを考慮すべきは、MVCの“M”であるように思う。 これが、“システムのアーキテクチャ”を問われた業務系システムの開発者が、J2EEや.NETのみを挙げることに対して違和感を感じている理由である。
次回は、反復型プロセスと併せて、アーキテクチャをどう設計していくか、その基本的な手順の話をしてみたい。そして、Rationalが提唱する「アーキテクチャへの集中」を理解する助けとなれば幸いである。ところで、今回の記事……、読み返してみると、なんだか技術記事ではなくコラムになってますね。 ◆ 弊社主催のカンファレンス、IBM Rational Software Development Conference が10月7日と8日に行われた。今回は主催者側の予想を遥かに超える皆様にご参加いただき(なんと、90%以上の出席率!)、大変ありがたく思っております。おいでいただいた皆様本当にありがとうございました。またこちらの不手際で不快な思いをされた方もいらっしゃると思います。この場を借りてお詫び申し上げます。 いやぁ〜でも、“お祭り”(不謹慎かな?)ってのはいいね、やっぱり。準備は直前までひ〜こらしていたんだけど、始まってしまえば、楽しかったなぁ〜。「のど元過ぎれば熱さ忘れる」って言うけど、本気でまたやりたいなと思ってしまったのでした。 |
|