16. 開発フレームワークに関する知識 I

シラバス: 

1. 科目の概要

 開発フレームワークとは何か、その基本的な概念、歴史、特徴とメリットを解説する。さらに開発フレームワークを利用して開発を行う際に必要な技術を説明し、実際の開発に役立てることができる知識やノウハウを示す。

2. 習得ポイント

 本科目の学習により習得することが期待されるポイントは以下の通り。

3. IT知識体系との対応関係

「16.開発フレームワークに関する知識Ⅰ」とIT知識体系との対応関係は以下の通り。

[シラバス:http://www.ipa.go.jp/software/open/ossc/download/Model_Curriculum_05_16.pdf]

<IT知識体系上の関連部分>

4. OSSモデルカリキュラム固有の知識

OSSモデルカリキュラム固有の知識として、具体的なJava言語の開発フレームワークに関する知識がある。ここで扱うフレームワークの実装は、一般的な開発フレームワークの考え方を踏襲したものである。

(網掛け部分はIT知識体系で学習できる知識を示し、それ以外はOSSモデルカリキュラム固有の知識を示している)

I-16-1. 開発フレームワークの歴史、思想と背景

開発フレームワークとは何かを説明し、開発フレームワークの基本理念、目的、発展の歴史、開発フレームワークが登場した背景と思想について解説する。

【学習の要点】

* 開発フレームワークとは、アプリケーションソフトを開発する際に頻繁に必要とされる汎用的な機能をまとめて提供し、アプリケーションの土台として機能するソフトウェアのことである。

* 開発フレームワークは、ソフトウェア開発におけるさまざまな経験を踏まえ、開発生産性を向上させようとする試みの中で、長い時間をかけて発展してきた。

図I-16-1. 開発フレームワークの背景

【解説】

1) 開発フレームワークとは

開発フレームワークとは、アプリケーションを開発する場合に必要となる部品や、実装上の制約などを提供するもので、ソフトウェア開発における生産性や保守性の向上を目的としたものである。アプリケーションの骨組み部分が、よく洗練された形であらかじめ提供されるため、開発担当者のスキルへ依存する部分を減らすことで、設計レベルの欠陥を最小限に止め、一定の成果物品質を維持することができる。

2) 開発フレームワークの基本構成

開発フレームワークは、フローズンスポットとホットスポットから構成される。

* フローズンスポット

アプリケーションによらず常に必要となる機能を有した部分であり、固有のアプリケーションを開発する際には変更を加えない部分。開発フレームワークでは、これらの機能をそのまま提供する。

* ホットスポット

アプリケーションによって個別に開発される部分。開発フレームワークでは、この部分を実装上の制約という形で提供する。フレームワークが規定する制約に則ってホットスポット部分を実装することにより、初めて開発フレームワークの利点を享受することができる。

フローズンスポットの占める割合がホットスポットのそれに対して大きければ大きいほど、固有のアプリケーション開発時の工数は少なくなり、より高い開発生産性を得られる。しかしそれと同時に、フレームワークによる制約が多くなるため、そのフレームワークを適用できるアプリケーションは限定され、汎用性を失ってしまう。このように、フレームワークの汎用性と、そのフレームワークを適用したことにより得られる開発生産性の向上度合いは、常にトレードオフの関係にある。

3) 開発フレームワーク発展の背景

開発フレームワークは、ソフトウェア開発において先人の知恵を再利用し、開発生産性を向上させようとする試みの中で、長い時間をかけて発展してきたものである。特にGUIアプリケーションの開発における定型処理を標準化しようとする動きの中で、1980年に発表された統合開発環境である、Smalltalkにおいて取り入れられたMVC(Model/View/Controller)の概念は、現在ではGUIアプリケーションのみならず、Webアプリケーション開発に用いられるフレームワークにも大きな影響を与えている。

I-16-2. 開発フレームワークの特徴とメリット

