Laravel 10.x アップグレードガイド

影響度の高い変更

影響度が中程度の変更

影響度の低い変更

9.xから10.0へのアップグレード

アップデート見積もり時間:10分

Note: 私たちは、互換性のない変更を可能な限りすべて文書化するよう努力しています。これらの互換性のない変更の一部はフレームワークの不明瞭な部分であり、こうした変更の一部が実際にあなたのアプリケーションに影響を与える可能性があります。時間を節約したいですか?Laravel Shift を使用すると、アプリケーションのアップグレードを自動化できます。

依存パッケージのアップデート

影響の可能性: 高い

PHP8.1.0必須

現バージョンのLaravelは、PHP8.1.0以上が必要です。

Composer2.2.0必須

現バージョンのLaravelは、Composer2.2.0以上が必要です。

Composerの依存パッケージ

アプリケーションのcomposer.jsonファイルにある、以下の依存パッケージを更新してください。

  • laravel/framework^10.0
  • laravel/sanctum^3.2
  • doctrine/dbal^3.0
  • spatie/laravel-ignition^2.0
  • laravel/passport^11.0 (アップグレードガイド)

Sanctum2.xリリースシリーズから3.xへアップグレードする場合は、Sanctumアップグレードガイドを参照してください。

さらに、PHPUnit10を使用したい場合は、アプリケーションのphpunit.xml設定ファイルの<coverage>セクションから、processUncoveredFiles属性を削除する必要があります。次に、アプリケーションのcomposer.jsonファイルで、以下の依存関係を更新します。

  • nunomaduro/collision^7.0
  • phpunit/phpunit^10.0

最後に、アプリケーションで使用しているその他のサードパーティパッケージを調べ、Laravel10のサポートに適したバージョンを確実に使用してください。

最低安定度

アプリケーションのcomposer.jsonファイルのminimum-stability設定をstableへ更新する必要があります。もしくは、minimum-stabilityのデフォルト値はstableなので、アプリケーションの composer.jsonファイルからこの設定を削除してください。

"minimum-stability": "stable",

アプリケーション

Publicパスの結合

影響の可能性: 低い

アプリケーションでコンテナへpath.publicを結合し、「公開パス」をカスタマイズしている場合は、代わりに Illuminate\Foundation\Applicationオブジェクトが提供するusePublicPathメソッドを呼び出すようにコードを更新する必要があります。

app()->usePublicPath(__DIR__.'/public');

許可

registerPoliciesメソッド

影響の可能性: 低い

AuthServiceProviderregisterPoliciesメソッドをフレームワークが自動的に呼び出すようになりました。したがって、アプリケーションのAuthServiceProviderbootメソッドから、このメソッドの呼び出しを削除できます。

キャッシュ

Redisキャッシュタグ

影響の可能性: 中程度

Redisのキャッシュタグサポートは、パフォーマンスとストレージ効率向上のために書き直しました。以前のLaravelのリリースでは、アプリケーションのキャッシュドライバにRedisを使用すると、古いキャッシュタグがキャッシュに蓄積していました。

そこで、古くなったキャッシュタグエントリーを適切に整理するため、Laravelの新しいcache:prune-stale-tags ArtisanコマンドをアプリケーションのApp\Console\Kernelクラスで定期実行してください。

$schedule->command('cache:prune-stale-tags')->hourly();

データベース

データベース構文

影響の可能性: 中程度

データベースの「構文」(通常は DB::raw により生成)は、将来的に追加機能を提供するため、Laravel10.xで書き直しました。特に、構文の素の文字列の値は、構文のgetValue(Grammar $grammar)メソッドで取得する必要があります。(string)を使う構文から文字列へのキャストは、既にサポートしていません。

通常、これはエンドユーザーのアプリケーションには無影響です。しかし、もしアプリケーションで(string)を使用してデータベース式を文字列へ手作業でキャストしたり、構文に対して__toStringメソッドを直接呼び出している場合は、代わりにgetValueメソッドを呼び出すようにコードを更新する必要があります。

use Illuminate\Support\Facades\DB;

$expression = DB::raw('select 1');

$string = $expression->getValue(DB::connection()->getQueryGrammar());

クエリ例外コンストラクタ

影響の可能性: かなり低い

Illuminate\Database\QueryExceptionのコンストラクターで、文字列の接続名を最初の引数に取るようにしました。アプリケーションがこの例外を手作業で投げている場合は、それに応じてコードを調整する必要があります。

ULIDカラム

影響の可能性: 低い

マイグレーションで、ulidメソッドを引数なしで呼び出すと、カラムはulidという名前になります。Laravelの以前のリリースでは、引数なしでこのメソッドを呼び出すと、誤ってuuidという名前のカラムが作成されていました。

$table->ulid();

