2011年6月に最初のVersionがリリースされてから12年。ついにLaravelも大台のVersion 10 を迎える事となりましたね。(パチパチパチ!!)という事でいつも通りinstallしてキャッチアップです。
サポート
サポートの予定については上の表の通りです。L8.xのリリース以降1年毎のバージョンアップとなっている為、次のL11.xのリリースが2024年初旬に控えていますね。明確な時期は未定の様ですが。前回のL9.xのインストール解説時にも触れましたが、L10.xからはPHP8.1以上が必須です、それ以前のバージョンを使用している方はアップグレードが必要となります。macOS環境の方は以前紹介したphpbrewを使えば複数のバージョンをinstallして切り替えて使えるので便利ですよ。
新規プロジェクト作成
それではいつも通りプロジェクトを作成してみましょう。
composer create-project laravel/laravel L10.x
プロジェクトディレクトリへ移動し、インストールされたLaravelのバージョンを確認してみます。2023年8月1日現在、10.16.1
がインストールされました。
cd L10.x php artisan --version >> Laravel Framework 10.16.1
続いて、ビルドインサーバを立ち上げて見ます。
php artisan serv
ブラウザで http://127.0.0.1:8000/
にアクセスし、お馴染みの画面が表示されました。
ここまではL9.xから特に変わり無いようです。
langディレクトリ
インストールしてみて気づいたのですが、プロジェクトのルートディレクトリからlang
が無くなっています。lang
はL9.xでresources
配下からルートディレクトリに移動したばかりです、今度はどこへ行ってしまったのでしょう?と、探していたらアップグレードガイドに記載がありました。
https://laravel.com/docs/10.x/upgrade#language-directory
新規プロジェクトを作成した初期状態ではlangディレクトリは作成されなくなったようです。従ってバリデーションエラーなどを日本語に変えたい場合などは
php artisan lang:publish >> INFO Language files published successfully.
を実行してプロジェクトにlang
ディレクトリに追加する必要があります。
testの–profileオプション
リリースノートを眺めていて使えるかも?と、思った新機能です。テスト実行時に--profile
オプションを付けると遅いテストを表示してくれるようです。試しに、SlowTest
というテストクラスにて、sleep()
を使用して時間が掛かるテストを追加して実行してみました。
以下が追加したテスト
<?php namespace Tests\Unit; use PHPUnit\Framework\TestCase; class SlowTest extends TestCase { public function test_that_takes_3_seconds(): void { sleep(3); $this->assertTrue(true); } /** * @dataProvider provider_test_that_takes_x_seconds */ public function test_that_takes_x_seconds($seconds): void { sleep($seconds); $this->assertTrue(true); } public function provider_test_that_takes_x_seconds(): array { return [ '1sec' => [1], '2sec' => [2], '5sec' => [5], ]; } }
以下が--profile
を付けて実行した結果です。
php artisan test --profile >> PASS Tests\Unit\ExampleTest ✓ that true is true PASS Tests\Unit\SlowTest ✓ that takes 3 seconds 3.01s ✓ that takes x seconds with data set "1sec" 1.00s ✓ that takes x seconds with data set "2sec" 2.01s ✓ that takes x seconds with data set "5sec" 5.00s PASS Tests\Feature\ExampleTest ✓ the application returns a successful response 0.15s Tests: 6 passed (6 assertions) Duration: 11.28s Top 10 slowest tests: Tests\Unit\SlowTest > that takes x seconds with data set "5sec" 5.00s Tests\Unit\SlowTest > that takes 3 seconds 3.01s Tests\Unit\SlowTest > that takes x seconds with data set "2sec" 2.01s Tests\Unit\SlowTest > that takes x seconds with data set "1sec" 1.00s Tests\Feature\ExampleTest > the application returns a successful response 0.15s Tests\Unit\ExampleTest > that true is true 0.00s ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── (99.17% of 11.28s) 11.19s
なるほど、テスト実行結果の後に遅いテストランキングを表示してくれる訳ですね。dataProvider
でデータセットを指定している場合は、使用したデータ毎に実行時間を計測しランキングに反映されます。止むを得ず時間が掛かってしまうテストはどうしようも無いですが、単純に色々詰め込みすぎて遅くなっているテストが見つかったなら、分けることが出来ないか検討する良い機会だと思います。肥大化したテストは管理が大変ですから。
その他
リリースノートを眺めていて他に気になった新機能としてLaravel PennantとProcessファサードがあります。現時点では、Laravel Pennantはフラグ管理機能、Processファサードはshellコマンドなどが実行できるFacadeという認識です。いずれも従来は自作のヘルパ関数を作ったり、cmd()
を使ったりと、Laravelishではない方法で対応してきました。新機能を使う事でどう変わるのか気になる処です。これらについては別の記事でコードを交えながら噛み砕いていきたいと思います。