開発フレームワークを利用した開発の特徴と、開発フレームワーク利用の効果、メリットについて解説する。また代表的な開発フレームワークを紹介し、それぞれの歴史や背景、特徴、利用上の注意点、開発フレームワークの選択方法、ライセンス形態などを説明する。

【学習の要点】

* Web MVCフレームワークを導入すれば、Controller部分を記述することなく、ModelとViewとを記述すれば済む。

* O/Rマッピングフレームワークを導入すれば、オブジェクトと関係データベースとのインピーダンスミスマッチを解消できる。

* DIコンテナを導入すれば、オブジェクト間の依存関係の管理をDIコンテナに移譲でき、オブジェクト間の依存性を疎に保つことができる。

図I-16-2. 代表的なフレームワーク

【解説】

1) 開発フレームワークの種類と特徴

Webアプリケーション開発でよく用いられている開発フレームワークには、Web MVCフレームワーク、O/Rマッピングフレームワーク、DIコンテナがある。

* Web MVCフレームワーク

Web MVCフレームワークは、MVCモデルを適用したWebアプリケーション用の開発フレームワークである。一般的なWeb MVCフレームワークでは、Controllerをフローズンスポットとしてフレームワーク側で提供し、残りのModelとViewをホットスポットとしてアプリケーションごとに開発する。Web MVCフレームワークの代表的なものとしてStrutsがあり、Strutsが普及して以来、PHPのZend FrameworkやRubyのRuby on Railsなど、他の言語でもWeb MVCフレームワークが開発され、普及していった。

* O/R(オブジェクト/関係)マッピングフレームワーク

O/Rマッピングフレームワークは、オブジェクト指向言語におけるオブジェクトと関係データベースのデータ構造の差異を吸収し、自動変換を行う機能を有した開発フレームワークである。オブジェクト指向言語で関係データベースを扱う場合、データモデルの設計思想の違いから、オブジェクトとデータベースデータとのマッピングのために、毎回煩雑な処理を行わなければならない。このデータモデルの設計思想の違いをインピーダンスミスマッチというが、O/Rマッピングフレームワークでは、このマッピングにおける定型処理をフローズンスポットとして提供し、インピーダンスミスマッチを解消する手助けをする。Javaでは元々、インピーダンスミスマッチを解消するための仕組みとして、EJB(Enterprise Java Beans)におけるEntity Beanがあった。しかしこのEJBは、分散オブジェクトとしての性質も併せ持つなど、単なるオブジェクトとリレーショナルデータのマッピングツールとしては複雑過ぎ、中小規模の開発を主とする多くの開発者には受け入れられなかった。このような中、もっと簡単にO/Rマッピングを実現したいという要望から、Apache Torqueをはじめ、現在よく使われているHibernateやiBATISなどのO/Rマッピングフレームワークが開発され、次いで他の言語でもActiveRecordなど同様のものが開発されていった。なお、現在のEJB最新仕様であるEJB3では、以上の教訓から、HibernateなどのO/Rマッピングフレームワークの影響を大きく受けており、従来に比べ大幅に利用しやすくなっている。

* DI(Dependency Injection)コンテナ

DIコンテナは、オブジェクト間の依存関係を設定ファイルに記述することで、依存関係の管理をDIコンテナに移譲することができる仕組みを持つ開発フレームワークである。IoC(Inversion of Control)コンテナ、軽量コンテナ、DIフレームワークなどとも呼ばれる。他のオブジェクトを呼び出す際には抽象的な名前とインタフェースのみを利用し、どの具象クラスを用いてどのような初期化を行ったオブジェクトを用いるかは、全てDIコンテナが外部から注入してくるのに任せる。このような仕組みを利用して開発することで、他の具象クラスに依存したコードを排除し、オブジェクト間の依存性を疎に保つことができる。JavaにおけるEJBも、同様の機能を有するが、O/Rマッピングフレームワークの項でも述べた通り、EJBは汎用的な反面、非常に複雑で扱いづらい仕様であった。DIコンテナの代表的な実装としてSpringがあるが、Springはこの複雑すぎるEJBの代替として、個人により開発が開始され、以降オープンソースプロジェクトとして急速に成長し、普及していった。日本でも、オープンソースのプロジェクトで開発が進められているDIコンテナとして、Seasar2がある。

