この特集のトップページへ
Chapter 1:クライアント/サーバーアプリケーションの仕組み

見出し 1.1.2 クライアント/サーバーアプリケーションモデル
 次に,クライアント/サーバーアプリケーションモデルについて考える。クライアント/サーバーアプリケーションでは,1つまたは複数のサーバーにデータベースを配置し,クライアントコンピュータ上のアプリケーションがデータベースにアクセスしてデータを共有する形態となる(Fig.1-3)。

Fig.1-3 クライアント/サーバーアプリケーションモデル
fig.1-3

 クライアント/サーバーアプリケーションを実装するときには,「どのようにしてクライアントとサーバーとを接続するのか」という点が問題となる。この問題の解決策としては,次の3つの方法が考えられる。

1) 共有フォルダを使う方法

 サーバー上にクライアントからアクセス可能な共有フォルダを作成し,そのなかにAccessのMDBファイルを配置し,個々のクライアントから共有ファイルとしてアクセスする方法である(Fig.1-4)。

Fig.1-4 共有フォルダを使う方法
fig.1-4

 この方法では,スタンドアロンアプリケーションと同じ手法で開発できるため,開発者は新しい技術を習得しなくても,必要な機能を実現できる。しかし,AccessのMDBファイルは共有ファイルとして同時に開かれることを想定しているわけではないので,クライアントが同時にデータベースを更新しようとした場合などには不具合が発生することもある。このため,この方法は基本的に推奨できない。

2) マルチユーザー対応のデータベースエンジンにODBC経由で接続する方法

 SQL ServerやOracleなど,マルチユーザーを想定したデータベースエンジンをサーバー側に構築し,個々のクライアントからネットワーク接続してデータを利用する方法である。クライアントからデータベースエンジンへと接続する方法にはさまざまなものがあるが,WindowsプラットフォームではODBCドライバを経由してネットワーク接続することが多い(Fig.1-5)。

Fig.1-5 ODBCドライバを使った接続
fig.1-5

 1)の方法とは異なり,この方法はデータベースエンジンがマルチユーザーを想定しているため,データベースを同時に更新しようとした場合にも問題が起こりにくい(「起こらない」ではなく「起こりにくい」という点に注意してほしい。問題が起こらないようにするためには,プログラムを開発するときに若干の工夫が必要となる)。そのため,この方法は,一般的なクライアント/サーバーアプリケーションでは比較的多く採用されている。

3) 独自のクライアント/サーバー通信システムを構築する

 サーバー側にデータベースにアクセスするプログラムを配置し,個々のクライアントと独自に通信するシステムを作ってデータをやり取りする方法である(Fig.1-6)。

Fig.1-6 独自のクライアント/サーバー通信システムを構築する方法
fig.1-6

 この方法では,クライアントが直接データベースにアクセスするわけではない。データベースにアクセスするときには,サーバー上に配置されたプログラムに,その処理を依頼するという形態となる。たとえば,処理内容がデータベースの参照であれば,クライアントはサーバー上のプログラムに必要なデータの参照を依頼し,サーバー上のプログラムがデータベースを走査して結果を取得し,それをクライアントに返すという手順になる。通信システムとしては,TCP/IPネットワークを使う方法,Webの標準プロトコルであるHTTPを使う方法などが一般的である。

 このシステムの問題は,ネットワークで通信するプログラムを開発者が実装しなければならない点にある。一般的に,ネットワークで通信するプログラムを実装するには,それなりの技量が必要とされる。ネットワークで通信すること自体はさほど難しいことではない(たとえばVisual BasicであればTCP/IPで通信するためのWinSockコントロールを利用することで,比較的容易にそのようなプログラムを実装できる)のだが,堅牢なシステムを構築するとなると,とたんに難しくなる。たとえば,ネットワークは常に接続しているとは限らないので,「通信が途切れたときにはどうするのか」などのエラー処理を正しく実装しなければならない。また,サーバー側のプログラムは1つのクライアントとのみ接続できればよいというわけではなく,同時に複数のクライアントと接続できるようにする必要があるため,マルチスレッドで動作することが要求される。この結果,実装上の難易度はさらに高くなる。

 とはいえ,3)の方法には多数のメリットがある。

  1. クライアントの負担が軽い
    クライアントが直接データベースにアクセスするわけではないため,クライアントの負担が軽くなる。

  2. さまざまなユーザーインタフェースの提供が可能
    クライアントはデータベースにアクセスせずにサーバーへとその処理を依頼するだけである。そのため,クライアント側のアプリケーションは,サーバーに的確に処理内容を伝えられるものであれば何でもよい。ネットワーク通信できるプログラムであれば何でもよく,Visual Basicで実装してもよいし,Visual C++で実装してもかまわない。Webページでユーザーインタフェースを提供することもできるだろう。極端な話,Windowsプラットフォーム以外で動作するユーザーインタフェースを提供することも可能なのである。

  3. アップデートが容易
    データベースにアクセスするプログラムはサーバー側に配置されているため,あとでデータベースエンジンを変更した場合でも,修正するのはサーバー側のプログラムだけですむ場合が多い。個々のクライアントにインストールされたアプリケーションをアップデートする必要はなく,特にクライアントコンピュータが多数存在する環境では,メンテナンス効率が上がる。

 一般に,Fig.1-6のようなアプリケーションモデルを「3階層アプリケーションモデル」と呼ぶ。このようなアプリケーションモデルの実装方法を説明することが,本連載の主目的にほかならない。3階層アプリケーションモデルの詳細は,「1.1.4 2階層から3階層,そしてN階層モデルへ」で改めて説明する。

prev Chapter 1 4/11 next