人気のフレームワーク「Laravel」について自分の勉強のためにも、どういうものなのか、どんな機能なのか、フォルダなど基本的な部分をまとめました。
詳しい操作方法は記述していませんが、こういうものなんだなっていうのがわかれば幸いです。
目次
Laravelとは
LaravelはPHPで書かれたフルスタックのWebアプリケーションフレームワークです。現代的なフレームワークが要求される一通りの機能を実装しています。
2011年にリリースされてから人気が高まっていて、世界では最も人気のフレームワークです。
そもそもフレームワークとは開発で多用される機能や仕組みを持ったソフトウェアのこと
(それに対してライブラリは開発に役立つ便利な機能を揃えたソフトウェアのこと)
フレームワークは設計されたシステムでセキュリティやメンテナンス、拡張性の面などで誰にでもわかりやすいです。
Laravelの特長
Laravelの特長は以下のような点です。
- MVCフレームワーク、アプリケーションフレームワークで広く使われている。詳しくは後述
- コードが読みやすく、書きやすい。
- 学びやすく高品質のものを作れる
- Composerにより管理がしやすい
- ORM(Object-Relational Mapping)を導入している。オブジェクトを扱うようにデータベースを扱える。
- Bladeと呼ばれるテンプレートエンジンを使用している。
ディレクトリ構造と役割について
ディレクトリ構成と役割について簡単に
ディレクトリ構成
- app アプリのメインとなるフォルダ
- bootstrap 初期処理やキャッシュなど
- config アプリの設定ファイルを置くところ
- database データベース(マイグレーション)関係
- public 画像、JS、CSS 外部に公開されるもの
- resources bladeなど(HTML的な部分)
- routes アプリのURL設定など、ルート定義するディレクトリ
- storage セッションやログなどをやる
- tests テスト用、テストを置くためのディレクトリ
- vender Composerの依存内容、フレームワーク本体のプログラム
appフォルダ
このフォルダはメインかつ使用頻度も高いフォルダ
中身は以下のようになっています。
console コンソールプログラム関連
Exceptions 例外処理関連
Http アクセスしたときの処理をまとめるとこ
Providors プロバイダ関連アプリケーションの中の全てのサービスプロバイダがここにくる
User.php ユーザー認証に関するもの
routesフォルダ
api.php APIのルーテイング
channels.php ブロードキャストチャンネルのルーテイング
console.php コンソールプログラムのためのルーテイング
web.php Webページにアクセスするためのルーテイング
MVCとは
MVCとはModel(モデル), View(ビュー), Controller(コントローラ―)の頭文字からきていて、アプリケーションフレームワークとして広く使われています。
(laravel以外にもRuby on rails等にも使われている方法)
これはWebアプリを実装するためのデザインパターンの1つで、機能ではなく「概念」のようなものです。
ただコードを書いて開発していくと、だんだんとコード数が膨大になり、コードの破綻が起きてどこに確認したいものがあるか、どこに新しいコードを書くべきかわからなくなってしまいバグや不具合の原因になります。
なので、MVCという概念を使い機能を分けて管理し、効率的に開発していきます。
MVCではそれぞれ役割を分けてコーディングします。
Model(モデル)・・・データ処理担当
データベースとデータのやり取りを行います。
View(ビュー)・・・画面表示担当
ブラウザに表示するHTMLを動的に生成する部分です。
Controller(コントローラ)・・・制御担当、橋渡し役
リクエストを受け取りURLに応じて、設定された処理を行います。
MVCの簡単な流れ
- routeでアクセスの管理、関連付け
- アクセスが来たらその処理をコントローラーで行い、処理の割り振りを行う。
- データの処理はModelで行い、データの接続をする
- データをコントローラーに返す
- Viewにデータを渡して、viewでサイトの見た目を処理する
マイグレーションとは
SQLを直接使わなくても、データベースを管理できるlaravelの仕組みです。
LaravelのデフォルトではMySQLが設定されていますが、設定のdriverをsqliteに変更すればSQLiteが使えるようになります。
Schemaファサードを使っていて、テーブルの作成や操作をサポートしてるデータベースシステム全部に対しサポートします。
テーブルの作成は下のような流れで行います。
テーブル作成の簡単な流れ
1.マイグレーションファイルを生成。(1テーブル1ファイル)
2.ファイルにテーブル定義を書く
3.マイグレーションを実行し、DBに反映
ファイルの場所はdatabase/migrations
にあります。
以下のコマンドでテーブルを生成でき、ファイル名は 生成時間_アクション名_テーブル名という構成になっています。
php artisan make:migration create_users_table
マイグレーションの中身
upとdownメソッドが作られています。
upが実行(作成)で、downが元に戻す(削除)メソッドです。
upでは新しいテーブルやカラムなどをデータベースに追加するために使用されます。
用意したマイグレーションはphp artisan migratede
のコマンドですべてのファイルが実行されます。
逆に最後のマイグレーション操作を元に戻すにはrollbackコマンドを使います。
php artisan migrate:rollback
Eloquent(エロクアント) ORMとModel(モデル)
Laravelで提供されているデータ操作のための機能であり、モデルとDBを対応づけます。
モデルはテーブルの内容を定義したクラスのことです。
ORMはObject Relational Mappingの略で、プログラミング技法のことです。
これによりデータベースから取得したデータをオブジェクトの形に変換して渡されるようにします。反対にデータベースにデータを渡すときはレコードに変換されて渡されます。
モデルのひな型のつくり方(コマンド)
php artisan make:model モデル名
モデル名はテーブル名の単数形にする必要があります。
Eloquentには様々な規約があり、そのうちの一つで「データベース名は、モデル名の複数形にする」というものです。
users -> User
このようにするとUserモデルができます。テーブル名はusersです。
モデルクラスは「Model」を継承したクラスとして作成されます。
User class内で $fillable
を使用すると指定したカラムに関してはデータの追加や更新ができます。(ホワイトリスト方式)
反対に$guard
にする場合は、データの追加や更新をされたくないカラムのみを指定して、あとは全部許可する(ブラックリスト方式)という$fillableの逆の方式もあり、どちらかを設定することができます
より詳しく知りたい方は公式サイトのEloquentのドキュメントを読んでみてください。
Routeルーテイングとは
ブラウザから任意のURLにアクセスがあった場合、どのController処理を動かすのかを定義するものです。
「あるアクセスをしたらそれに対応した処理を呼び出す」のがルーテイングという機能。
Laravelのルートは、routeディレクトリ下に設置されている、ルートファイルで定義されます。routes/web.php
ファイルでwebに表示するルートを定義します。
HTTPメソッドも使用可能です。
Route : : get(~);
Route : : post(~);
Route : : put(~);
Route : : patch(~);
Route : : delete(~);
Route : : options(~);
他のURIへリダイレクトする場合はRoute : : redirect
メソッドを使用します。
定義方法
Route::get(アドレス,関数など)
具体例 Route::get('blogs','BlogController@show')
Route laravel既存のRouteファサード
get HTTPメソッドを指定
blogs この部分には任意のURL
BlogController 作ったコントローラーを指定する
show コントローラーのメソッド名を指定
この場合、BlogControllerのshowメソッドが実行される。
ルート定義にnameメソッドを使って、そのルートに名前を付けることもできます。
Route::get('blogs','BlogController@showList')->name('blogs')
controller(コントローラー)とは
routeで定義されたHTTPリクエストの処理を書いていくところです。
Controllerのメソッドであるクラスを呼び出してデータを取得し、Bladeに取得したデータを渡します。
クラスとして生成されLaravelの既存のコントローラクラスを拡張して作られています。コントローラーはコードを少なくするのが良いとされています。
コントローラを作るコマンド
php artisan make:controller コントローラ名
クラスを階層的に整理するための名前空間というものが使われています。
ルートファイルをロードしていて、use文で先頭の名前空間は書かれているので、それに続く名前空間の部分だけを指定します。
クラス内に書かれたメソッドはアクションとして扱われます。returnされた内容がwebブラウザに返され、このアクションにはルーテイングフォルダ内のweb.phpでルートを割り当てることで使えます。
Controllerの「validate」メソッドを利用すると簡単にバリデーションすることができます
バリデーションとは入力されたデータが正しく入力されているかチェックすることです。
アクションメソッドから
$this->validate($request,[検証する設定の配列]);
のように呼び出せます。
Bladeとは
BladeはシンプルでパワフルなLaravelのテンプレートエンジンでビューの中にPHPを直接記述できます。
(PHPにはsmartyというテンプレートエンジンもある)
ファイル名は
ファイル名.blade.php
とします。
Bladeはテンプレートの継承やデータの受け渡しができます。
変数を使うときは{{ 変数 }}とする。変数以外にも値や式、関数などが入ります。({{ }}は自動的にhtmlspecialchars関数を通します。)
エスケープ処理の場合は{{!! !!}}と!マークが入ります。
@で始まるとbladeで「@ディレクティブ名」と書きます。@endディレクティブ名が基本的に対になっています。
@extends('')
括弧内のbladeを継承する
@yield('content')
括弧内が同じ@sectionを読み込む
@section('content')~@endsection
このブロック内容を@yieldに追加
@include(file)
ファイルを読みこむ