I-16-3. Webアプリケーション構築で利用できるOSSフレームワーク

オープンソースによるWebアプリケーション開発フレームワークを紹介する。Struts、JSF、IBATIS、Hibernate、Seasar II、Springといった代表的なフレームワークを紹介し、それぞれの開発内容の違いについて解説する。

【学習の要点】

* StrutsはJavaのWeb MVCフレームワークとして広く利用されている。

* HibernateはJavaのO/Rマッピングフレームワークとして広く利用されている。

* IBATISはHibernateなどと異なりSQLを直接記述できるので、柔軟なデータベースアクセスが可能である。

* Seasar2は国産のDIコンテナで、日本語ドキュメントが非常に豊富である。

図I-16-3. 開発フレームワークの主なOSS実装

【解説】

1) OSSのWeb MVCフレームワーク

* Struts(Apache Struts) http://struts.apache.org/

Strutsは、ServletとJSPの技術を用いてWebアプリケーションを開発する際に利用する、Web MVCフレームワークで、Apacheソフトウェア財団のトップレベルプロジェクトとして開発が進められている。Strutsを利用してWebアプリケーションを開発する際には、Model部分であるActionクラス、View部分であるJSPページとViewに埋め込まれるActionFormクラスを作成し、これらの関連をXMLの設定ファイルに記述する。

* JSF(JavaServer Faces) http://java.sun.com/javaee/javaserverfaces/

JSFは、JSR(Java Specification Request)に定められたJavaにおけるWeb MVCフレームワークの標準仕様である。JSFでは、Webページ表示を構成するコンポーネントをUIコンポーネントと呼び、高度に抽象化されている。また、標準でJSPカスタムタグライブラリを提供しているが、View部分にJSPを強制するわけではなく、別のものに置き換えることも可能である。JSFの代表的なOSS実装は以下の通りである。

- Sunの参照実装 http://java.sun.com/javaee/javaserverfaces/download.html

- Apache MyFaces http://myfaces.apache.org/

- ICEFaces http://www.icefaces.org/main/home/index.jsp

2) OSSのO/Rマッピングフレームワーク

* Hibernate http://www.hibernate.org/

Hibernateは、オブジェクトのプロパティと関係データベースのカラムとのマッピングをXMLで記述しておくことで、O/RマッピングをHibernateに移譲できる。

* IBATIS http://ibatis.apache.org/

IBATISはApacheソフトウェア財団のトップレベルプロジェクトとして開発が進められている。Hibernateなどと異なり、SQL文と、そのSQL文を呼び出すメソッド名、およびSQL文の実行結果として取得された結果セットのマッピング先クラス名をXMLで記述し、O/Rマッピングを実現する。SQL文を直接記述できるため、柔軟なデータベースアクセスを行いつつ、ソースコードからはインピーダンスミスマッチの問題を排除できる。

3) OSSのDIコンテナ

* Seasar2 http://s2container.seasar.org/

Seasar2は、DIとAOP(アスペクト指向プログラミング)をサポートした軽量コンテナである。O/RマッピングフレームワークであるS2DaoやS2JDBCや、JSF実装のTeedaなど、サブプロジェクトで連携先エンジンが開発されているほか、S2JSFやS2Struts、S2Hibernateなどを使用することにより、他のエンジンとシームレスに統合できる。設計思想としてLess Configurationを掲げており、大抵のアプリケーションで同様であろう部分は、極力設定をしなくても動作するように意識されている。国産であるため、日本語ドキュメントが非常に豊富である。

* Spring Framework http://www.springframework.org/

