Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails以外の開発一般

PHP: Laravel 7へのアップグレードを試した

BPSの福岡拠点として一緒にお仕事をさせていただいています、株式会社ウイングドアのモリヤマです。

2020年3月3日にリリースされたLaravel7にちょっとだけ触れる機会があったので書かせていただきます!​
今回「Laravel Framework 6.18.3」の環境を「Laravel Framework 7.3.0」にアップグレードしました!

前置き

新人向けの課題で急遽Laravel7を使う事が決まり、流用できそうな環境あったから試してみようと軽い気持ちで取り組んだ結果...見事にハマりました。

試した環境は、最近(?)半年ぐらい前にささっと作って放置していた環境だった為、比較的大きな苦労はなくアップグレードはできました。
...が「Laravel 7.x アップグレードガイド」に書いてある所要時間15分なんて全然収まらなかったぜって話です😂

最終的にやったこと

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

  • laravel/frameworkを^7.0に変更
  • laravel/tinkerを^2.0に変更
  • facade/ignitionを^2.0に変更
  • nunomaduro/collisionを^4.1に変更
  • phpunit/phpunitを^8.5に変更

composer.jsonの修正

     "require": {
         "php": "^7.2",
         "fideloper/proxy": "^4.0",
-        "laravel/framework": "^6.0",
-        "laravel/tinker": "^1.0"
+        "laravel/framework": "^7.0",
+        "laravel/tinker": "^2.0"
     },
     "require-dev": {
-        "facade/ignition": "^1.4",
+        "facade/ignition": "^2.0",
         "fzaninotto/faker": "^1.4",
         "mockery/mockery": "^1.0",
-        "nunomaduro/collision": "^3.0",
-        "phpunit/phpunit": "^8.0"
+        "nunomaduro/collision": "^4.1",
+        "phpunit/phpunit": "^8.5"
     },
     "config": {
         "optimize-autoloader": true,

Symfony 5へのアップグレード

src/app/Exceptions/Handler.phpの修正

 namespace App\Exceptions;

-use Exception;
+use Throwable;
 use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

      * @param  \Exception  $exception
      * @return void
      */
-    public function report(Exception $exception)
+    public function report(Throwable $exception)
     {
         parent::report($exception);
     }

      * @param  \Exception  $exception
      * @return \Illuminate\Http\Response
      */
-    public function render($request, Exception $exception)
+    public function render($request, Throwable $exception)
     {
         return parent::render($request, $exception);
     }

src/config/session.phpの修正

-    'secure' => env('SESSION_SECURE_COOKIE', false),
+    'secure' => env('SESSION_SECURE_COOKIE', null),

-    'same_site' => null,
+    'same_site' => 'lax',

はい!スムーズに行った場合は、上記の修正を加えcomposer updateで完了でした!

どこでつまずいたか?

最初にcomposer.jsonを修正してcomposer updateを実行した結果、artisanコマンドが使えなくなってハマった😂

現象:artisanコマンドが動かない

composer updateをしたら下記エラーが発生。

> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 255

以降artisanコマンドが動かなくなってしまいました。

パーミッションの確認やcacheを削除だとか色々試し、
解決方法にたどり着くまで小一時間かかりました😂

解決方法

先にSymfony 5 Related Upgradesを対応する

まとめ

しっかり確認して進めれば、本来は数分で終わる程度の内容でした。
教訓としてはドキュメント(Upgrade Guide)を全体的に読んで、作業手順を組み立ててから進めるべきだったと身に染みました。

何事も段取りが大切ですね!!😊



株式会社ウイングドアでは、Ruby on RailsやPHPを活用したwebサービス、webサイト制作を中心に、
スマホアプリや業務系システムなど様々なシステム開発を承っています。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。