Laravel10が2023年2月14日にリリースしました!いち早くインストールして使ってみました。
新機能・変更点をご紹介します。
「新しいLaravel情報を知りたい♪」
と思っていたら、参考にしてくださいね。
Laravel10の新機能・変更点10個ご紹介
それでは早速初めていきましょう。
なお わたしの判断で、「使う人全員に影響がありそう」と思ったものは、★を多くつけています。
★マークが多い順に、ご紹介してきますね。
★マークが少ない新機能も、人によっては、めちゃくちゃ重要だと思います。
Laravel10はPHP8.1以上が必要 【重要度★★★】
まず大事な点として、Laravel10を入れるには、PHP8.1以上が必要です。もし今の環境にPHP8.1がない場合には、Laravel10を入れる前に準備しておきましょう。
ちなみに、Laravel9ではPHPは8.0以上でOKでした。
複数バージョンのXamppをひとつのPCで使う方法は、こちらの記事で紹介しています。
Laravel Sailの場合には、プロジェクトを作成した際、Laravel10に対応したPHPバージョンが自動で設定されました。なので、このあたりは気にしなくて良さそうです。
もしLaravel SailでプロジェクトのPHPバージョンを変更したい場合には、下記をご覧ください。
ひな形ファイルに型宣言が追加【重要度★★】
Laravel10では、すべてのスケルトンコード(ひな形ファイル)の引数と戻り値に、PHPの型宣言が追加されます。
なお当初は、モデルやリソースコントローラを作成した時に、コントローラに戻り値の型が入った状態で作成されました。
ですがLaravel10.1からは、この戻り値の型指定がなくなりました。これまでどおり、戻り値の型指定なしでコントローラを作成できます。この変更については、下記公式記事ご覧ください。
何故変わったの!?と、事の顛末を知りたい方は、下記記事の「追伸」を見てみてくださいね。
色々と意見があったようで、結局なくなったようですね。
Makeコマンドにおせっかい機能が搭載【重要度★★】
Laravel10では、makeコマンドを実行してモデルやコントローラを作成する際、名前を入れ忘れても安心な機能が追加されています。
たとえば、TestControllerという名前のコントローラを作成しようとして、うっかりコントローラ名を入れ忘れて、次のコマンドを入力したとします。
1 |
php artisan make:controller |
するとすかさず 、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 が反映された状態でルールが作られます。
【ルール作成用コマンド】
1 |
php artisan make:rule test |
【作成されたtestルールファイルの __invokeメソッド】
1 2 3 4 |
public function __invoke($attribute, $value, $fail) { // } |
__invokeメソッドは、属性名、値、バリデーションエラー時に呼び出されるコールバックの3つの引数を受取ります。
Processファサードの追加【重要度★★】
Laravel10では、コマンドを実行して、実行後の結果を取得できるProcessファサードが追加されました。
例をお見せしますね。
使用するコードファイルの上部に、下記のUse宣言を入れておきます。
1 |
use Illuminate\Support\Facades\Process; |
コントローラのメソッド内などに、下記のようなコードを記述することで実行することができます。下記コードではメソッド名をtest としています。
1 2 3 4 |
public function test() { $result = Process::path(__DIR__)->run('ls -la'); dd($result->outPut()); } |
ブラウザに該当のページを表示すると、下記のように、今いるディレクトリにあるファイル・ディレクトリ(フォルダ)が表示されます。
Processを使うことで、サーバーのコマンドをLaravel内で実行できます。これによって、例えばサーバーの状態を管理画面に表示させたり、データベースのバックアップを取ったりする機能をWebアプリに搭載できます。
これまでもPHPの関数を使って実現できましたが、より便利になりそうですね。
なお上記では、$result->output() としましたが、他にも、下記のようなメソッドが使えます。
1 2 3 4 5 6 7 |
$result->successful(); $result->failed(); $result->exitCode(); $result->output(); $result->errorOutput(); $result->throw(); $result->throwIf($condition); |
詳細は、Processに関する文書を参照してください。
Laravel Pennant【重要度 ★★】
Laravel Pennantを使えば、条件に合ったユーザーにだけ、機能を有効にしたりできます。
「新機能を、まずは限られたユーザーにだけ、段階的に展開していきたい」「A/Bテストを実施したい」といった時に役立ちます。
例をお見せします。
AppServiceProvider.phpに次のように[beta-tester]という名前で、Featureを定義します。
1 2 3 4 5 6 7 |
public function boot(): void { Feature::define('beta-testers', fn (User $user) => match (true) { $user->isBetaTester() => true, default => false, }); } |
ユーザーモデルファイルには、下記のように、isBetaTesterメソッドを定義しておきます。とりあえず今回は、ユーザーIDが1のユーザーであれば、trueを返すようにしておきます。
1 2 3 4 5 |
public function isBetaTester() { if(auth()->user()->id===1) { return true; } } |
コントローラ等に、[beta-tester]に該当するユーザーにのみ行いたい処理を書きます。これによって、ユーザーIDが1のユーザーにのみ、処理が実行されます。
1 2 3 |
if (Feature::active('beta-testers')) { // 処理 } |
なかなか便利そうですよね。
上記はシンプルな例となります。詳細については、Laravel Pennantの説明ページをご覧ください。
ちなみにPennant(ペナント)は、旗(フラグ)という意味です。
フラグを立てる条件を設定できるので、この名前になったのかなと思います。
Testにprofileオプション追加【重要度★★】
Laravelは、PHPのテスト用フレームワークPHPUnitをサポートしています。下記のコマンドを実行すると、テストを実行できます。
1 |
php artisan test |
実行されるテストは、testsディレクトリの中に入っています。テストの内容は自分で作成できますが、ここではテスト作成手順は省略します。
Laravel10では、このテスト実行時に --profile を追加することで、最も処理が遅いテストが明示されるようになりました。
1 |
php artisan test --profile |
これによって、重くなりそうな処理を事前に確認することができそうです。
パスワード作成【重要度★★】
指定した長さで、ランダムなパスワードを生成するメソッドが追加されました。 Str::password(); とすると、32文字のパスワードを生成できます。
1 2 3 |
use Illuminate\Support\Str; $password = Str::password(); |
文字数を指定したい場合には、 Str::password(12); といった形で数字をいれます。パスワードは文字・数字・記号・スペースで生成されます。
【パスワード例】
HorizonとTelescopeのデザインが変わった【重要度★】
こちらは、さほど大事ではなさそうですが、HorizonとTelescopeの外見が変わりました。
Laravel9での非推奨メソッドを除外【重要度★】
なお、Laravel9で非推奨とされたメソッドは、Laravel10で除外されます。
該当するメソッドは、下記記事の「Deprecations from Laravel 9」を参照してください。
リリースノートに掲載されていなかった変更点
こちら、現在のところ公式のリリースノートにない変更点となります。大事だったり、便利そうだったりしたので、掲載しておきます。もし変更点があれば追記します。
Langディレクトリがデフォルトで存在しない
Laravel10では、言語ファイルを入れるLangディレクトリがデフォルトで存在しません。日本語化するなら、プロジェクト直下にLangディレクトリを作成しましょう。
下記コマンドを実行します。
1 |
php artisan lang:publish |
日本語化の手順を詳しく知りたい場合は、下記の記事をご覧ください。
Pestテストがプロジェクト作成時から利用可能に
Pestは、phpUnitと同様、PHPのテスト用フレームワークです。
Laravel10からは、Laravelのプロジェクト作成時に、 --pest を追加することで、プロジェクト内でPestが使えるようになるようです。
1 |
laravel new example-application --pest |
カラムの型変更時などに、doctrine/dbalパッケージが不要に
これまで、カラムの型や名前を変更する際に doctrine/dbalパッケージが必要でした。パッケージを入れずに処理を行おうとすると、マイグレート実行時にエラーになりました。
Laravel10では、パッケージなしでも処理が行えるようになります。
ちょっぴり便利になります♪
Laravel9のサポートはいつまで?
Laravel10が出た後も、Laravel9のサポートは継続して行われます。
現在のところ、Laravel9のバグフィックスは2023年8月8日まで、セキュリティフィックスは2024年2月14日の予定となっています。
でも普段から、ちょこちょこ新機能は追加されてます
なおLaravelは、大きなバージョンアップ以外でも、ちょこちょこ新機能が搭載されています。
最近気づいた点としては、Laravel Breezeパッケージを入れると、これまであったエラー表示用のコンポーネントファイルが変更されていたりしました。
また、同じくLaravel Breezeパッケージについてですが、プロフィールページがデフォルトで搭載されるようになりました。
右上の【Profile】メニューをクリックすると、プロフィールページを表示できます。
さらっと変わっていますが、最初見たときは「あれっ!」と思いました。わりとインパクトのある変更ですよね。
Laravelは日々進化をしているので、久しぶりに使ってみると「こんなのあったっけ?」と感じられるかもしれません。
さいごに
色々と変更点や新機能ありましたがいかがでしょうか?
わたしの印象としては、型指定が追加されたり、テスト関連の機能が増えたりしていることから、不具合が出にくく、バグを事前に減らせる開発環境になっていっていると感じます。
なお、わたしのほうでは、ソシムさんからLaravel10に対応した本を出版しました。
「Laravel10に対応した教本で、基本からLaravelの使い方を学んでおきたい」と思ったら、こちらお役立てください。
なお現在の最新版はLaravel11です。Laravel11に対応した書籍のサポートガイドご用意しています。書籍に関する詳細はこちらご覧ください。
コメント
「Invocable」「invokable」表記がありますが、どっちか間違ってますよね。
イラストの「終了レベル」は「修了レベル」ではないかと……
イラストはどこなのか分かりませんでしたが、スペルミスは修正しました。
ありがとうございます。