こんにちは、かつコーチです。
2020年9月にLaravel8がリリースされました。
少し時間が経っていますが、これまでのLaravel7と何が変わったのかをご紹介します。
モデルファクトリの改良
Laravel 8では、Eloquentモデルのファクトリが大幅に改善され、
クラスベースのファクトリとして再設計されました。
これにより、従来のクロージャベースのファクトリよりも柔軟で、
データ生成がより直感的になりました。
変更点:
- モデルファクトリが従来の形式からクラスベースに変更され、ファクトリの定義がオブジェクト指向的になった。
- ファクトリステート、関係モデルのファクトリの呼び出しが簡潔化。
// ファクトリの生成
php artisan make:factory UserFactory --model=User
// ファクトリの利用
use App\Models\User;
User::factory()->count(10)->create();
Laravel Jetstream
Laravel 8では、従来の「Laravel UI」の代わりに
「Laravel Jetstream」という強力な新しい認証スキャフォールディングが導入されました。
Jetstreamは、ユーザー認証、メール認証、二段階認証、
APIトークン、チーム管理など、多機能な認証システムを提供します。
変更点:
- Jetstreamが新たに導入され、認証スキャフォールディングがよりモダンに。
- Jetstreamでは、LivewireとInertia.jsのサポートを組み込んでおり、フロントエンド開発がより簡単に。
composer require laravel/jetstream
php artisan jetstream:install livewire
php artisan migrate
動的ディスカバリ(Dynamic Component Registration)
Laravel 8では、Bladeコンポーネントが自動的にディスカバリされるようになり、
Bladeファイルの場所を特別に指定することなく利用可能になりました。
この機能により、Bladeコンポーネントの宣言と使用がシンプルになり、
開発者の負担が軽減されました。
変更点:
- Bladeコンポーネントの動的登録が導入され、コンポーネントの設定がシンプルになった。
x-
ディレクティブを使って簡単にコンポーネントを使用できる。
<x-alert type="success" />
モデルディレクトリのサポート
Laravel 8では、従来のようにapp/
フォルダにモデルを格納する必要がなくなり、
app/Models
ディレクトリを標準として使用する構造が導入されました。
これにより、アプリケーションの構造がより整理され、
特に大規模なプロジェクトでの管理が容易になりました。
変更点:
- デフォルトで
app/Models
ディレクトリが使用され、モデルを分かりやすく配置。 - 自分でモデルディレクトリを作成する手間が省かれた。
ジョブのバッチ処理に対するプログレスバー
Laravel 8では、ジョブバッチの進行状況を簡単に追跡できるプログレスバーが追加されました。
ジョブバッチの進捗状況をリアルタイムで表示することで、
長時間実行されるジョブの進行状況を可視化できるようになりました。
変更点:
- バッチ処理の進行状況が容易に追跡できるように。
- プログレスバーが追加され、ジョブの状態をより詳細に管理できる。
Bus::batch([
new ProcessPodcast,
new ReleasePodcast
])->then(function (Batch $batch) {
// 全ジョブが成功したときの処理
})->catch(function (Batch $batch, Throwable $e) {
// ジョブが失敗したときの処理
})->dispatch();
時間ベースのジョブチェーン
Laravel 8では、新たに時間ベースのジョブチェーン処理がサポートされました。
この機能により、特定の時間が経過した後にジョブが
自動的に実行されるようにスケジュールできるようになりました。
変更点:
- ジョブチェーンに時間指定が可能になり、より柔軟なジョブ管理が可能。
- 特定のタイミングで処理を実行できるようになった。
ProcessPodcast::dispatch()->delay(now()->addMinutes(10));
ルートキャストの強化
Laravel 8では、ルートパラメータに対するカスタムキャストが強化されました。
これにより、ルートパラメータを取得する際にカスタムロジックでバインドや変換が可能になりました。
変更点:
- カスタムキャストによるパラメータの処理が柔軟になり、開発者がルートパラメータを簡単に操作可能。
Route::get('/posts/{post:slug}', function (App\Models\Post $post) {
return $post;
});
Artisan Serve コマンドの強化
artisan serve
コマンドが強化され、アプリケーションのリスタートやポートの管理が改善されました。
これにより、開発サーバーを動的に管理できるようになり、開発体験が向上しています。
変更点:
- Artisanサーバーのリスタート機能が改善され、開発者がポート番号やリクエストの処理をより柔軟に管理可能に。
php artisan serve --port=8001
ジョブ失敗後のリトライの改善
Laravel 8では、ジョブが失敗した際のリトライ処理がより柔軟に設定できるようになりました。
これにより、ジョブが失敗した場合のリトライ間隔やリトライ回数を制御しやすくなりました。
変更点:
- 失敗したジョブのリトライが柔軟に設定可能。
- リトライロジックが詳細に管理できるようになり、ジョブの信頼性が向上。
class ProcessPodcast implements ShouldQueue
{
public function backoff()
{
return [10, 30, 60];
}
}
Job Middleware
ジョブに対してミドルウェアを設定できる新機能が追加されました。
これにより、ジョブの実行前に特定の処理を実行したり、
ジョブをフィルタリングするロジックを共通化できるようになりました。
変更点:
- ジョブに対するミドルウェアを定義でき、再利用可能なフィルタリングロジックを作成可能。
public function middleware()
{
return [new WithoutOverlapping];
}
まとめ
Laravel 8では、以下の点が強化されました:
- モデルファクトリの大幅な改良やJetstreamの導入により、認証やデータ生成がより強力に。
- ジョブやタスクの管理に対する機能が拡張され、パフォーマンスや開発効率が向上。
- Bladeコンポーネントやルーティングキャストなどの機能が強化され、開発者の負担を軽減しつつ、アプリケーションの品質向上に貢献。
Laravel 8は、開発の生産性とアプリケーションの柔軟性を高める重要なアップデートです。