Webアプリケーションサーバ を使った開発
テンプレートエンジン、O/Rマッパーなどを使うことで、Webアプリケーションの開発はかなり効率的になりました。ここでは、もう一歩踏み込んで、Webアプリケーションの開発をさらに効率化するための方法について検討してみましょう。
URLと遷移
RSSリーダーに巡回用URLを登録するフォームを追加したときのことを思い出してください。巡回用URLを登録する仕組みを作るために、3つのプログラムを作りました。1つは登録済みのURLをリスト表示するプログラム。そして登録済みのURLを編集するためのプログラム。もう1つは、新規にURLを登録するためのプログラム。巡回用URLを管理するのに必要な3つの機能を実現するために、3つのプログラムを作りました。
Webアプリケーションでは、リクエストとレスポンスは必ずペアになっている必要があります。つまり、ユーザに画面を見せるためには、Webサーバに対してリクエストを送る必要があるわけです。
リクエストはURLとクエリから構成されています。たいていのWebアプリケーションでは、次の画面に移動するために、別のURLに遷移します。別のURLを変えることで、リクエストをWebサーバに送信し、新しい画面を表示するわけです。
本書で開発に使っているWebサーバでは、プログラムのファイル名がURLの一部になります。そのため、クエリ部分を除いたURLを変えるためには、別のプログラムファイルを作る必要があります。
CGIとURL
このようにしてWebサーバ上でプログラムを動かすための仕組みをCGIと呼びます。CGIは「Common Gateway Interface」の頭文字を取った略称です。本来はWebサーバとプログラムの間でデータをやりとりするための仕組みを定めた仕様のことをCGIと呼びます。Webサーバを動かすプログラムを指してCGIと呼ぶこともあるようです。
CGIは次のような仕組みで動きます。ちょうど、WebサーバがURL上のパスをフォルダの階層やファイル名と解釈して、HTMLや画像ファイルをWebブラウザなどに返すのに似た働きをします。
- URLのパスの一部をファイル名として解釈して、呼び出すプログラムを探す
- クエリを環境変数に格納してプログラムを起動する
- プログラムから返ってきた結果をレスポンスとして返す
本書でこれまで開発に利用してきたWebサーバでも、URLの一部をプログラムのファイル名として解釈してプログラムを動かします。このため、個別のURLを設けて表示する画面やフォームを変えようとすると、それぞれのURLに対応するプログラムファイルを用意する必要があります。結果として、多くのプログラムファイルを作る必要があるわけです。
しかし、一般的なプログラムの開発では、1つの処理を実行するためだけに個別にプログラムファイルを作る、ということはあまり行いません。個別の処理は関数やメソッドなどとして実装して、関連する処理をモジュールやクラスといった形でまとめる、といった手法を使うのが普通です。
今我々が利用している開発手法では、特定の処理を実行するために1つのプログラムファイルを作る必要があります。これはちょうど、1つの関数やメソッドを作るために1つのプログラムファイルを作る、というような話です。また、テンプレートエンジンやO/Rマッパーを使うようになって、簡潔で短いプログラムを書けるようになりました。短いプログラムが、多くのプログラムファイルに分散してしまうのでは、プログラムの編集がしづらくなってしまいます。
1つのファイルに1つの処理、という形式をとらずに、モジュールやクラスを定義するのと同じようにWebアプリケーションを開発できないものでしょうか。そうすれば、より効率的に、高機能なWebアプリケーションを作れるようになるはずです。