Laravel 8 Release !

![ScreenShot 2020-09-09 1.06.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52879/74f2f9b3-8e44-99a6-25d4-359d684eb2c3.png)

![ScreenShot 2020-09-12 4.16.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52879/afff027a-418f-f630-5ab9-f09b8538cdc1.png)

2020年9月8日 Laravel 8 がリリースされました🙌
Welcome画面はダークモードとライトモードで雰囲気変わりますね🥰

Laravel Jetstream、モデルディレクトリ、モデルファクトリー、マイグレーションスカッシング、レート制限の改善、時間テストヘルパー、動的ブレードコンポーネント等多くの新機能が追加されています。
Laravel 8 はLTSではありません。バグ修正は2021年3月8日、セキュリティ修正は2021年7月8日までのサポートになるのでご注意ください。

# Laravel 8 の新機能

https://laravel-news.com/laravel8

(ニュース記事の内容をほぼグーグル翻訳したものです。)

## Laravel Jetstream

https://github.com/laravel/jetstream

[Laravel Jetstreamは、以前のバージョンにあった既存のLaravel UIスカフォールドを改善します。
ログイン、登録、メール検証、2要素認証、セッション管理、LaravelによるAPIサポート、チーム管理など、新しいプロジェクトの出発点となります。

- [Docker × Laravel 8 Jetstream でログイン、ユーザー登録、2要素認証を実装する](https://qiita.com/ucan-lab/items/7824d1293fef4698c212)

## モデルディレクトリ

Laravel 8のアプリケーションのデフォルトでは `app/Models` ディレクトリが含まれています。
すべてのジェネレータコマンドは、モデルが `app/Models` に存在することを前提としています。
ただし、`app/Models` ディレクトリが存在しない場合は、`app` ディレクトリ内にモデルを保持していると想定します。

## モデルファクトリクラス

Eloquentモデルファクトリは、Laravel 8からクラスベースになり、ファクトリ間の関係のサポートが改善されました。
新しく改善されたモデルファクトリを介してレコードを生成するための新しい構文がいかに素晴らしいかについて、あなたは賛同するでしょう。

```php
use App\Models\User;

User::factory()->count(50)->create();

// using a model state "suspended" defined within the factory class
User::factory()->count(5)->suspended()->create();
```

- [Laravel8で完成されたModelFactoryの使い方](https://qiita.com/ucan-lab/items/788d1a603f2b53ebb999)

## マイグレーションスカッシュ

アプリケーションに多くのマイグレーションファイルが含まれている場合は、それらを1つのSQLファイルに圧縮できます。
このファイルは、マイグレーションの実行時に最初に実行され、その後、残りのマイグレーションファイルが実行されます。
既存のマイグレーションを圧縮することで、マイグレーションファイルの膨張を減らし、テスト実行中のパフォーマンスを向上させることができます。

- [Laravel 8 の新機能！マイグレーションスカッシングで肥大化したマイグレーションファイルを1つにまとめる](https://qiita.com/ucan-lab/items/2f00191dcf8371347d13)

## レート制限の改善

Laravel 8は、既存のスロットルミドルウェアとの下位互換性をサポートし、はるかに高い柔軟性を提供しながら既存のレート制限機能を改善します。
Laravel 8には、ファサードを介して定義できるレートリミッターの概念があります。

```php
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;

RateLimiter::for('global', function (Request $request) {
    return Limit::perMinute(1000);
});
```

ご覧のとおり、この`for()`メソッドはHTTPリクエストインスタンスを取得するため、リクエストを動的に制限することを完全に制御できます。

## 時間テストヘルパー

Laravelユーザーは、優れたCarbon PHPライブラリを介して、時間の変更を完全に制御できました。Laravel 8は、テスト内の時間を操作するための便利なテストヘルパーを提供することで、この一歩をさらに前進させます。

[Laravel8の新機能！時間テストヘルパー(タイムトラベル)を使ってみた！](https://qiita.com/ucan-lab/items/e983fec6897d85381c20)

```php
// Travel into the future...
$this->travel(5)->milliseconds();
$this->travel(5)->seconds();
$this->travel(5)->minutes();
$this->travel(5)->hours();
$this->travel(5)->days();
$this->travel(5)->weeks();
$this->travel(5)->years();

// Travel into the past...
$this->travel(-5)->hours();

// Travel to an exact time...
$this->travelTo(now()->subHours(6));

// Return back to the present time...
$this->travelBack();
```

これらの方法を使用すると、各テストの間に時間がリセットされます。

## 動的ブレードコンポーネント

実行時にブレードコンポーネントを動的にレンダリングする必要がある場合があります。
Laravel 8には、`<x-dynamic-component/>`コンポーネントをレンダリングするための用意がされています。

```
<x-dynamic-component :component="$componentName" class="mt-4" />
```

## Laravel 8の詳細

これらはLaravel 8の新機能のほんの一部であり、完全なリストを確認するには、Laravel 8リリースノートとアップグレードガイドを確認してください。また、簡単な更新方法が必要な場合は、Laravel Shiftを忘れないでください。

- [Laravel 8 Release Notes](https://laravel.com/docs/8.x/releases#laravel-8)
- [Laravel 8 Upgrade Guide](https://laravel.com/docs/8.x/upgrade)
- [Laravel SHIFT](https://laravelshift.com)