はじめに
webアプリケーションフレームワークはwebアプリ開発を助けるツールとして広く用いられています。例えばPythonのDjangoやRubyのRuby on Rails, JavaのSpring bootなどが挙げられるでしょう。それらはアプリケーションサーバーにおけるMVCモデルを提供するフレームワークであると多くの場合説明がされますが、実は簡易的なWebサーバーも持ち合わせています。勉強した今考えれば当たり前なのですが、勉強しながら少し混乱したところでもあるのでここにまとめます。
3層構造とMCVモデル
まず復習ですが、webアプリケーションは三層構造になっています。
①プレゼンテーション層
②アプリケーション層
③データ層
ここで①はクライアントから来たリスエストを捌き、クライアントのウェブブラウザ上に情報を提供する働きを、②はプレゼンテーション層から送られてきた指示に従って動き、アプリケーションの動的部分を担います。③はデータを管理している層で、アプリケーション層からの指示(例えば顧客情報を出す)に従ってデータベースからデータを提供します。そして、これらの3つにはそれぞれ webサーバー、アプリケーションサーバー、データベースサーバーが対応しています。
次にMCVモデルですが、これはアプリケーション層において、データを処理する流れのモデルです。MはModel、CはControll、VはViewの頭文字を表します。Modelはデータベースとやり取りを担い、Viewは入出力に関わるインターフェースを担います。それらをまとめ上げるのがControll層であり、Model ⇔ Control ⇔ Viewというような関係性を持っています。
上にあげたDjangoやRuby on Railsはこのアプリケーション層の構造を提供するフレームワークであり、基本的にはこのMCVモデルを採用しています。
Xampp
さて、少し話はそれますが、Xamppと呼ばれるパッケージが存在します。これはApache(webサーバーを担う)やMySQL(データベース管理システムを提供する)といったwebアプリケーション開発に欠かせない道具を一挙にダウンロードすることができる便利ツールです(なおMCVモデルは採用していません。PHPでアプリケーションサーバーを操作します)。私も初めてwebアプリを作る時はこれを使いました。このパッケージは3層それぞれで必要なものがApache,PHP,MySQLとわかりやすく提示されているので直観とよく合うのではないかと思います。
Djangoを触って混乱
私は初めてのwebアプリ(未公開)をXamppを使って作成したのですが、そのあとにより便利だと聞くPythonのDjangoを用いて開発をすることにしました。このDjangoはwebアプリケーション開発に必要なシステムをコマンドひとつですべて行ってくれるので非常に便利だったのですが、Xamppがはじめてのパッケージだった私には便利すぎて何が起こっているのかよくわかりませんでした。
特に混乱したのが
アプリケーション層のフレームワークを提供するDjangoを入れただけでなぜwebアプリケーションを作れるようになったのか、です。Xamppの経験からデータベースを使わないにしても少なくともwebサーバーを構築する必要があると思っていた私には、Apache等webサーバー構築を担うパッケージを入れずに勝手に動き出すDjangoはもはや気持ち悪い代物でした。
フレームワークは独自のwebサーバーを構築できる
結論から言うと、webアプリケーションフレームワークは、もちろん主な役割としてアプリケーション層の構築を担うわけですが、それ以外にもwebサーバーの機能も提供してくれるということが分かりました。例えばDjangoであれば内蔵の開発サーバーを提供しますし、javaのSpring bootはTomcatなどの組み込みサーバーを提供します。
ただ、開発サーバーなどは性能でApacheに劣るため大規模な開発などを行う場合はこの組み込みサーバーではなく、Apache等のそれに特化したパッケージをダウンロードする必要があるとのことでした。