Laravel11の変更点と新機能をご紹介:ファイルが減ってスッキリしました!

Laravelバージョンアップ・ニュース

Laravel10からの変更点と、Laravel11の新機能をお見せしていきます。感想をひとことでまとめると「ファイルが減って、すっきりした!」です。

どうスッキリしたか、一目でお伝えすると、下記のような感じです。以前と比べて、ファイル数が69個ほど減ったとのこと。

【Laravel10とLaravel11の比較】

Laravelの作者Taylor氏によると、

Laravel11の目的は、より無駄なく、よりミニマルに、よりモダンにすること(leaner more minimal more modern feel)

*Laracon EUにて

具体的にどう変わり、どんな新機能が搭載されたのか、お伝えしていきますね。

【動画編はこちら♪ 併せてご覧ください。】

laravel11の変更点・新機能をご紹介:コンセプトはスリム化

Laravel10からの変更点

まずは変更点からお伝えします。わたしが「これはインパクト大きい!」と感じた順番にお伝えしていきます。

Laravel11からはPHP8.2が必要

まず、Laravel11からは、PHPは8.2以上が必要になります。

ちなみにLaravel10では、PHPは8.1以上でOKでした。着々と上がっていますね。

デフォルトのデータベース管理システムがSQLiteに

デフォルトのデータベース管理システムがSQLiteになります。

グローバルコマンドでLaravelをインストールした場合には、最初にデータベース含め、各種設定を選べます。

ただし、ディレクトリ指定でLaravelプロジェクトを新規作成した場合、デフォルトのデータベース管理システムはSQLiteになります。.envファイルのDB_CONNECTIONには、これまでmysqlが設定されていましたが、Laravel11ではsqliteが設定されます。

MariaDBやMySQLなど他のデータベース管理システムを使いたい場合には、修正が必要です。下記記事を参考にしてください。

なお、Laravel Sailを使ってプロジェクトを作ると、これまでどおりMySQLが入ります

Laravel11ではミドルウェアが消えた!!

Laravel11では、色々なファイルが非表示になりましたが、インパクトが大きいものとしては、デフォルトでミドルウェアがなくなった点です。

【app/Http】

これまでapp/Http/Middlewareには、デフォルトで9個のmiddlewareファイルがありました。Laravel11では、フォルダごと、ごっそりmiddlewareが消えています。

でも、安心してください。はいていますよ!

ではなく。。。安心してください。ミドルウェアは使えますよ!

ミドルウェアファイルは、単に、デフォルトで表示されていないだけで、これまでどおり使えます。

なぜミドルウェアを非表示にしたのか。Taylor氏の言葉をまとめると、次のとおりです。

多くのデフォルトのミドルウェア、たとえば、クッキーをencryptするmiddlewareなどは、ユーザーが手をくわえることはほとんどない。それなら、必要な時だけ簡単にカスタマイズできるようにできれば良い。

たしかに、デフォルトのミドルウェアをカスタマイズする必要性って、少ないですよね。非表示にしたほうがスッキリします。

ミドルウェアをどのように登録するかは、下記記事にまとめたのでご覧ください。ミドルウェアを登録する場所も変わり、bootstrap/app.phpになります。

ServiceProviderが5個から1個に

デフォルトのServiceProviderも大幅に減りました。Laravel10ではServiceProviderは5個ありましたが、Laravel11ではAppServiceProvider.php1個のみです。

わりとよく使う印象があるRouteServiceProvider.phpもなくなってしまいました。ただ、RouteServiceProvider.phpにあったコードに相当するものは、bootstrap/app.phpの中に入っています。

【bootstrap/app.php】

routes/api.phpとroutes/channels.php用のルートはデフォルトでは、コメントアウトされています。次項で説明するコマンドを使ってこれらのルートを有効にすると、上記のコメントアウトも外れます。

これまでbootstrap/app.phpはあまり使う機会はありませんでしたが、今後は、利用することが増えそうですね。

なお、これまでGateを登録していたAuthServicePrividerもなくなりましたが、今後は、AppServiceProvider.phpに登録できます。

routesからapiとconsoleが消えている

routesファイルの中もスッキリしました。api.phpとchannels.phpファイルがなくなっています。

【routes】

ただ、コマンドを実行するとすぐに戻せます。api.phpとchannels.phpを有効にするコマンドは、それぞれ下記のとおりです。

【api.php復活コマンド】

【channels.php復活コマンド】

configフォルダも減りました。

