Laravel11へのアップグレード(スリム化版)
Laravel11へのアップグレード(スリム化版)
警告
Laravel10から11のアップグレードではアプリケーション構造のスリム化に追従は公式からは推奨されてない。
追従しなくてもLaravel11にアップグレードできるし、今まで通りの使い方ができる。
今後のためにどうしてもスリム化したい場合のみに向けた情報。
対象プロジェクト
Laravel10を指定して作成した新規プロジェクト。
composer create-project laravel/laravel:^10.0 slim
SQLiteを使うように.env
変更。
DB_CONNECTION=sqlite
#DB_HOST=127.0.0.1
#DB_PORT=3306
#DB_DATABASE=laravel
#DB_USERNAME=root
#DB_PASSWORD=
テスト時のDBは:memory:
を使う。
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
Breeze v1.29をインストール。bladeスタック。
composer require laravel/breeze --dev
php artisan breeze:install blade
php artisan migrate
php artisan test
でテストしながら確認していく。
composer.json の更新
"require": {
+ "php": "^8.2",
+ "laravel/framework": "^11.0",
+ "laravel/sanctum": "^4.0",
},
"require-dev": {
+ "laravel/breeze": "^2.0",
+ "nunomaduro/collision": "^8.1",
},
サードパッケージはないので問題なくcomposer update
できる。
テストOK。
スリム化に追従しないアップグレード作業はこれだけで終わり。後はスリム化とは関係ない通常のアップグレードを行う。
Controllerのスリム化
影響の少なそうなところから進める。
<?php
namespace App\Http\Controllers;
abstract class Controller
{
//
}
テストOK。
使われてないので影響ない。
RouteServiceProvider::HOME
を修正
すべてroute('dashboard', absolute: false)
に変更。
ここを参考に。
RouteServiceProviderをコメントにしてテストが成功すれば問題ない。
//public const HOME = '/dashboard';
API機能を削除
ひとまずLaravel11デフォルトと揃える。sanctumを使ってるプロジェクトなら削除しない。スリム化が終わってからなら再インストールが可能。
- "laravel/sanctum": "^4.0",
- routes/api.php
- config/sanctum.php
RouteServiceProviderのapi部分だけ削除。
$this->routes(function () {
- Route::middleware('api')
- ->prefix('api')
- ->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
});
UserのHasApiTokens
を削除。
- use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasFactory, Notifiable;
ブロードキャスト機能を削除
- routes/channels.php
- config/broadcasting.php
- app/Providers/BroadcastServiceProvider.php は後で削除でもいい。
configファイルを削除
- config/cors.php
- config/hashing.php
- config/view.php
ファイルの中身も変わってるので最新のファイルに全部入れ替えたほうがいいかもしれない。
デフォルトから変更してるファイルは残し、他は削除するか入れ替える。
プロジェクトごとに判断して対応する箇所。
ここからは大きな変更
しばらくテストなしで変更していく。コピペするだけ。
bootstrap/app.php
古くなる記事ではなくGitHubの最新のコードを見て書き換え。
bootstrap/providers.php
追加
これもGitHubから。
public/index.php
これもGitHubから。Httpコンテキストの入り口はpublic/index.php
artisan
これもGitHubから。Consoleコンテキストの入り口はartisan
普段はあまり意識しないけどpublic/index.php
とartisan
が入り口。
ここまで一気に変更するとテストもphp artisan serve
も正常に動く。
ここまで来ればLaravel11の普通の使い方ができる
ミドルウェアで変更している設定があればbootstrap/app.php
に移動。
Scheduleはroutes/console.php
に移動。
不要なファイルの削除
- app/Console/Kernel.php
app/Console/Commands
は残す。 - app/Exceptions
- app/Http/Middleware デフォルトミドルウェアを削除。
- app/Http/Kernel.php
- app/Providers
AppServiceProvider
以外のデフォルトを削除。 -
config/app.php
のproviders
とaliases
を削除。
tests/TestCase.php
変更
CreatesApplication
が不要に変わっているのでTestCaseを修正。
tests/CreatesApplication.php
は削除。
.env
.env.example
phpunit.xml
変更
増えてる項目を追加。phpunit.xml
は<env>
部分を変更。
CACHE_DRIVER
からCACHE_STORE
に変わったりしている。
.env
を変更するならphpunit.xml
やconfig全体の見直しも必要。
間違えるとテストが失敗するようになるのでこの辺りの変更は慎重に。
複数人で開発している場合、各自の.env
を変更するのは大変なのでconfig周りの変更は追従しないほうがよさそう。
migrationsの追加
Laravel11ではデフォルトのmigrationsが変わっているけど既存のmigrationsを変更してはいけないので足りないテーブルだけ追加。
全部専用のコマンドが用意されている。
php artisan make:session-table
php artisan make:cache-table
php artisan make:queue-table
php artisan make:queue-batches-table
php artisan migrate
これでLaravel11と同じ。
スリム化作業は以上
アップグレードガイドの変更やパッケージの変更への対応は別作業。
Laravelをよく理解してないと難しいのでスリム化は推奨できない。
Discussion