Laravelの公式ページより引用
*フォームを利用するときはCSRF保護が必要
csrf(クロス・サイト・リクエスト・フォージェリ)とはwebサイト攻撃の1つで外部からフォームを送信するものです。
Laravelでは@csrf
を記述するだけでよく、トークンを生成し外部からの攻撃を防いでくれます。
LravelではCSRF対策がなさ邸内フォームの送信は受け付けられないようになっています。
Seederとは
seeder(シーダー)とはlaravelのクラスの1つで、テストデータや初期データを簡単にデータベースに設定できるようにするものです。
シーティングの手順は以下のようになります。
- まず初期データやテストデータの内容を記述したシーディングのためのファイルを作成します。
このコマンドで生成できます。
php artisan make:seeder ファイル名
- 次にファイルを編集し、シード(最初に用意しておくレコード)を追加しておきます。
seederファイルのrunメソッドに設定を記述し、データ作成の処理を書いていきます。
DatabaseSeeder.phpに登録することで呼び出せます。 - そしてartisanコマンドで実行します。以下のコマンドで実行できます。
php artisan db:seed
この手順でその内容に沿ったデータがデータベースに登録されます
factory
factoryとはEloquentモデルを使ってテストデータを作る際に便利な機能です。主導ではなく自動でデフォルト値を設定してくれます。名前や住所、電話番号などを指定すると、ランダムデータを生成してくれます。
作成するコマンド
php artisan make:factory ファイル名
Faker phpライブラリのインスタンスを使います。
勉強するには
Laravelの学習におすすめの教材やサイト、サービスを紹介します。
「PHPのフレームワーク Laravel入門(第2版)」はLaravelの学習の定番の解説書のような存在です。
基本的なことはこの1冊でしっかり学習できるので、まずは1度読んでみてその後何か制作してみるのがおすすめです。
またところどころリンクを貼っていましたが、Laravel公式ページのドキュメントがあります。勉強になるので一度読んでおくといいと思います。
TECHACADEMYには「PHP/Laravelコース」があり、短期間でオリジナルサービスを開発できるようになる学習プログラムが用意されています。
自分で学習するのが難しい方にはおすすめです!
Techpitというサイトではサービスを実際に作りながら学習できます。
Laravelを使った教材もたくさんあるので基本を一通り学んだらやってみるのもおすすめです。
基本的なことを学んだら実際に何か開発してみるのが一番身につきます!
さいごに
あまりうまくまとまっていなかったかもしれません。またしっかりと整理したいと思います。
ここで紹介したのはほんとに基本の部分になります。
まだまだいろいろな機能があるのでLaravel使いこなせるように頑張りましょう!