Spring Frameworkは、DIとAOPをサポートした軽量コンテナで、JDBCによるデータベースアクセスを抽象化するレイヤやMVCフレームワークを内包している。またStrutsやHibernateとの連携機能を持つ。

I-16-4. Tomcatの特徴とServlet/JSPによるアプリケーション開発

Java Servlet/JSPコンテナの代表的なものとして、Tomcatを取り上げ、その位置づけ、特徴とServlet/JSPによるWebアプリケーション開発の具体的な手順を説明する。

【学習の要点】

* TomcatはJava Servlet/JSPコンテナとして、高いシェアを誇り、事実上の標準となっている。

* Tomcatの実行モードには、スタンドアロン、内部プロセス、外部プロセスの3つがあるが、内部プロセスにより、Apache HTTP Serverと連携させる方法が主流である。

図I-16-4. Tomcatの実行モード

【解説】

1) Tomcatの特徴

http://tomcat.apache.org/

Tomcat (Apache Tomcat)は、Java ServletとJSPのコンテナ(実行環境)であり、Java Servletと JSP技術の公式な参照実装(ソースコードレベルで参照できる実装)として使われている。ASF(Apacheソフトウェア財団)が運営するプロジェクトで開発されているOSSであり、Apacheソフトウェアライセンスに基づいてリリースされている。

2) Tomcatの位置づけ

Tomcatは実行モードによって3つの位置づけがある。Apache HTTP Serverと連携する内部プロセス型がもっとも多く利用されている。

* スタンドアロン型

Tomcat自体にWebサーバの機能が内蔵されており、JavaベースのWebアプリケーションであれば、別途Webサーバを導入することなく利用することができる。

* 内部プロセス型

他のWebサーバ上でTomcatを実行することで、そのWebサーバと連携する。

* 外部プロセス型

他のWebサーバとは別にTomcatを実行し、プロセス間通信によってそのWebサーバと連携する。内部プロセス型に比べ、処理速度は落ちるが、安定性や拡張性の点でメリットがある。

3) Servlet/JSPによるWebアプリケーション開発

Servlet/JSPによるWebアプリケーションをTomcatで動作させるには、基本的には以下のような手順で行う。

* アプリケーション用ディレクトリ作成

アプリケーションを配置するディレクトリを作成し、アプリケーション(JSPファイルやclassファイル)を配置する。

* WEB-INF作成

WEB-INFディレクトリを作成し、WEB-INFディレクトリ下にweb.xmlを作成する。web.xmlには、Servlet/JSPのマッピング情報などを記述する。

* server.xml編集

Tomcatをインストールしたディレクトリ下のconf/server.xmlを編集し、アプリケーション用ディレクトリを登録する。

* 他のWebサーバの設定

他のWebサーバと連携する場合、そのWebサーバ経由でアクセスできるよう設定する。

* Tomcat再起動

Tomcatを再起動する。他のWebサーバと連携する場合、そのWebサーバも再起動する。

I-16-5. アプリケーションサーバJBossの機能と特徴

アプリケーションサーバについて、例として代表的なアプリケーションサーバであるJBossを取り上げ、その位置づけ、特徴を解説する。またTomcatとの連携やEJBコンテナ機能、アプリケーションサーバ機能など、JBossの持つ様々な機能を紹介する。

【学習の要点】

* Java EE規格に準拠したソフトウェアはJavaアプリケーションサーバと呼ばれ、アプリケーションサーバの主流をなす。

* JBossは、欧米では企業システムや政府機関システムでの導入実績もあり、他の商用アプリケーションサーバに劣らない機能と性能を実現している。

図I-16-5. JBossの構成

【解説】

1) JBossとは

JBoss (JBoss Application Server)は、OSSのJavaアプリケーションサーバである。Javaアプリケーションサーバとは、Java EEに準拠したソフトウェアを指す名称である。JBossはLGPLライセンスで提供される。