configフォルダの中身も15個から10個になりました。hashing.phpやsanctum.phpなどがなくなっています。

編集が必要なときは、vendor:publishコマンドを実行すると、configファイルを作れます。

(コマンド実行後、パブリッシュしたいファイルを選びます)

パブリッシュしたconfigファイルを編集する際には、更新が必要な箇所のみ残しておけば良いようです。特に記載がない場合には、デフォルト値が使われるとのこと。

つまり、コードの量を少なくしておけます。これも、スッキリスリム化のコンセプトに沿っていますね。

マイグレーションファイルもコンパクトに

Laravel11では、マイグレーションファイルもコンパクトになっています。

Laravel10では、usersテーブルなど、デフォルトで4個のマイグレーションファイルが入っていました。

Laravel11では、ひとつのファイルに複数のテーブル作成用のコードが入っています。デフォルトで作成されるテーブルも少し変わっています。

【Laravel11のデフォルトのdatabase/migrations】

【デフォルトで作成されるテーブル】

Consoleもない

app/Consoleもデフォルトではなくなっていました。こちらは、コマンド処理などの際に使いますが、使わないケースも多いため、デフォルトでは非表示になったのだと考えられます。

スケジューリング処理を行い時は、routes/console.phpに直接記述ができます。下記記事を参考にしてください。

Controller.phpLaravel11ではコントローラが何も継承しない

Laravel10では、デフォルトで設定されているApp\Http\Controllers\Controllerクラスには、色々な機能を提供するトレイトが含まれていました。

Laravel11では、この部分がスッキリしています。

【Laravel11のController.php】

Laravel11の新機能

ここまで変更点を見てきました。次に新機能を見ていきます。

変更点より、新機能のほうがワクワクしますね。

Webアプリによって使う可能性がある機能は異なります。今後の開発に何が使えそうか、ざっとご覧になってみてください。

Laravel Reverb: リアルタイム機能をより簡単に実装

リアルタイムの通信が必要なLaravelアプリケーションにおいて、高速かつスケーラブルなWebSocketサービスを提供します。

詳しくは、下記の公式ドキュメントをご覧ください。

Per-Second Rate Limiting:より細かいレートリミットが可能に

以前は、Laravelのレートリミットは、per-minute(1分ごと)までが可能でした。Laravel11からは、per-second(1秒ごと)の設定が可能になります。つまり秒単位でリクエスト数を制限できるようになります。

高頻度でアクセスが行われるAPIや、短時間に多くのリクエストを処理する必要があるアプリケーションに有益な機能です。詳しくは、下記の公式ドキュメントをご覧ください。

Health Routing: ヘルスチェック機能

ドメイン/up を行うと、ヘルスチェック画面が表示されます。

非表示にしたい場合は、bootstrap/app.php内のhealth: ‘/up’ をコメントアウトします。

よりスムーズな暗号化キーのローテーション(交換)機能

アプリケーションの暗号化キーを更新しても、ユーザーがログアウトされることなく、また、以前のキーで暗号化されたデータも復号化できるようになります。

APP_PREVIOUS_KEYS環境変数を通じて、アプリケーションの以前の暗号化キーをカンマ区切りのリストとして定義することができます。

セキュリティを高めるために定期的にキーを更新する必要がある場合に便利です。詳しくは、下記の公式ドキュメントをご覧ください。

プロンプトバリデーション

コマンドラインアプリケーション向けのフォームを簡単に追加できる「Laravel Prompts」というPHPパッケージが導入されました。

コマンドラインインターフェース(CLI)でユーザーフレンドリーなインタラクティブな入力フォームを提供します。

詳しくは、下記の公式ドキュメントをご覧ください。

キューのインタラクションテスト

Laravel 11では、withFakeQueueInteractionsメソッドを使用してキューのインタラクションを簡単にテストできるようになりました。

キューを利用したアプリケーションの信頼性と品質を向上させることができます。詳しくは、下記の公式ドキュメントをご覧ください。

新たなartisanコマンド

クラス、enum、インターフェース、トレイトを新規作成するための新たなコマンドが追加されました。これらのファイルの新規作成が、ちょっと便利になります♪

モデルのcastsが静的プロパティからメソッドに変更

castsは、これまで静的プロパティだったのが、メソッドとなるようです。Laravel10では、Userモデルファイルには、デフォルトで下記のようにcastsが入っていました。

【User.php(Laravel10)】

Laravel11では、次のようにcastsが入っています。

【User.php(Laravel11)】

