Laravel9の新機能17個紹介:最初の5選だけは知っておいてほしい!

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

Laravel9がついにでました。次の3つのレベルに分けて、17個の変更点や機能を紹介します。

  • これは便利機能5選
  • 知っておくとよいかも機能8個
  • 知らなくてもよいかな機能4個

17個は多すぎですよね^^;

とりあえず、【これは便利機能5選】だけは、知っておいてください。

なお、今回ご紹介する機能は、下記の公式ドキュメントを参考にしています。

Laravel9は、通常どおりプロジェクトを作成するとインストールできます。利用にはPHP8.0以上が必要となります。インストール手順は、こちらの記事を参考にしてくださいね。

Laravel9:これは便利機能5選

まずは知っておくと便利!!機能のご紹介からです。

ルートの設定方法が便利になりました

これまで同じコントローラを使う場合でも、都度コントローラを入れる必要がありました。


Laravel9では、次のように、コントローラによってグループ化が可能になりました。
Junko
Junko

ルート設定がちょっとすっきりしますね。

ルート一覧が見やすくなりました

【Laravel8でのルート一覧】

【Laravel9でのルート一覧】
Laravelでは、下記コマンドでルートの一覧を表示できます。

便利な機能ながら、Laravel8まではイマイチ一覧が見ずらいのが難点でした。Laravel9では、ルートの一覧が美しく、見やすくなりました。

Junko
Junko

これも、ちょっぴり嬉しい改善ですね。

スロット名のショートカットが利用可能に

こちらはコンポーネントを使う人には嬉しい機能。

これまでは、次のようにblade.phpファイルにスロット名をいれていました。

Laravel9から、次のようにスロット名を簡単に入力できるようになりました。

Junko
Junko

コンポーネント使う場合は、これ、便利です。

Checked, Selected Bladeディレクティブが利用可能に

これもなかなか、便利そうです。

@checkedディレクティブ、blade.phpファイル上でチェックボックスの入力がチェックであるかどうか判定できるようになりました。

Junko
Junko

これまで@ifを使っていましたが、より簡単に指定できるようになった感じですね。

選択リストでの入力を判定する場合には、@selectedディレクティブを使えます。

エラー画面が美しくなりました。

エラーが起こったときに遭遇する画面が美しくなりました。

右側の設定から、明るくしたり、暗くしたりと見た目も変えられます。

Laravel9:知っておくと良いかも機能8個

次は「まあ、知っておくと良いかも」レベルの機能です。

Anonymous Migtration(匿名マイグレーション)

こちらは、Laravel8.37で既にリリースされていた機能となります。

これまではマイグレーションファイルにクラス名が入っていましたが、今後は、クラス名が入らなくなります。

「あ、しまった同じクラス名でファイル作っちゃった」なんてトラブルが発生しなくなります。

Junko
Junko

それほど大きな影響はないような気はしますが、苦い経験がある人には嬉しい改善かも。

Bladeのインラインテンプレートのレンダリング

レンダーメソッドによって、Bladeテンプレートの文字列をHTMLに変換できるようになりました。

ちょっと何を言っているか分かりにくい感じですが^^;

たとえば、ルート設定ファイルに次のように入れます。

【web.php】

ブラウザにページを表示すると、文字列が反映されています。

引数を加えることも可能です。たとえば、ログインユーザーの名前を表示するには、次のようにします。

【web.php】

ブラウザにページを表示すると、ログインユーザーの名前も反映されています。

Junko
Junko

これもちょっぴり便利かも、機能ですね。

強制スコープ

これまたちょっぴり説明がややこしいのですが、がんばって説明します!

ユーザーと投稿データがあるとします。

ふたつのデータは、リレーションを設定してあります。

ユーザーIDとポストIDを指定して、投稿ページを表示するようなルート設定を作るとします。

このとき、ルート設定で次のようにscopeBindingを使うと、ユーザーとポストに整合性がなければ表示しないようにできます。

【web.php】

たとえば、ユーザーID1番の人が、ポストID1番の投稿データを作成したとしますね。この場合は、ブラウザに、次のようにURLをいれると、ちゃんとデータを表示できます。

ですが、ユーザーID2番を指定して、ポストID1番の投稿データを表示しようとすると、エラーになります。

整合性がないと表示してくれなくする。ちょっと便利な機能です。

フルテキストインデックス

MySQLまたはPostgreSQLを使用している場合、fullTextメソッドをカラム定義に追加し、フルテキストインデックスを作れるようになりました。

たとえば、マイグレーションファイル作成時に、次のようにfullTextメソッドを設定します。

マイグレートを実行します。データベースの構造を見てみると、次のように【タイプ】がFULLTEXTとなっています。

次のようにwhereFullTextメソッドを使い、手早くインデックスを作成できます。

Junko
Junko

実際に使う場があるかどうかは分かりませんが。

一応ご紹介でした。

アクセサとミューテータの記述方法の変更

アクセサとミューテータを使うと、データの加工を簡単にできます。

たとえば、毎回名前に敬称をつけたいとすると、Userモデルに次のようにアクセサをつけます。

【User.php】

実際にこのアクセサを使いたいblade.phpファイル上で、次のように記述します。

すると、ブラウザ上に「さん」付でユーザー名が表示されます。

Laravel9では、このアクセサ・ミューテータを、次のようにプレフィックス(接頭辞)なく記述できるようになりました。

Junko
Junko

分かりやすくなったのかもですが、正直、それほど便利になった感じはしません。

便利なヘルパ関数が加わりました

Laravel9では、便利なヘルパ関数が加わりました。

ヘルパ関数とは、PHPとは別に、Laravelが用意してくれているお助け関数です。

紹介していきますね。

ヘルパ関数:str

strは、指定した文字列を返してくれます。Str::ofメソッドと同等の機能を持ちます。

これまでは、次のように記述する必要がありました。

Laravel9では、ヘルパ関数を使って、次のように記述できます。

ブラウザに表示すると、次のようになります。

Junko
Junko

まあ、ちょっぴり便利ってことで。

ちなみに表示する文字列には色々とルールを設定できます。次のようにsnakeを使うと、スネークケースに変換できます。つまり、単語と単語をアンダースコアでつなげられます。

ブラウザに表示すると、次のようになります。

ヘルパ関数:to_route

これまではリダイレクトを入れる時に、次のように記述しました。

【web.php】

今後はヘルパ関数to_routeが加わったので、次のように記述することもできます。

【web.php】

引数がある場合は、次のような形で配列を入れます。

Laravel Breeze API と Next.js

Laravel Breezeスターターキットには、「API」スキャフォールドモードとNext.jsフロントエンド実装が追加されています。

TailwindでBootstrap5のページネーションビューを使える

Bootstrap5を使って、ページネーションビューが作れるとのこと。

デフォルトのTailwindビューの代わりに、Bootstrap5のページネーションをビューを使うには、App\Providers\AppServiceProvider に、次のように入れます。

なおページネーションは別の記事でも解説しているので、詳しくはこちらをどうぞ。

今回はBootstrap5という部分が違うのかもしれませんが、以前から使えたために、重要度低めの項目にいれました。

Laravel9:知らなくてよいかな機能4個

ここから先は、「今はいいかな」「あまり使わないかも」と感じた機能です。
Junko
Junko

あくまでも、個人の感想です。

試しておりませんが概要だけ、載せておきますね。

TestにCoverageオプション追加

php artisan testコマンドによって、テストが実行できます。

今回はこのコマンドに coverageオプションがつきました。これによって、コードカバレッジの量を調べられるようになりました。

Laravel Scount にデータベースエンジン追加

Laravel Scoutはデータベースのフルテキストサーチが可能になるパッケージです。

AlgoliaやMeiliSerachのような専用の検索サービスではなく、Scoutの「データベース」エンジンを利用することができるようになりました。

PHPのenumに属性値をキャストできる

PHP8.1ではEnumのサポートが導入されました。

Eloquentでは、属性値をPHPのenumにキャストすることができるようになりました。

またルート設定にEnumをタイプヒントする機能が導入され、LaravelはそのルートセグメントがURIの有効なEnum値である場合にのみルートを呼び出します。

バリデーションの改善:ネストされた配列データ

Rule::forEach メソッドによって、検証対象の配列属性の繰り返しごとに呼び出されるクロージャを受け取ります。

地味だけど、ちょっと大事な変更点:言語ファイルの場所

最後に、地味ですが、知っておいたほうが良い変更点がひとつあるのでご紹介します。

ユーザーインターフェースなどを翻訳したファイルを入れる場所が変わりました。

以前はプロジェクトディレクトリ/resources/lang の中でしたが、Laravel9では、プロジェクトディレクトリ/langに変更されています。

翻訳ファイルをいれる時に、ご留意ください。

さいごに

以上です。

最後に感想としては、「Laravel8の時のような、ものすごい変化はなかったかも」です。

今回のバージョンアップは新機能搭載というよりも、環境への対応といった意味合いが強かったのではと感じます。

Laravelの作者、Taylorさんも、Twitterで次のようにつぶやいていました。

ただ言い換えると、メジャーバージョンアップを待たずとも、今後も新機能がどんどん加わっていくということですね。

Junko
Junko

Laravelの動向は今後も見守っていきます。

役立つことは記事にしますね。

Twitterでもつぶやいているので、良かったらフォローしてください♪

JunkoのTwitterを見てみる

「実際にLaravel9を使ってWebアプリを開発してみたい!」という場合は、学習サイト【Laravelの教科書】をご活用ください。

Laravel9を使って、フォーラムサイトをいちから作る方法を解説しています。

ご興味あれば、下記ボタンをクリックして、案内ページを見てみてくださいね。

Junko
Junko

基礎編部分は無料でプレゼント中です♪

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

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

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

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

Laravel8版と、最新のLaravel9版、ふたつのテキストご用意してます♪

【無料プレゼント】

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

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

詳細はこちらをクリック

Laravel8版と、最新のLaravel9版、ふたつのテキストご用意してます♪

「Laravelで業務効率化用のWebアプリを開発してほしい」
「社内にLaravelが分かる人がいない。コンサルしてほしい」
そんな企業様のご依頼承っています。
お問い合わせはこちら
Laravelを使ったWebアプリ開発のご相談承り中
Zoomでのお打ち合わせも承っています♪
お問い合わせはこちら
Twitter始めました。
40代からプログラミング!

コメント

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