2) JBossの位置づけと特徴

JBossにはWebコンテナ(Tomcat)やデータベース管理システム(HSQLDB)が同梱されているので、JBossを導入するだけでWebアプリケーションの動作環境が構築できるようになっている。また、プログラムをアップデートする際、特定のディレクトリにファイルを設置すれば、JBossが自動でデプロイする。JBoss本体を動作させたままプログラムのアップデートが可能なため、この機能は「ホットデプロイ」と呼ばれる。

3) Java EE (Java Platform, Enterprise Edition)

Java EEは、Java SE(Java Platform, Standard Edition)を主に企業の大規模システム向けに拡張した、Javaの機能セットの仕様であり、次のような機能(抜粋)が定められている。

* Webコンテナ(Java Servlet、JSPのサポート)

* EJB(Enterprise JavaBeans)コンテナ

* JMS(Java Message Service)による非同期メッセージ通信

* JAAS(Java Authentication and Authorization Service)やJACC(Java Authorization Contract for Containers)による認証

* JMX(Java Management Extensions)によるシステム管理

* Java RMI(Remote Method Invocation)やIIOP(Internet Inter-ORB Protocol)による分散処理

4) Tomcatとの連携

JBossのパッケージにはTomcatが同梱されており、Tomcatと連携することで、Webコンテナの機能を実現している。

5) EJBコンテナ

JBossはEJBコンテナ機能を有する。EJBとは、JavaBeans(Javaアプリケーション開発における部品の作成や利用に関する規格)を企業向けに拡張した仕様である。EJBでは、ネットワークシステムにおけるサーバプログラミングのための機能が追加されており、セッション処理のためのSession Bean、データ保存のためのEntity Bean、非同期処理などのためのMDB(Message-Driven Bean)の3つに大別される。EJBは低レベルな処理の一切を引き受けているので、開発者はビジネスロジックだけに専念することができる。

I-16-6. ツール実行を自動化するAnt

コンパイルやテスト、バージョン管理などソフトウェア開発に関わるあらゆる処理の実行を自動化するツールAntを説明する。Antの基本処理であるコンパイル、ビルドのXMLによる設定方法を示す。また、Antで自動化できるテスト、ファイル転送、リモートホスト操作、バージョン管理などを紹介する。

【学習の要点】

* AntはJavaで開発されているビルドツールで、Java版のmakeに相当する。

* makeはOS(オペレーティングシステム)などの環境への依存性が高く、記述も比較的難解であるが、Antはこのようなmakeの欠点を補うものである。

図I-16-6. antが読み込むbuild.xmlのサンプル

【解説】

1) Antとは

Ant (Apache Ant)とは、Jakartaプロジェクトで開発されている、ビルド(ソースコード等から実行ファイルを作成すること)のためのツールであり、Apacheライセンスにて配布されているOSSである。統合開発環境であるEclipseには、Antプラグインが標準装備されている。AntはJavaで開発されており、Javaの動作する環境であればAntを利用できる。Antは「ant」コマンドで実行され、引数を指定しない場合、カレントディレクトリにあるbuild.xmlというビルドファイル(ビルドのための設定を記述するファイル)に従って処理される。

2) Antのビルドファイル

AntのビルドファイルはXMLで記述する。最上位の要素として、1つのproject要素を記述する。project要素の子要素として、1つ以上のtarget要素を記述する。一連の処理のまとまりは、target要素単位で記述する。target要素の子要素には、タスク(Antで扱う処理の最小単位)を表す要素を記述する。タスクは、プラグインとして提供されているものを追加したり、AntのAPI(アプリケーションプログラミングインタフェース)に従って自作したものを追加したりすることができる。主なAntタスクは以下の通りである。

* コアタスク Antコアパッケージに含まれているタスク

- javac Javaソースコードをコンパイルする。

- javadoc Javaソースコードからドキュメントを生成する。

- java Javaプログラムを実行する。