ulidメソッドを呼び出すとき、明示的にカラム名を指定するには、そのカラム名をメソッドへ渡してください。

$table->ulid('ulid');

Eloquent

モデルの"Dates"プロパティ

影響の可能性: 中程度

Eloquentモデルで非推奨になっていた$datesプロパティを削除しました。アプリケーションでは、$castsプロパティを使用する必要があります。

protected $casts = [
    'deployed_at' => 'datetime',
];

多言語化

Languageディレクトリ

影響の可能性: なし

既存のアプリケーションには関係ありませんが、Laravelアプリケーションのスケルトンは、langディレクトリをデフォルトで用意しなくなりました。代わりに、新しいLaravelアプリケーションを書く際には、lang:publish Artisanコマンドを使用してリソース公開してください。

php artisan lang:publish

ログ

Monolog3

影響の可能性: 中程度

LaravelのMonolog依存バージョンをMonolog3.xへ更新しました。アプリケーション内でMonologと直接やりとりする場合は、Monologのアップグレードガイドを確認する必要があります。

BugSnagやRollbarなどのサードパーティのログサービスを使用している場合、それらのサードパーティのパッケージをMonolog3.xとLaravel10.xをサポートするバージョンへアップグレードする必要がある場合があります。

キュー

The Bus::dispatchNow Method

影響の可能性: 低い

非推奨にしていたBus::dispatchNowdispatch_nowメソッドを削除しました。代わりに、アプリケーションでは、それぞれBus::dispatchSyncdispatch_syncメソッドを使用する必要があります。

ルート

ミドルウェアエイリアス

影響の可能性: 条件による

新しいLaravelアプリケーションでは、App\Http\Kernelクラスの$routeMiddlewareプロパティは、その目的をよりよく表すために$middlewareAliasesへ名前を変更しました。既存のアプリケーションでこのプロパティの名前を変更することは歓迎しますが、必須ではありません。

レート制限の戻り値

影響の可能性: 低い

RateLimiter::attemptメソッドを呼び出すと、指定したクロージャが返す値をメソッドからも返すようにしました。何も返さないかnullを返すと、attemptメソッドはtrueを返します。

$value = RateLimiter::attempt('key', 10, fn () => ['example'], 1);

$value; // ['example']

Redirect::homeメソッド

影響の可能性: かなり低い

非推奨だったRedirect::homeメソッドを削除しました。代わりに、アプリケーションでは明示的に名付けたルートへリダイレクトする必要があります。

return Redirect::route('home');

テスト

サービスのモック

影響の可能性: 中程度

非推奨だったMocksApplicationServicesトレイトをフレームワークから削除しました。このトレイトはexpectsEventsexpectsJobsexpectsNotificationsといったテストメソッドを提供していました。

もしあなたのアプリケーションでこれらのメソッドを使用するなら、それぞれEvent::fakeBus::fakeNotification::fakeへ移行することをお勧めします。フェイクを使ったモックについては、フェイクしようとしているコンポーネントの対応するドキュメントで詳しく説明されています。

バリデーション

クロージャバリデーションルールメッセージ

影響の可能性: かなり低い

クロージャベースのカスタムバリデーションルールを書くとき、$failコールバックを複数回呼び出すと、前のメッセージを上書きする代わりに、メッセージを配列へ追加するようになりました。通常、これはアプリケーションに影響を与えることはありません。

加えて、$failコールバックはオブジェクトを返すようになりました。これまでバリデーションクロージャの戻り値の型をタイプヒントしていた場合は、タイプヒントを更新する必要があります。

public function rules()
{
    'name' => [
        function ($attribute, $value, $fail) {
            $fail('validation.translation.key')->translate();
        },
    ],
}

フォームリクエストのafterメソッド

影響の可能性: かなり低い

フォームリクエスト内でafterメソッドは、Laravelの予約語にしました。フォームリクエストでafterメソッドを定義している場合は、Laravelのフォームリクエストの新しい機能である「バリデーションのafter」を利用するために、このメソッドの名前を変更するか、修正する必要があります。

その他

laravel/laravel GitHubリポジトリの変更点をご覧いただくこともお勧めします。これらの変更の多くは必須ではありませんが、これらのファイルをあなたのアプリケーションと同期させておくとよいでしょう。これらの変更のいくつかは、このアップグレードガイドでカバーしていますが、設定ファイルやコメントの変更など、他のものはカバーしていません。

GitHubのソース比較ツールで簡単に変更点を確認し、どのアップデートが自分にとって重要かを選択できます。ただし、GitHubソース比較ツールで表示される変更点の多くは、当オーガニゼーションがPHPネイティブ型を採用したことによるものです。これらの変更は後方互換性があり、Laravel 10への移行時に採用するかは任意です。

ドキュメント章別ページ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる