Laravel10リリース!新機能・変更点・注意点10個ご紹介

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

Laravel10が2023年2月14日にリリースしました!いち早くインストールして使ってみました。

新機能・変更点をご紹介します。

「新しいLaravel情報を知りたい♪」

と思っていたら、参考にしてくださいね。

Laravel10の新機能・変更点10個ご紹介

それでは早速初めていきましょう。

なお わたしの判断で、「使う人全員に影響がありそう」と思ったものは、★を多くつけています。

★マークが多い順に、ご紹介してきますね。

★マークが少ない新機能も、人によっては、めちゃくちゃ重要だと思います。

Laravel10はPHP8.1以上が必要 【重要度★★★】

まず大事な点として、Laravel10を入れるには、PHP8.1以上が必要です。もし今の環境にPHP8.1がない場合には、Laravel10を入れる前に準備しておきましょう。

Junko
Junko

ちなみに、Laravel9ではPHPは8.0以上でOKでした。

複数バージョンのXamppをひとつのPCで使う方法は、こちらの記事で紹介しています。

Laravel Sailの場合には、プロジェクトを作成した際、Laravel10に対応したPHPバージョンが自動で設定されました。なので、このあたりは気にしなくて良さそうです。

もしLaravel SailでプロジェクトのPHPバージョンを変更したい場合には、下記をご覧ください。

ひな形ファイルに型宣言が追加【重要度★★】

Laravel10では、すべてのスケルトンコード(ひな形ファイル)の引数と戻り値に、PHPの型宣言が追加されます。

void型が入っている例

なお当初は、モデルやリソースコントローラを作成した時に、コントローラに戻り値の型が入った状態で作成されました。

ですがLaravel10.1からは、この戻り値の型指定がなくなりました。これまでどおり、戻り値の型指定なしでコントローラを作成できます。この変更については、下記公式記事ご覧ください。

何故変わったの!?と、事の顛末を知りたい方は、下記記事の「追伸」を見てみてくださいね。

色々と意見があったようで、結局なくなったようですね。

Makeコマンドにおせっかい機能が搭載【重要度★★】

Laravel10では、makeコマンドを実行してモデルやコントローラを作成する際、名前を入れ忘れても安心な機能が追加されています。

たとえば、TestControllerという名前のコントローラを作成しようとして、うっかりコントローラ名を入れ忘れて、次のコマンドを入力したとします。

するとすかさず 、What should the controller be named?(コントローラの名前はどうしましょうか?)と聞いてくれます。

コントローラー名を入力すると、さらに Which type of controller would you like?(どんなタイプのコントローラーにします?)と聞かれます。この段階で、リソースコントローラを指定することができます。

【コントローラ名を入れずにコントローラを作成した時の質問】

ちなみにモデル名を入れ忘れたときにも、同じように、What should the model be named?(モデル名はどうしましょうか?)と聞いてくれます。

モデル名を入力すると、次に Would you like any of the following?(下記のいずれかをお付けしますか?)と聞かれます。この段階で、マイグレーションファイルを作ったり、ファクトリーを作ったり等、色々なことができます。

【モデル名を入れずにモデルを作成した時の質問】

なかなかのおせっかいぶりですね。

Invokableバリデーションルールがデフォルトに【重要度★★】

Laravelでは、バリデーションルールを自分で作ることもできます。

その際、Laravel9では、ルール作成コマンドに --invokable を付けることで、作成されたファイルに __invokeメソッドを入れることができました。

Laravel10では、オプションを付けずにルール作成コマンドを実行すると、デフォルトで --invokable が反映された状態でルールが作られます。

【ルール作成用コマンド】

【作成されたtestルールファイルの __invokeメソッド】

__invokeメソッドは、属性名、値、バリデーションエラー時に呼び出されるコールバックの3つの引数を受取ります。

Processファサードの追加【重要度★★】

Laravel10では、コマンドを実行して、実行後の結果を取得できるProcessファサードが追加されました。

例をお見せしますね。

使用するコードファイルの上部に、下記のUse宣言を入れておきます。

コントローラのメソッド内などに、下記のようなコードを記述することで実行することができます。下記コードではメソッド名をtest としています。

ブラウザに該当のページを表示すると、下記のように、今いるディレクトリにあるファイル・ディレクトリ(フォルダ)が表示されます。

Processを使うことで、サーバーのコマンドをLaravel内で実行できます。これによって、例えばサーバーの状態を管理画面に表示させたり、データベースのバックアップを取ったりする機能をWebアプリに搭載できます。

これまでもPHPの関数を使って実現できましたが、より便利になりそうですね。

なお上記では、$result->output() としましたが、他にも、下記のようなメソッドが使えます。

詳細は、Processに関する文書を参照してください。

Laravel Pennant【重要度 ★★】

Laravel Pennantを使えば、条件に合ったユーザーにだけ、機能を有効にしたりできます。

「新機能を、まずは限られたユーザーにだけ、段階的に展開していきたい」「A/Bテストを実施したい」といった時に役立ちます。

例をお見せします。

AppServiceProvider.phpに次のように[beta-tester]という名前で、Featureを定義します。

ユーザーモデルファイルには、下記のように、isBetaTesterメソッドを定義しておきます。とりあえず今回は、ユーザーIDが1のユーザーであれば、trueを返すようにしておきます。