- echo メッセージを出力する。

- ant 別のビルドファイルにあるタスクを読み込んで実行する。

* オプションタスク 外部ライブラリを用いて機能させるタスク

- junit テストフレームワークJUnitを使ってJavaプログラムをテストする。

- ftp FTPによるファイルのアップロード、ダウンロードを行う。

- scp SCP、SFTPによるファイルのアップロード、ダウンロードを行う。

- rexec リモートホストに対しrexecによるコマンド実行を行う。

- sshexec リモートホストに対しSSHによるコマンド実行を行う。

- cvs CVSによるバージョン管理を行う。

3) ビルドファイルの基本

ビルドファイルの例として、Antの基本処理であるコンパイル、ビルドの記述例を図に示す。

I-16-7. Javaプロジェクト管理ツールMaven

Javaソフトウェア開発のコンパイル、ビルド、テスト、パッケージングに至る一連の作業の自動化するプロジェクト管理ツールMavenを解説する。スクリプトを記述する必要が少ないことなどAntに比べて優れた点にも触れる。

【学習の要点】

* MavenはJavaプロジェクト管理ツールとして、Antの機能を包含するだけでなく、プロジェクトの作成から公開に至るまでのライフサイクル全体を管理できる。

* MavenはAntのようにXMLを直接記述する必要が少なく、Antに取って代わる可能性を秘めている。

図I-16-7. Mavenの概念

【解説】

1) Mavenとは

Maven (Apache Maven)とは、Jakartaプロジェクトで開発されている、Java用プロジェクト管理ツールであり、Apacheライセンスにて配布されているOSSである。Mavenバージョン2はバージョン1から大きく変更されている。以下、バージョン2について解説する。

2) Mavenの特徴

* ビルド支援

Mavenは内部でAntを使用しており、Antのようにビルドスクリプトを一から書く必要がないようになっている。

* POMに基づいた動作

Javaプロジェクト全体をオブジェクトとみなすモデル「プロジェクトオブジェクトモデル(POM)」に基づき、プロジェクトの作成から公開までのライフサイクル全体を管理できる。

* サイト公開が容易

POMに定義されている情報にアクセスして、HTMLとしてプロジェクトサイトを生成できる。生成されるHTMLには、POMに直接記述している情報のほか、以下のようなものが提供される。

- リポジトリ情報から直接生成された変更ログ

- 相互参照ソース

- ソースのメトリクス

- メーリングリスト

- 開発者リスト

- 依存関係リスト

- ユニットテストレポートとカバレッジレポート

- 記事のコレクション

- ソフトウェア開発のリファレンス

- ソフトウェア開発プロセスの文書

* リポジトリの共有

プロジェクトの使用者がビルドに必要なJARファイルをリモートリポジトリからダウンロードする機能を持つ。複数のプロジェクトに渡ってJARファイルを再利用することができる。

* ディレクトリ構成の標準化

プロジェクトの推奨ディレクトリ構成があり、成果物の保守性、再利用性が高まる。

* 成果物の自動インストール

POMの依存関係で定義している成果物をリモートリポジトリより自動取得して、ローカルリポジトリにインストールする機能がある。

I-16-8. Webアプリケーションのテスト支援ツールCactus

Javaソフトウェアのテスト支援ツールであるJUnitを紹介し、JUnitでテストできないServletやJSPに対応したCactusを説明する。テストコードの記述方法、テストの実行方法を解説する。

【学習の要点】

* JUnitはJavaプログラム用のテスト支援ツールとして広く利用されている。

* Cactusを利用することで、JUnit単独では出来ない、ServletやJSPのテストの自動化を行うことが出来る。

図I-16-8. Cactusによるテストの流れ

【解説】

1) JUnitとは

JUnitはJavaプログラムをテストするためのツールである。JUnit単独で動作するほか、Antや統合開発環境Eclipseのプラグインとしても利用可能である。

2) Cactusとは

Cactusとは、Jakartaプロジェクトで開発されている、サーバ側のJavaプログラムをテストするためのフレームワークである。JUnitを拡張しており、JUnit単独では出来ない、ServletやJSPのテストが可能である。また、テストの自動化のために、Antと連動して動作する機能を提供している。

3) Cactusの動作

Cactusでは、クライアントとサーバの双方に同一のテストクラスを配置し、クライアントとサーバ間のHTTP通信を、Redirector Proxyとよばれるオブジェクトを介して処理する。

* クライアント側では、JUnitで用意されているTestRunnerクラスが、テストクラスのrunTest()メソッドを呼び出す。

* runTest()がbeginXXX()メソッド(XXXにはテスト毎につける名称が入る)を呼び出す。

* runTest()がRedirector Proxyに対しHTTPリクエストを発行する。

* サーバ側では、Redirector ProxyがテストクラスのtestXXX()メソッドを呼び出す。

* testXXX()では、サーバ側のテスト対象となるクラスを呼び出し、JUnitのAPIを使用してテスト結果をチェックする。

* Redirector ProxyはクライアントにHTTPレスポンスを返す。テストが失敗した場合は、例外に関する情報をクライアント側に返す。

* 例外が発生しなければ、クライアント側で、runTest()がendXXX()メソッドを呼び出す。

4) テストコードの記述方法

* テストクラスの作成

Cactusには以下の3つのテストケースクラスが用意されているので、テスト対象のコードに応じて、これらのクラスを継承してテストクラスを作成する。

- ServletTestCase Servlet用

- JspTestCase JSP、カスタムタグ用

- FilterTestCase フィルタ用

* テストメソッドの作成

上で作成したクラスにおいて、テスト毎に、beginXXX()、testXXX()、endXXX()の3つのメソッドを記述する。beginXXX()では設定するHTTPリクエスト情報、endXXX()では取得するHTTPレスポンス情報が引数となる。

5) テストの実行方法

CactusにはAntでテストを実行するためのビルドファイルbuild.xmlが用意されており、「test」という名のtargetが記述されている。「ant test」コマンドを実行することで、テストを実行でき、結果が出力される。その他のテスト実行方法としては、統合開発環境EclipseにCactusRunnerプラグインを導入してテストする方法などがある。

I-16-9. 要求分析モデル(DOA、OOA、Web MVC)

開発フレームワークによるアプリケーション開発を行う際に実施する要求分析について、DOA (データ中心アプローチ)、OOA (オブジェクト指向分析)、Web MVC (モデル-ビュー-コントローラ)モデルといった各種のモデルの特徴と違いについて解説する。

【学習の要点】

* DOAによりデータを処理から独立させることで、プログラムに変更があった場合にデータへの影響を抑えることができる。

* OOAにより各部品を分業させることで、プログラムに変更があった場合に影響する部品を最小限にすることができる。

* MVCにより役割を分離させることで、プログラムに変更があった場合に他の役割への影響を抑えることができる。

図I-16-9. 要求分析モデルとプログラム変更への対応

【解説】

1) DOA (データ中心アプローチ)

従来は、まず処理について設計し、データは処理に付随するものとして後から考えられる、という手法が一般的であったが、この場合、同じデータが重複して多重管理になったり、処理に変更が加わる際にデータも影響を受けたりするという問題があった。DOAは業務システムにおいて関係データベースの普及とともに広まっていった手法で、「データは組織の最重要資産である」「データは処理に比べて仕様変更の頻度が低い」という考え方がもとになっている。DOAでは、変化の多い処理からデータを独立させ、業務処理の流れをデータの流れを中心に捉え、個々の処理はデータに付随するものと考える。データモデリングをERD(Entity-Relationship Diagram)で記述するという方法が一般的である。

2) OOA (オブジェクト指向分析)

