LaravelはPHPによるWebアプリケーションフレームワークとして非常に広く利用されています。
私が初めて利用したLaravelは5系です。
それから時間がたち現在はLaravel11系が最新となります。
今回Laravel6以降のメジャーバージョンアップ毎の新機能や変更点について調べてましたので記事にしていきたいと思います。
本記事ではLaravel6で導入された新機能や変更点についてメジャーな機能を中心に整理していきます。
主要な新機能・変更点
バージョニング方式の変更
Laravel5系まではバージョンアップによる大きな機能変更が行われるたびにメジャーバージョンが上がっていましたが、Laravel6からは「セマンティックバージョニング」という方式に従うようになりました。
セマンティックバージョニングとは、バージョン番号(Major.Minor.Patch)のうち、機能の互換性が保たれない大幅変更時にはMajorを上げ、互換性は保ちつつ新機能追加時にはMinorを上げ、バグフィックスなど小さな変更ではPatchを上げるといった、より規則的なバージョン管理手法です。
これにより、将来のバージョンアップ計画が立てやすくなり、依存ライブラリとの整合性チェックもしやすくなりました。
LTS(Long Term Support)バージョンの位置づけ
Laravel5.5はLTSバージョンとして長期サポートが提供されましたが、Laravel6もLTSとして位置づけられています。
これにより、Laravel6を選ぶことで、一定期間はバグ修正やセキュリティパッチが提供されるため、長期的な運用を考えるプロジェクトには安定的な基盤となります。
Laravel5から6への移行を機に、LTSバージョンを利用して安定性を確保するのは一つの有力な選択肢となります。
認証(Authentication)スキャフォールドの変更
Laravel5までは、php artisan make:auth
コマンド一発で認証用のビューやコントローラなどが生成できましたが、Laravel6ではこれがコアパッケージから分離されました。
代わりにlaravel/ui
という公式パッケージを利用して、認証機能のテンプレートを追加するスタイルに変わっています。
これはLaravel本体から不要な機能を外部パッケージ化することで、フレームワークをよりシンプルに保つための方針です。
以下にLaravel6での認証スキャフォールド追加手順を例示します。
Laravel5系の認証生成例
# Laravel5.x系では以下で認証ビュー・コントローラを一括生成
php artisan make:auth
Laravel6系での認証生成例
# Laravel6ではlaravel/uiパッケージが必要
composer require laravel/ui
# 認証用UIを生成するコマンドを実行
php artisan ui vue --auth
# または
php artisan ui react --auth
# これでresources/views配下に認証用のビューが、routes/web.phpにルートが用意されます。
Bladeコンポーネントやスロットの改良
Laravel6ではBlade(テンプレートエンジン)周りの機能も拡張されています。
コンポーネントをより簡潔に記述できるようになり、x-
プレフィックスを用いたコンポーネント呼び出しが可能になりました。
これにより、ビュー層での再利用性が高まり、保守性や可読性が向上します。
簡単な例を挙げます。
Laravel6からは以下のようなコンポーネント呼び出しが可能です。
Bladeコンポーネント例(Laravel6)
<!-- resources/views/components/alert.blade.php -->
<div class="alert alert-{{ $type }}">
{{ $slot }}
</div>
<!-- 使用例 -->
<x-alert type="warning">
ここに警告メッセージが入ります。
</x-alert>
このように<x-alert>
タグでコンポーネントを呼び出せるため、読みやすく、変更もしやすくなります。
Laravel5でもBladeコンポーネントは使えましたが、6ではより直感的な記述が可能です。
コレクション関連機能の強化(Lazy Collection)
Laravel6では「Lazy Collection」という新機能が追加されました。
これは大量のデータセットをストリーム的に処理できる仕組みで、メモリ消費を抑えながら大規模なコレクションを扱うことが可能です。
たとえば、巨大なCSVファイルを逐次読み込みしつつ処理したり、メモリを逼迫させずにデータをフィルタしたりできます。
以下はLazy Collectionの簡単な使用例です。
use Illuminate\Support\LazyCollection;
// 大量の行が含まれるCSVファイルを行ごとに処理
LazyCollection::make(function () {
$handle = fopen('data.csv', 'r');
while (($line = fgetcsv($handle)) !== false) {
yield $line;
}
fclose($handle);
})
->filter(function ($line) {
return $line[0] !== 'header'; // ヘッダ行を除外
})
->each(function ($line) {
// ここで行単位の処理を行う
// メモリを過剰に消費せずに順次処理が可能
});
Laravel5系でもコレクションは便利でしたが、巨大なデータを扱う際に一度に全てロードする必要がありました。
Laravel6のLazy Collectionを使うことで、扱いづらかった大規模データ処理がよりスマートになります。
上記以外での主な新機能・変更点
Ignition エラーページ
- 新しいデフォルトエラーページとして Ignition を導入。
- 視覚的に分かりやすく、デバッグを簡単にするツール。
Job Middleware
- ジョブに対するミドルウェアのサポートを追加。
- ジョブの前後処理を簡潔に記述可能。
Eloquent Subquery Enhancements
- サブクエリのサポートを強化。
- サブクエリを SELECT や ORDER BY に簡単に追加可能。
HTTP Client
Http::get()
,Http::post()
などを提供する HTTP クライアントライブラリを追加。- Guzzle をラップして使いやすいインターフェースを提供。
Eloquent Lazy Loading Prevention
- 不要な「遅延ローディング」を検出する仕組みを追加。
- パフォーマンス問題の早期発見が可能。
Database Migration Improvements
--path
オプションのサポート拡張。- 複数のディレクトリからのマイグレーションロードが可能。
Improved Authorization Responses
- カスタムの拒否メッセージを認可ポリシーで簡単に設定可能。
Carbon 2 サポート
- Carbon 2 をデフォルトで採用し、互換性を確保。
- マルチロケールや多言語対応が強化。
Redis サポートの更新
phpredis
拡張のサポートを改善。- Redis ドライバの動作がより効率的になった。
Artisan コマンド改善
- 新しいフラグやオプションが追加。
Laravel5からLaravel6への主な変更点
- バージョニング方式がセマンティックバージョニングに変わり、将来的なアップデート計画が立てやすくなった。
- LTSバージョンとしてLaravel6が提供され、長期的な安定運用が期待できる。
- 認証スキャフォールドがコアから分離され、
laravel/ui
パッケージとして外部提供されるようになった。 - Bladeコンポーネント記法が改善され、ビューコードがよりシンプルで読みやすくなった。
- Lazy Collectionを使うことで、大規模データ処理がメモリ効率良く行えるようになった。
まとめ
Laravel6の振り返りを通じて、フレームワークが少しずつ進化していることを実感できました。
過去からの積み重ねで今のLaravelがあるので本当に感謝です。