コントローラ等に、[beta-tester]に該当するユーザーにのみ行いたい処理を書きます。これによって、ユーザーIDが1のユーザーにのみ、処理が実行されます。

なかなか便利そうですよね。

上記はシンプルな例となります。詳細については、Laravel Pennantの説明ページをご覧ください。

ちなみにPennant(ペナント)は、旗(フラグ)という意味です。

フラグを立てる条件を設定できるので、この名前になったのかなと思います。

Testにprofileオプション追加【重要度★★】

Laravelは、PHPのテスト用フレームワークPHPUnitをサポートしています。下記のコマンドを実行すると、テストを実行できます。

実行されるテストは、testsディレクトリの中に入っています。テストの内容は自分で作成できますが、ここではテスト作成手順は省略します。

Laravel10では、このテスト実行時に --profile  を追加することで、最も処理が遅いテストが明示されるようになりました。

これによって、重くなりそうな処理を事前に確認することができそうです。

パスワード作成【重要度★★】

指定した長さで、ランダムなパスワードを生成するメソッドが追加されました。 Str::password(); とすると、32文字のパスワードを生成できます。

文字数を指定したい場合には、 Str::password(12); といった形で数字をいれます。パスワードは文字・数字・記号・スペースで生成されます。

【パスワード例】

HorizonとTelescopeのデザインが変わった【重要度★】

こちらは、さほど大事ではなさそうですが、HorizonとTelescopeの外見が変わりました。

Laravel9での非推奨メソッドを除外【重要度★】

なお、Laravel9で非推奨とされたメソッドは、Laravel10で除外されます。

該当するメソッドは、下記記事の「Deprecations from Laravel 9」を参照してください。

リリースノートに掲載されていなかった変更点

こちら、現在のところ公式のリリースノートにない変更点となります。大事だったり、便利そうだったりしたので、掲載しておきます。もし変更点があれば追記します。

Langディレクトリがデフォルトで存在しない

Laravel10では、言語ファイルを入れるLangディレクトリがデフォルトで存在しません。日本語化するなら、プロジェクト直下にLangディレクトリを作成しましょう。

下記コマンドを実行します。

日本語化の手順を詳しく知りたい場合は、下記の記事をご覧ください。

Pestテストがプロジェクト作成時から利用可能に

Pestは、phpUnitと同様、PHPのテスト用フレームワークです。

Laravel10からは、Laravelのプロジェクト作成時に、 --pest   を追加することで、プロジェクト内でPestが使えるようになるようです。

カラムの型変更時などに、doctrine/dbalパッケージが不要に

これまで、カラムの型や名前を変更する際に doctrine/dbalパッケージが必要でした。パッケージを入れずに処理を行おうとすると、マイグレート実行時にエラーになりました。

Laravel10では、パッケージなしでも処理が行えるようになります。

Junko
Junko

ちょっぴり便利になります♪

Laravel9のサポートはいつまで?

Laravel10が出た後も、Laravel9のサポートは継続して行われます。

現在のところ、Laravel9のバグフィックスは2023年8月8日まで、セキュリティフィックスは2024年2月14日の予定となっています。

でも普段から、ちょこちょこ新機能は追加されてます

なおLaravelは、大きなバージョンアップ以外でも、ちょこちょこ新機能が搭載されています。

最近気づいた点としては、Laravel Breezeパッケージを入れると、これまであったエラー表示用のコンポーネントファイルが変更されていたりしました。

また、同じくLaravel Breezeパッケージについてですが、プロフィールページがデフォルトで搭載されるようになりました。

右上の【Profile】メニューをクリックすると、プロフィールページを表示できます。

さらっと変わっていますが、最初見たときは「あれっ!」と思いました。わりとインパクトのある変更ですよね。

Laravelは日々進化をしているので、久しぶりに使ってみると「こんなのあったっけ?」と感じられるかもしれません。

さいごに

色々と変更点や新機能ありましたがいかがでしょうか?

わたしの印象としては、型指定が追加されたり、テスト関連の機能が増えたりしていることから、不具合が出にくく、バグを事前に減らせる開発環境になっていっていると感じます。

なお、わたしのほうでは、ソシムさんからLaravel10に対応した本を出版しました。

「Laravel10に対応した教本で、基本からLaravelの使い方を学んでおきたい」と思ったら、こちらお役立てください。

なお現在の最新版はLaravel11です。Laravel11に対応した書籍のサポートガイドご用意しています。書籍に関する詳細はこちらご覧ください。

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

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

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

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

【無料プレゼント】

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

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

詳細はこちらをクリック

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

【AWS関連・Webアプリ開発・生成AIのAPI活用のご相談承ってます】
お気軽にお声がけください。
御社にとって、最善の方法をご一緒に考えてまいります。
Zoomミーティング実施中。サンプルアプリご利用可能です。

お問合せフォーム

Laravelの本を書きました。


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

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

書籍の詳細を見てみる

Laravelの本を書きました。


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

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

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

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

コメント

  1. anonymous より:

    「Invocable」「invokable」表記がありますが、どっちか間違ってますよね。
    イラストの「終了レベル」は「修了レベル」ではないかと……

    • Junko Junko より:

      イラストはどこなのか分かりませんでしたが、スペルミスは修正しました。
      ありがとうございます。

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