Laravel8→9(LTS)の変更点まとめ

*当記事はLaravel公式ドキュメントを参考にしています。

ップグレードドキュメントはこちら

サポート期限

VersionPHP (*)ReleaseBug Fixes UntilSecurity Fixes Until
6 (LTS)7.2 – 8.0September 3rd, 2019January 25th, 2022September 6th, 2022
77.2 – 8.0March 3rd, 2020October 6th, 2020March 3rd, 2021
87.3 – 8.1September 8th, 2020July 26th, 2022January 24th, 2023
9 (LTS)8.0 – 8.1February 8th, 2022February 8th, 2024February 8th, 2025
108.0 – 8.1February 7th, 2023August 7th, 2024February 7th, 2025
Laravel公式サイトより引用

Laravel9へのアップグレード

アップグレード方法

composer.jsonの中にある以下の2点を書き換え、 ターミナルから composer install を実行します

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
   〜中略〜
    "license": "MIT",
    "require": {
        "php": "^7.2", → "^8.0.2"へ
        "azuyalabs/yasumi": "^2.1",
        "barryvdh/laravel-dompdf": "^0.8.5",
        "creitive/laravel6-breadcrumbs": "^1.0",
        "doctrine/dbal": "^2.9",
        "fideloper/proxy": "^4.0",
        "freee/freee-accounting-sdk": "^1.0",
        "fruitcake/laravel-cors": "^1.0",
        "guzzlehttp/guzzle": "~6.0",
        "intervention/image": "^2.5",
        "laravel/cashier": "^10.5",
        "laravel/framework": "^6.0", → "^9.0"へ
        "laravel/tinker": "^1.0",
        "league/flysystem-aws-s3-v3": "^1.0",
    },
    "require-dev": {
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^3.0", → "^6.0"へ
        "orangehill/iseed": "^2.6",
        "phpunit/phpunit": "^8.0",
        "staudenmeir/dusk-updater": "^1.1"
    },

影響度大(要対応)

PHPバージョン

PHP8.0.2以上でなければ動作しないため、PHP7系をお使いの方はアップグレードが必要になります。

戻り値の型定義

PHP メソッドに戻り値の型定義が必要になるように移行し始めています。

Laravelでは特別な変更は必要ありませんが、もしLaravelのVendorクラスをオーバーライドしている場合は予め戻り値の定義が必要になるので、注意です!

*PHPもだんだんとJAVAやGoのように堅い言語を目指す方向性になってきましたね。

FileSystem

Laravel 9.x は Flysystem Ver1 から Ver3 に移行したので、ここは注意。

Flysystem は、Storage ファサードを介すすべてのファイル操作メソッドに影響します。

特にAWSのS3を使っている方は注意が必要で、以下のように明示的にターミナルからアップデートする必要があります。

composer require --with-all-dependencies league/flysystem-aws-s3-v3 "^3.0"

また、エラーを出すわけではありませんが、ファイル操作について変更があり、put, write, writeStream などの書き込み操作は、デフォルトで既存のファイルを上書きするようになりました。

既存のファイルを上書きしたくない場合は、書き込み操作を行う前に、手動でファイルの存在を確認する必要があります。

影響度中

langディレクトリの変更

Laravel9では、Laravel8以前のresources/langディレクトリがプロジェクトのルートディレクトリ(lang)に配置されるようになりました。

そのため、バリデーションメッセージなど、翻訳ファイルを使っている方はファイルを移動させてくださいね。


Laravel9の新機能

随時更新中・・・

Controller Route Groups

Laravel8→9へのアップデートでルートグループの書き方が改良されました。

具体的にはルートグループにコントローラーを指定するような書き方に変わりました。

Route::group(function () {
    Route::get('/orders/{id}', 'OrderController@show');
    Route::post('/orders', 'OrderController@store');
});

Laravel8 の時点では各コントローラーメソッドにコントローラー名を書く必要がありました。

しかし、新しいLaravel9ではコントローラークラスを指定しておくと、書くルーティングでコントローラー名を書く必要がなくなります。

use App\Http\Controllers\OrderController;
 
Route::controller(OrderController::class)->group(function () {
    Route::get('/orders/{id}', 'show');
    Route::post('/orders', 'store');
});

Full Text Indexes / Where Clauses

執筆中・・・

@checked

bladeテンプレートでデフォルトチェックを入れる @checkedができました。

具体的にはinput type=”checkbox”で条件に応じてデフォルトチェックを入れることができる機能です。

LaravelでNext.jsがサポートされた

Laravel Breeze(Laravel/uiに近い認証パッケージ)とNext.js(React.jsのフレームワーク)をまとめて使えるとのことです。

この機能を使うと、

  • フロントエンド:Next.js
  • バックエンドAPI:Laravel

といった具合に役割を分けたアプリケーションを比較的簡単に作れるようになります。

そのため、モバイル・Web同時開発をする際にはLaravel側をAPIサーバーとして使うことができ、モバイル開発者としてもメリットのある機能ですね。

新しいヘルパー関数

to_route

to_routeは主にコントローラーで使えるリダイレクトメソッドです。

具体的な使い方としては

to_route('ルート名', 'パラメーター(配列)', 'HTTPステータス')

といったように記述することができます。

必須は第1引数のルート名だけで、パラメーターやHTTPステータス(404や301など)は必要なら書いていただければ大丈夫です。

str

strは文字列を操作するヘルパー関数です。

ヘルパー関数なので、Laravelフレームワーク上でどこでも使うことができます。

使用例は

$string = str('Taylor')->append(' Otwell');
 append()は指定した文字列の後ろに文字列を付け足します。↓結果
// 'Taylor Otwell'

英語圏アプリで会社や嫌な取引先に依存しない収入を作りませんか?
その裏側を紹介するメールマガジンを配信しているので、ご興味あれば覗いてみてくださいね。