初心者に「Springフレームワークってどんなもの?」と質問されたときに答えに困ったので、Springフレームワークの解説ポイントをメモしておきます。
クライアントサーバシステム
そんな言葉知ってるよ、ということでもまずは黙って聞いてください。
「クライアント」と「サーバ」というコンピュータ間で通信を行うシステムです。
クライアントは「サービスや機能を使う側のコンピュータ」です。
サーバは「サービスや機能を提供する側のコンピュータ」です。
もっと簡単に言ってしまえば、私たちユーザが使うコンピュータのことを「クライアント」、サービスを提供している会社が用意しているコンピュータを「サーバ」と呼びます。
クライアントサーバシステムでは「Webアプリケーション」を動かすことができます。
Webアプリケーションを使用する側のコンピュータ(ブラウザ)が「Webクライアント」です。
Webアプリケーションを提供する側のコンピュータ(サーバ)が「Webサーバ」です。
SpringフレームワークによるWebアプリケーションは「サーバ側」で動作するものです。Webアプリケーションでは、重要な処理をサーバ側で行います。「クライアント側」で重要な処理を行うこともできますが、クライアント側はユーザのコンピュータなので、やろうと思えばいくらでもプログラムを改変することができてしまいます。
Webサーバソフトウェア
「Webサーバ」としての機能を提供するソフトウェアのことを「Webサーバソフトウェア」と呼びます。
Webサーバソフトウェアにはいろいろな種類があります。例として3つ挙げます。
- Apache(アパッチ) … 一番有名なWebサーバです。Windows, Mac, Linuxなど、ほとんどのOSで動かすことができます。オープンソースプロジェクトとしてApacheソフトウェア財団が開発・保守しています。
- IIS(アイアイエス) … Windows専用のWebサーバです。マイクロソフトが開発・保守しています。
- Nginx(エンジンエックス) … シンプルなWebサーバです。「リバースプロキシキャッシュ」という機能を搭載しているので応答速度が速いです。Nginx社によって開発・保守されていましたが、2019年3月にNginx社はF5ネットワークス社に買収されました。
サーブレット
「サーブレット(Servlet)」はJavaでWebアプリケーションを作成するための仕組みです。
サーブレットという仕組みの上で、Springフレームワークが動いています。
現在は使われませんが、過去にブラウザ上でJavaを動かす仕組みとして「Javaアプレット」というものが使われていました。これはJavaのアプリケーションをユーザ側のブラウザにダウンロードして実行するものでした。つまり、アプレットはクライアント側で動きます。一方でサーブレットはサーバ側で動きます。
サーブレットコンテナ
サーブレットを動かすためには「サーブレットコンテナ」が必要です。サーブレットコンテナの一つに「Apache Tomcat」があります。単に「Tomcat」と呼ばれることもあります。よく勘違いされる方がいますが、「Apache」と「Tomcat」は全くの別物です。
以下にそれぞれの機能を書いてみます。
「Apache」 … Webサーバとしての機能を持っています。
「Tomcat」 … サーブレットコンテナ。簡易Webサーバとしての機能も持ち合わせます。
ちなみに本格的にお仕事でサーブレットを使うときには、ApacheとTomcatを合わせて使います。TomcatだけではどうしてもWebサーバとして細かく制御することができないからです。
フレームワーク
「Springフレームワーク」の「フレームワーク(Framework)」を日本語に訳すと「骨組み」や「枠組み」という意味があります。ここでのフレームワークという言葉には二つの意図があります。
- 「骨組み」としてWebアプリケーションの共通部分(ひな形)を提供するもの。
Webアプリケーションのひな形を利用することで本来作るべき機能に集中することができます。 - 問題解決と意思決定を行いやすくしたい。
プログラミングでは一つの問題を解決するために様々なアプローチをとることができます。しかし、数十人という規模での共同開発において、皆が別々のアプローチをとってしまったらプログラムを保守することが難しくなってしまいます。「枠組み」から出られないようにする(一部の機能を制限する)ことによって、決まったアプローチをとるように強制することができます。
MVC(Model View Controller)
MVCとは「Model View Controller」の略です。「Model」と「View」と「Controller」、それぞれがフレームワークの中で協調動作するプログラムの名称です。
単に「フレームワーク」と呼ぶ場合、「MVCフレームワーク」のことを指す場合が多く、SpringフレームワークもMVCフレームワークの一つです。
「Model」と「View」と「Controller」、それぞれのプログラムは下記のように協調動作します。
Model … データベースのテーブルを表現するプログラム。データベース内のテーブル名と同じ名前をつけて、同じフィールドを持たせます。また、データの変更をビューに通知するのもモデルの責任です。他にも「ビジネスロジック(ショッピングの合計額や送料の計算など、サービスごとに機能は異なる)」を担当します。
View … UIへの出力(表示)を担当するプログラム。ウェブアプリケーションではHTML文書を生成して動的にデータを表示するためのプログラムです。
Controller … UIからの入力を担当するプログラム。入力された内容をModelに通知します。
以下の処理の流れをイメージしてください。
- ユーザがビューにアクセスする。
- コントローラがビューからの入力を監視する。
- ユーザがビューに入力を与える。
- コントローラがビューの入力を受け取り、モデルに通知する。その結果、モデルのデータが書き換えられる場合もある。モデルは必要があれば、データベースに自身の変更内容を反映する。
- モデルが変更された場合、自身が変更された旨をビューに対して通知する。
- ビューはモデルから関連するデータを取得し、出力を更新する。
※補足となりますが、「Fat Controller」という言葉があります。これは文字通り、MVCのうちのコントローラだけが肥大化していくことを指します。
初心者がよくやってしまうのが「ユーザから入力された情報をコントローラで計算してからモデルに渡すこと」です。このため、コントローラだけに記述が集中し、肥大化していきます。本来はこのような計算(ビジネスロジック)はモデルに記述します。
最後に
今回は初心者に向けてSpringフレームワークを解説する際のポイントを書いてみました。
一旦は座学としてここまで理解できていれば、あとはサンプルプログラムを作成し、MVCの連携の流れを体感すれば、Springフレームワークは理解できると思います。
Springフレームワークが理解できれば、ほかのあらゆるMVCフレームワークも仕組みは同じです。
フレームワークを利用することによる開発の効率化を体験すれば、その威力が理解できると思います。
参考資料
Apache Tomcat
CERN httpd
NCSA HTTPd
Apacheソフトウェア財団
Apache Tomcatとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
フレームワーク
Model View Controller
メインフレーム 【 mainframe 】 大型汎用機 / ホストコンピュータ / host computer
UNIX
[Java Platform, Standard Edition 8の名前とバージョン](Java Platform, Standard Edition 8の名前とバージョン)
「HTTPリクエスト」と「HTTPレスポンス」 | ITSakura
