Laravel 8.x のアップデート内容まとめ
エンジニアになろう!
Laravel 8.x 実装!
2020年9月8日、Laravel が半年ぶりにアップデートされ、「バージョン8.x」が実装されました。
ネットでは俄然 6.x の人気が高いようですが、最新バージョンの話題もちらほら見かけるようになりました。
今回は、「Laravel 8.x のアップデート内容」について、コードも含めて紹介していきます!
Laravel 8.x の主なアップデート項目
今回取り上げる Laravel 8.x のアップデート内容は、以下の通りです。
- Laravel Jetstream
- Models ディレクトリの配置変更
- Model Factory がクラスに変更
- レート制限の改善
- route の変更
- .env の反映が即時に変更
サポート期間
Laravel 8.x のサポート期間は General です。
LTS の最新バージョン 6.x と比較すると、サポート期間は以下のようになります。
バージョン | バグ修正サポート | セキュリティサポート |
8.x | 2021年3月8日 | 2021年9月8日 |
6.x | 2021年9月3日 | 2022年9月3日 |
プロジェクト作成
Laravel 8.x の新機能を実際に試していくため、あらかじめプロジェクトを作っておきましょう!
1$ composer create-project laravel/laravel hogehuga 8.0
Laravel Jetstream
Laravel 8 では、新しい認証パッケージ「Laravel Jetstream」が追加されました。
以前からあった LaravelUI を改善したもので、以下のような新機能を備えています。
- ログイン
- ユーザー登録
- メール認証
- チーム管理
- CSS フレームワークが TailwindCSS に変更
Bootstrap に代わって採用された「TailwindCSS」は、class でスタイル指定する部分は同じものの、よりカスタマイズ性に重きを置いたフレームワークです。
Jetstreamをインストール
まずは、以下のコマンドで Jetstream を入れます。
1$ composer require laravel/jetstream
テンプレート言語の選択
Jetstream では、フロントエンドを「Inertia」と「Livewire」から選択できます。
フロントエンド | 使用するテンプレート言語 |
Inertia | Vue.js |
Livewire | Laravel Blade |
どちらも便利ですが、今回は SPA 向けの Inertia で進めていきましょう。
ファイル構成は普通の Vue.js ですが、vue router ではなく、Laravel の route を使用します。
Inertia をインストール
1$ php artisan jetstream:install inertia
1$ npm install && npm run dev
マイグレーション
1$ php artisan migrate
resources/js/jetstream 下に .vue コンポーネントがたくさん作成されているので、確認してみましょう!
teams を設定
続いて、チーム機能を有効にします。
1 'features' => [
2Features::profilePhotos(),
3Features::api(),
4Features::teams(), //コメントアウトを外す
5],
インストール時に teams オプションを有効にしている場合は、初期状態からコメントアウトが外れています。
コマンドは以下です。
1$ php artisan jetstream:install inertia --teams
メール認証を設定
こちらも同様に、emailVerification() のコメントアウトを外しましょう。
1 'features' => [
2 Features::registration(),
3 Features::resetPasswords(),
4 Features::emailVerification(),
5 Features::updateProfileInformation(),
6 Features::updatePasswords(),
7 Features::twoFactorAuthentication([
8 'confirmPassword' => true,
9 ]),
10 ],
完了!
これで、jetstream の導入は完了です!
registar から登録し、dashboard や profileを覗いてみましょう。
Laravel 8.x 新機能の素晴らしさを実感できますよ!
models ディレクトリパスが変更された
Laravel 7.x 以前は、以下のように model を作成すると、 app 直下に MyModel が配置されていました。
1$ php artisan make:model MyModel
デフォルトでは Http やその他ディレクトリがある中にモデルファイルが生成されるので、とても違和感があるんですよね…。
8.x では app/Models が初期フォルダ
しかし、8.x では、初期状態から app/Models ディレクトリ が配置されています。
そのため、上記のコマンドを使用すると、app/Models 直下に MyModel が生成されます。
前の仕様に戻したい時は?
この機能が気に入らない場合は、app/Models を削除してください。
上記コマンド実行で、以前のように app 直下に MyModel が生成されます。
Model Factory がクラスになった
Model Facotry は、DB にデータをシーディングするためにあります。
以前は function として定義されていましたが、クラスとして再定義されました。
比べてみよう!
7.x 以前
1use Faker\Generator as Faker;
2
3$factory->define(App\User::class, function (Faker $faker) {
4 static $password;
5 return [
6 'name' => $faker->name,
7 'email' => $faker->unique()->safeEmail,
8 'password' => $password ?: $password = bcrypt('secret'),
9 'remember_token' => str_random(10),
10 ];
11});
8.x
1use App\Models\User;
2use Illuminate\Database\Eloquent\Factories\Factory;
3use Illuminate\Support\Str;
4
5class UserFactory extends Factory
6{
7 protected $model = User::class;
8
9 public function definition()
10 {
11 return [
12 'name' => $this->faker->name,
13 'email' => $this->faker->unique()->safeEmail,
14 'email_verified_at' => now(),
15 'password' => 'rasldjhg125thgnvmasda',
16 'remember_token' => Str::random(10),
17 ];
18 }
19}
7.x 以前は factory ファイルで実装していたため、シーダー以外では使用できませんでした。
しかし、8.x からはクラスベースでの実装となったため、他のファイルでも使用できるようになっています。
新しく Factory を作る
1$ php artisan make:factory MyFactory --model=Hogehuga
レート制限の改善
レート制限とは、アクセス制限のことです。
総当たり攻撃(Brute-force attack)対策や、API を配信している側のサーバー負荷対策などで多く使われています。
こちらも、かなり使いやすくなっていますよ!
比べてみよう!
7.x 以前は、以下のように Route::middleware で設定していました。
1//1分あたり60回アクセスが可能
2Route::middleware('auth:api', 'throttle:60,1')->group(function () {
3 Route::get('/user', function () {
4 //
5 });
6});
8.x
1use Illuminate\Cache\RateLimiting\Limit;
2use Illuminate\Support\Facades\RateLimiter;
3
4RateLimiter::for('global', function (Request $request) {
5 return Limit::perMinute(60);
6});
8.x では「RateLimiter::for」での設定に変更されました。
こちらの方が分かりやすいですね!
route の記述が変更
route の記述も、以下のように変更されました。
1Route::get('/user', [UserController::class, 'index']);
改めて考えてみると、7.x 以前の記述は冗長だったような気もしますね…
ちなみに、ネームスペースさえ付ければ 7.x 以前の指定でも大丈夫です!
.env の変更が php artisan serve 時に自動で読み込まれる
これまでは、php artisan serve でサーバーを実行した場合、.env の変更内容がすぐに反映されないため、手動で再起動する必要がありました。
しかし、今回の変更により、再起動なしで .env の内容を自動で読み取ってくれるようになりました。
git clone で Laravel プロジェクトの動作確認をする場合など、大いに役立ちそうな機能ですね!
さいごに
8.x では Laravel Jetstream を筆頭に、様々な追加や修正が行われています。
今回紹介したもの以外にも、「タイムテストヘルパー」や「動的ブレードコンポーネント」などが実装されています。
みなさんもぜひ、Laravel 8.x にトライしてみてくださいね!
こちらの記事もオススメ!
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
2020.08.14PHP 特集知識編PHPおすすめフレームワーク5選PHPでコードを書くならオススメの統合開発環境「PhpStorm」クラスから理解...
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「好きを仕事にするエンジニア集団」の(株)ライトコードです! ライトコードは、福岡、東京、大阪、名古屋の4拠点で事業展開するIT企業です。 現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。 いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。 システム開発依頼・お見積もり大歓迎! また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」を積極採用中です! インターンや新卒採用も行っております。 以下よりご応募をお待ちしております! https://rightcode.co.jp/recruit