Laravelの全体像、ファイル・ディレクトリごとの役割と関係性を俯瞰する【各コンポーネントごとに解説】
Laravelのプロジェクトを作ると、大量のファイルやディレクトリで溢れかえり、気後れしそうになる。
そこで本記事では開発をスムーズにするため、Laravelの全体像、とりわけよく使うファイル・ディレクトリの役割と関係を解説する。
Laravelの全体像
Laravelの全体像はこのようになっている。
流れ
- マイグレーションファイルに基づき、マイグレーション。DBのテーブルを作る
- クライアントがリクエストを送信する(主にGET/POST)
- ルーティングからリクエスト送信先のURLに対応するアクション(コントローラに書かれてある)を呼び出す
- コントローラに書かれてあるアクションを実行する
- アクションではDBにアクセスするためのモデルを読み込む
- アクションではユーザーから受け取ったデータをチェックするためのリクエストを読み込む
- アクションがバリデーションを行った上でDBへ読み書きを行う
- DBから読み込んだデータを、ビューの変数に当ててレンダリング
- レンダリングしたデータをレスポンスで返す
- ユーザーがページを見る
マイグレーション【 database/migrations/ 】
マイグレーションは、DBのテーブルを作ることである。
テーブルとはデータを入れる受け皿。エクセルのシートをイメージすれば話が早い。横の行をレコード、縦の列をカラムと呼ぶ。カラムには入力する値のルールが決められており、それぞれ文字列や数値など決められた値しか入力してはならない。
Laravelのマイグレーションでは、まず database/migrations/
内にマイグレーションファイルを作り、そこにDBの構造を定義する。その上で下記マイグレーションコマンドを実行する。
php artisan migrate
これで、DBへテーブルが作られた。後は、モデルにカラム名を定義して、ビューから読み込ませる状態にしておく。
ルーティング【 routes/web.php 】
ルーティングは、URLと処理(アクション)の対応表である。
例えば、商品購入履歴ページにアクセスした時、商品購入履歴のデータを読み込むという処理(アクション)を呼び出す必要がある。そのURLと処理(アクション)を対応付けてまとめたものがルーティングである。
ただし、URLへのアクセス(リクエスト)にはメソッドが存在する。主に二種類あり、ページに直接アクセスするGETメソッド、フォームを送信して書き込みなどの処理を行うPOSTメソッド。
LaravelのルーティングにはURLだけでなくメソッドもセットで記述する。
コントローラ【 app/Http/Controllers/ 】
コントローラーは、アクション(処理)の集合体である。コントローラで行う代表的な処理は主に2つ。DBへの読み書きと、レンダリングである。
他にもサーバーサイドの処理関係はまとめてコントローラに記述することになるだろう。
DBを読み込みをするためにモデルを、ユーザーから受け取った値のバリデーションチェックのためリクエストをuse文で読み込む。
モデル【 app/XXX.php 】
モデルは、コントローラから呼び出されDBへアクセスする際に利用される。
コントローラ単体ではDBへ読み書きをすることはできない。そこでモデルにDBに存在するカラム名を記述する。それを読み込ませることでコントローラがDBに読み書きできるようにする。
リクエスト【 app/Http/Requests/ 】
リクエストは、ユーザーから受け取ったリクエストのバリデーションチェックを記述する場所である
バリデーションチェックとは、不適切な値をDBに入れないようチェックすることである。指定文字数内に文字列が収まっているかチェックしたり、入力必須がちゃんと入力されているかチェックする。バリデーションに失敗した場合DBへの書き込みはされない。
このリクエストを適切に設定することで、表記ゆれなどを防ぐことができる。
ビュー【 resource/views/ 】
ビューは、HTML(blade.php)の集合体である。とりわけ、Laravelではblade.php
にHTMLを記述する仕様になっている。
コントローラがDBから読み込んだデータを、ビューに書かれた{{ 変数名 }}
の場所に表示させる。これをレンダリングと言う。
こうしてDBのデータが適切な場所にレンダリングされたHTMLデータがコントローラによってレスポンスされる。
結論
全体像が把握できたらすぐに手を動かして覚えると良いだろう。下記リンクにて、手順に沿ってやれば簡易掲示板アプリを作ることができる。