関数になることで処理の追加などが可能になり、自由度が上がりそうですね。

onceヘルパー:リクエスト中に一度だけ実行される処理の結果をキャッシュ

onceヘルパーは与えられたコールバックを実行し、その結果をリクエストの期間中メモリにキャッシュします。同じコールバックを使用してonce関数を後続で呼び出した場合、以前にキャッシュされた結果が返されます。

同一リクエスト内で同じ結果を複数回取得する必要があるものの、その処理を繰り返し実行することでパフォーマンスが低下することを避けたい場合に便利です。

詳しくは、下記の公式ドキュメントをご覧ください。

メモリ内データベースを使用したテストのパフォーマンス向上

テスト中に:memory: SQLiteデータベースを使用する際のパフォーマンスが大幅に向上しました。

MariaDBのサポート向上

これまではLaravelのMySQLドライバーを通じてMariaDBを使用することができました。Laravel 11では専用のMariaDBドライバーが含まれています。

記事前半でご紹介したとおり、グローバルコマンドでLaravelをインストールした場合には、最初にデータベース含め、各種設定を選べます。MariaDBの選択も可能です。

.envに言語設定追加

.envファイルの中に、言語設定が入っています。

【.env】

configにはこのようになっています。

【config/app.php】

.env側で言語設定があれば、そちらが反映されます。なければconfig側の設定が有効になります。

本記事の主な参考元

今回の記事を書くにあたり、Laravelの公式ドキュメントと、2023年7月と2024年2月のLaravelのカンファレンス(Laracon)におけるTaylor Otwell氏(Laravelの生みの親)による講演の動画を参考にしました。

さらに自身の環境で検証を行った結果を記事にしました。

動画を通じて、なぜこのようなスリム化に至ったのか等、Laravelのコンセプトを感じ取れます。

ご興味あれば、下記、ご視聴ください。見ごたえあります。ただ結構長い動画なので、お時間があるときに見てくださいね。

【2023年7月Laracon】

Taylor Otwell "Laravel Herd, Laravel 11, Laravel Folio, Laravel Volt" – Laracon US 2023 Nashville

【2024年2月Laracon】

LARACON EU 2024 // TAYLOR OTWELL :: LARAVEL UPDATE

なお2023年7月の動画では、Laravel FolioやLaravel Voltといった新しいライブラリの紹介もありました。これらも、なかなか便利な機能です。別記事にまとめているので、ご興味あれば、併せて参考にしてください。

【Laravel Folio】ルーティングが不要になる機能です。

【Laravel Volt】Vue.jsのように、Livewireのコードを1つのファイルに集約できます。

使ってみましたが、両方とも、コードやファイルの量を減らせる便利な機能です。特に、Laravel Voltは気に入りました♪

さいごに

Laravel11は、ひとことでいうと、Taylor氏の狙いどおり「スッキリ★スリム化」が実現されたなぁ、という印象です。

デフォルトの設定を変える機会が少ないファイルは非表示になり、見やすくなった気がします。ただ、最初は慣れるのが大変ですね^^;

なお、わたしのほうではLaravel学習サイトも運営しております。学習サイトは、Laravelの基本の使い方を学びつつ、フォーラムサイトを作っていける実践的な内容です。

学習サイトでは、最新のLaravel11版のテキストもご用意しています^^

基礎編は無料です。ご興味あれば、下記をクリックして案内ページを見てみてくださいね。

Laravelの教科書について詳しく知る

*学習サイトではLaravel8, Laravel9, Laravel10のテキストもご覧になれます。

Laravelバージョンアップ・ニュース

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel11版テキストに加え、Laravel8版・Laravel9版・Laravel10版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel11版テキストに加え、Laravel8版・Laravel9版・Laravel10版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

最新版Laravel11用のサポートガイドご用意しています。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる
Twitter始めました。
40代からプログラミング!

コメント

  1. 黒澤勝 より:

    Laravel11、色々と非表示になったんですね。むしろLaravelを使う人ってミドルウェアだったり、apiだったりを使う人じゃないのかな?と感じてしまいます。なんとなくブログ作るとかなら、Laravelではなく、安直にWordPressでいいのではないかと思ったりです。PHP教育のためにたまに読んでいるので記事ありがとうございます。

    • Junko Junko より:

      そうですよね。
      分かりやすさと、カスタマイズのしやすさ、両方のバランスをとるのは難しそうですが。
      コメントありがとうございます^^

タイトルとURLをコピーしました