August 31, 2017

Laravel5.5へアップグレード

いつものアップグレード作業の時期。
ざっと見たところ大きな変更はないので5.4からなら簡単そう。

関わってるLaravelプロジェクトが増えてきてさすがに大変になってきた…。

すでに日本語ドキュメントも翻訳中なので参考に。

LTS

5.5は5.1以来の長期サポートということになっている。
長期サポートと言ってもまさか5.1を2,3年も使うわけないのでLaravel使うなら毎回バージョンアップするのが基本。
5.1から5.5へとか…やりたくない。

PHP7.0 以上が必須

5.5 はまずここが一番大きな変化。PHP5.6 のサポートが来年まで残ってる段階での PHP7 移行は正直早すぎるけど PHP7 使いたい気持ちはよく分かる。
半年前に告知出てたので Laravel5.5 使うような人なら問題なく対応できるだろう。

Laravel Horizon にはさらに PHP7.1 が必要。

プロジェクトファイルの差分

5.4の時にあった比較ツールへのリンクがないけどたぶんこれでいいはず
https://github.com/laravel/laravel/compare/5.4...master

ファイル追加したりコピペしたりするのでプロジェクトをzipでダウンロードしておくと楽。

composer.json

バージョン上がったり追加されたり変更されたり色々なのでよく見て書き換える。
https://github.com/laravel/laravel/blob/master/composer.json

    "require": {
        "php": ">=7.0.0",
        "fideloper/proxy": "~3.3",
        "laravel/framework": "5.5.*",
        "laravel/tinker": "~1.0"
    },
    "require-dev": {
        "filp/whoops": "~2.0",
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~6.0"
    },
    "extra": {
        "laravel": {
            "dont-discover": [
            ]
        }
    },
    "scripts": {
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate"
        ],
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover"
        ]
    },

他のパッケージが5.5に対応してなかったらここで中断することになる。
バージョン指定で "illuminate/support": "5.4.*" みたいにしてるのをよく見るけどこれはダメ。
5.5になっただけでcomposer updateできなくなる。
プロジェクトは5.4.*でいいけどパッケージなら^5.4とか5.*にすれば6.0になるまではそのまま使える。
5.6で動かなくなったら?その時はその時だ。5.5で確実に使えなくなるよりはいい。

無理矢理対応するならフォークしてcomposer.json書き換えて…のいつものやり方。

bootstrap/autoload.php

削除された結果 artisan public/index.php phpunit.xml などのほとんど変更することのなかったファイルが変更されてる。
ドキュメントに書かれてないのは中身は同じなので旧バージョンから使ってるならそのままでも問題ないから?
5.4での変更でvendor/autoload.phpを読み込むだけになってた。
https://github.com/laravel/laravel/commit/8914be5fc864ebc6877be38ff3502997e0c62761

(追記)残したまま5.5にしてみたけど大丈夫だった。

Package Discovery

5.5リリース前に書こうと思ってて間に合わなかった機能。
地味ながら便利になる。
対応してるパッケージならconfig/app.phpから削除していい。

Request

一番気を付けたほうがいいのはここかも。
微妙に仕様変更されてる。
説明するのが難しい…。
5.4のonly()intersect()の違いを分かってる上で
https://readouble.com/laravel/5.4/ja/requests.html#retrieving-input
5.5での変更は実際に色々試してみないと。
たぶんテストでは気付かず後からあれ???となる。

その他

細かい部分は使ってなければ影響はないので後はプロジェクト次第…。

依存パッケージの少ない小さいプロジェクトで5.5にしてみたけど問題なく終わった。

もう少し追記

他も移行作業してたら引っ掛かった箇所。

Exception Format

エラー時のJSONのフォーマットが変わってるのでJS側でエラーメッセージ表示してるなら修正が必要かも。
修正が面倒で5.4と同じフォーマットに戻したいならドキュメント通りに。

Mail Fake

Mail::assertSentからMail::assertQueuedに変更する。
テスト失敗するのですぐ気付く。
こういうのが使ってなければ影響がない変更。

速度

5.5移行をいくつか進めたけどやっぱりはっきり分かるほど表示速度アップしてるような…。

© kawax