OOAは、オブジェクト指向によるシステム開発の上流工程での分析手法である。オブジェクト指向では、各オブジェクトが分業しながら機能を果たすので、仕様変更の際の影響範囲が小さくて済む。DOAでは、データの独立性が高くなる反面、データと関連する処理の特定が困難になるという問題点が生じる。これに対し、オブジェクト指向は処理とデータを一体化させている。OOAは組み込みシステムにおいてJavaの普及とともに広まっていった手法で、人間の発想や活動に近い考え方でオブジェクトのモデリングを行い、UML(統一モデリング言語)で記述すると言う方法が一般的である。

3) Web MVC (モデル-ビュー-コントローラ)

MVCモデルは、オブジェクト指向プログラミング言語SmalltalkのGUI設計に用いられた概念であり、Webアプリケーションの開発フレームワークに多く採用されるようになった。MVCでは、モデル(データを保持し業務ロジックを実行する部分)、ビュー(プレゼンテーションを行う部分)、コントローラ(モデルとビューとを制御する部分)の3つの役割に分けてアプリケーションを開発する。役割によって独立性を高めることで、仕様変更の際の影響範囲が小さくて済む。要求分析の段階から、保持するデータと画面とを分けて考えることができる。

4) 要求分析モデルの併用

Webアプリケーションの実際としては、オブジェクト指向言語でWeb MVCフレームワークを用い、データベースは関係データベースというように、上の3つのモデルを組み合わせるケースが多い。いずれのモデルも仕様変更に強いなどの共通の目標を持つが、アプローチの違いにより、インピーダンスミスマッチ等の問題が生じるので、要求分析レベルから各アプローチのすり合わせを行い、O/Rマッピングを利用するなどして、問題の解消を行う。

I-16-10. Webアプリケーション開発における実際の作業プロセス

Webアプリケーション開発に関して、プレゼンテーション設計、画面遷移設計、ビジネスロジック設計、データベース設計、コンポーネント間インタフェース設計といった実際の実装作業プロセスを説明する。

【学習の要点】

* Webアプリケーション開発に必要な各設計項目のプロセスを把握しておくことで、漏れのない設計ができ、開発作業の効率化やソフトウェアの品質向上が期待できる。

図I-16-10. 様々な作業プロセス

【解説】

1) Webアプリケーションの設計項目

ここでは、Javaなどのオブジェクト指向言語と、関係データベース、O/Rマッピングフレームワークを利用した場合を例として、一般的なWebアプリケーションを開発する場合の設計プロセスについて示す。設計項目には、以下のようなものが必要となる。

* データベース設計

* プレゼンテーション設計 (個々のWebページの表示に関する設計)

* 画面遷移設計

* ビジネス(業務)ロジック設計

* コンポーネント間インタフェース設計

2) データベース設計のプロセス

ERDに基づき、正規化を行う。また、運用上などの要件により、必要に応じて逆正規化を行う。ERDを物理設計レベルまでブレイクダウンして作成し、データベース構築のSQLが生成可能な状態にする。

3) プレゼンテーション設計のプロセス

各画面ごとに、表示項目、入力項目を洗い出し、各項目の表示内容、表示場所、HTML要素やスタイルを決定する。入力項目については、入力可能な値の範囲を明確にする。画面設計書などを作成する。

4) 画面遷移設計のプロセス

各画面から遷移可能な画面を洗い出し、遷移するための条件を明確にする。画面遷移図などを作成する。

5) ビジネスロジック設計のプロセス

UMLのクラス図を、クラスの属性やメソッド、クラス間の関係などの記述を追加した形でブレイクダウンして作成する。加えて、UMLのアクティビティ図、状態図、シーケンス図などを作成する。

6) コンポーネント間インタフェース設計のプロセス

コンポーネント(プログラムの部品)同士のやり取りの規約を作成する。Web MVCフレームワークにおけるモデルとビューとのやりとりは、コンポーネント間インタフェースを必要とする典型例である。UMLのコンポーネント図などを作成する。