株式会社WOWNエンジニアチームです。
前回までで、サーバーでのデータベースの操作にまつわる話をしました。
今回はもう一歩踏み込んだ話で、サーバーとデータベースだけでなく、Webシステム全体のお話をさせてください。
イントロダクション
「Webシステムとは何なのか?」を究極に分解すると、「ユーザーの操作によって、データベースに記録を行う」「ユーザーの操作をもとに、データベースの記録に応じた内容を表示する」の2つの動作を行うものです。
PHPとはWebシステムを構築する際に使われることの多いプログラミング言語でが、そんなPHPのWebシステムを効率よく作成するための環境としてフレームワークというものがあります。
ここでは、当社で最近比較的多くの案件で採用しているLaravelというフレームワークをメインに紹介して行きたい思います。
MVCモデル
LaravelでのプログラミングはMVCモデルというデザインパターン(設計思想)に基づいており、一連の処理を大きく「モデル(Model)」「ビュー(View)」「コントローラー(Controller)」の3つの機能に分けて作成します。3つのそれぞれの機能ごとにできることとできないことがハッキリと分かれています。
どうしてこんな構造になっているかというと、役割(責任)を分散させることが目的です。
バグや意図しない動作が発生した時、責任が分かれていると処理を追いかけて修正がしやすいですし、不具合が他の機能に及ぼす影響も少なく済みます。後から新しい機能を追加や変更したくなった時、役割が分かれていると修正箇所が少なく済みます。
など、さまざまなメリットが存在するデザインパターンと言えるでしょう。
では、それぞれの機能はどんな役割を持つのでしょうか?
モデル(Model)
データベースにまつわる操作を受け持つのがモデルの役割です。前回まででお話しした内容はおおよそモデルの役割です。
データベースのテーブル(記録の分類)ごとに「モデルクラス」というものを作成します。クラスとはデータの構造で、データベースの記録と同一の構造のデータを作れるように、モデルが取り決めを用意してくれているのです。
例えばユーザー情報を扱うのであれば「Userモデル」というものが作成され、ユーザー情報(Userクラスのデータ、つまりUserオブジェクト)はこのUserモデルによって操作がされます。データを取り出したり書き込んだりするのもモデルの役割です。
逆に、モデルができることはデータの操作だけです。また、単独で動作をすることもありません。必ず何かしらの指示を受け取って、それに基づいてデータの操作を行います。
ビュー(View)
初回で「フロントエンドとバックエンド」の話をしましたが、このフロントエンド部分をMVCではビューと呼びます。
ユーザーが実際に見るページがどんな見た目をしているのかをビューによって制御します。
必ず決まった内容を表示するのではなく、リクエスト(サーバーへの問い合わせ)とレスポンス(リクエストをもとにサーバーから返ってくるデータ)に応じて表示する内容を変化させることが可能です。
ビューがデータの保存や作成などを行うことはありません。
コントローラー(Controller)
ビューとモデルを繋ぐ役割を持つのがコントローラーです。
ビューから送られたリクエストはまずコントローラーが受け取り、またビューに最終的にレスポンスを返すのもコントローラーです。リクエストを受け取ったらどのモデルからデータを探すのか?モデルが操作したデータをどのような形式でビューに返すのか?など、橋渡しを行う機能です。
コントローラーを介さずに、ビューとモデルが直接やり取りをすることはありません。
要するに:
モデル:データベースを読んだり書き込んだりする
ビュー:ユーザーが見ている文字や画像などを実際に表示する
コントローラー:モデルやビューからデータを受け取ったり渡したりする
こういう役割となっています。
例:WOWNブログだと?
実際の動きで確認するため、このWOWNブログがどうなっているかを例に取ってみましょう。
WOWNブログのトップページにアクセスすると、投稿されたブログ記事の一覧が表示されますね。これをMVCに焦点を合わせて見ると以下のような流れになります。
- ブログトップのビューが読み込まれ、まず画面の構成(ブログタイトルはこの位置、検索ボックスはここに配置 など)
- ビューの中で「記事を取得する」という処理が発生し、コントローラーにリクエストが送られる
- コントローラーはリクエストもとに、ブログ記事モデルに「記事を取得してください」と指令を出す
- モデルがデータベースから記事を検索し、取得した記事をコントローラーに返却
- コントローラーが記事を受け取り、レスポンスを作成する
- コントローラーからのレスポンスをビューが受け取る。受け取った記事データをもとに、「それぞれの記事のタイトル部分はここ、サムネイルはここ」などの配置を行う
- ブログトップが完成!
こういった流れの処理になっています。
以上、Laravelのプログラムは「役割を3つに分けて作成される」「役割を分けるとメリットが大きい」という話でした。
次回、それぞれの役割の内容をもう少し詳しく見てみましょう。続きます。
WEB制作・ITに関するお悩みや
ご質問等お気軽にご相談ください