February 27, 2019

Laravel5.8へアップグレード

5.8は事前に準備しておけばすぐ終わる。

いつもの見る所

キャッシュ時間

5.8で一番重要なのはここ。現在5.5-5.7使っててすぐに5.8にしないつもりでもここだけは今から準備してたほうがいい。

// Laravel 5.7 - Store item for 30 minutes...
Cache::put('foo', 'bar', 30);

// Laravel 5.8 - Store item for 30 seconds...
Cache::put('foo', 'bar', 30);

// Laravel 5.7 / 5.8 - Store item for 30 seconds...
Cache::put('foo', 'bar', now()->addSeconds(30));

5.7までは「分」。5.8からは「秒」。修正しなくてもエラーにはならないけどキャッシュ時間が短くなるという後からでは見つけにくい変更。後から他人が見たら「分」と「秒」どっちのつもりで書いたのか分からない。

対応としてはnow()->addMinutes(30)のようなDateTimeでの指定にする。

5.8に上げる前に修正したほうがいい。

アトミックロック

これもキャッシュ関連。使ってる所はあまり見たことないけど使ってるなら修正。

キャッシュの普通の使い方でもロックはできる。Cache::lock()がキャッシュの機能なのはその辺りからだろう。

複数単語のモデル

Mediumとは言ってるけど絶対影響大きい…。

// Laravel 5.7
App\Feedback.php -> feedback (correctly pluralized)
App\UserFeedback.php -> user_feedbacks (incorrectly pluralized)

// Laravel 5.8
App\Feedback.php -> feedback (correctly pluralized)
App\UserFeedback.php -> user_feedback (correctly pluralized)

モデル側で$tableを指定。テーブル名自体を変更してもいいけど。

/**
 * The table associated with the model.
 *
 * @var string
 */
protected $table = 'user_feedbacks';

ヘルパー

修正するのは大変なのですでに大量に使ってるならそのまま使えばいい。
修正したつもりでも修正漏れが残る。
https://kawax.biz/laravel58-helpers/

パッケージ開発者はヘルパー使わないように修正。

Deferred Service Providers

これもパッケージ開発者向けだけど5.8以上にしか対応できないので今後メジャーバージョンを上げるパッケージが増えそう。
composer updateだけでは気付かないのでcomposer outdatedで確認。

Markdown File Directory Change

公開して使ってるなら。

Nexmo / Slack Notification Channels

使ってるなら。
Slackは使ってる人多そう。2.0になってるので事前に追加してた人は修正が必要。

composer require laravel/slack-notification-channel

プロジェクト側

比較ツール見て必要な箇所だけ変更すればいい。

  • migrationsがbigIncrements。既存プロジェクトには関係ないけど。毎回自分でbigIncrementsに変えてた。
  • パスワードが8文字以上
  • public/svg/が削除されてまたエラー画面が変わった

その他

いつものようにこれ以上の細かい所はそれぞれのプロジェクトで使ってる機能次第。

1プロジェクトなら早いけどもう数が多すぎる…。
どうせサードパーティパッケージの対応待ちになるので徐々に上げていく。

その後

自分の権限で可能な範囲は大体5.8にできた。

LaravelCollectiveの対応が遅いので今回で完全に消した。
バージョンアップの度に待たされるのは困るので徐々に減らして来ていたのでそんなに大変ではなかった。

プロジェクトとパッケージで軽く50は超えててやっぱり限界が近い…のは分かってるので最近はバージョンアップで苦労しないような使い方に移行してる。
一番大変なのはビューの修正なのでそもそもビューがなければいい。
なるべく小規模に作る。
という流れからartisanコマンドだけ使うことが増えてる。
それはそれでLaravel Zeroの対応待ちになるけどバージョンアップ作業は簡単なはずなので待つのみ。

© kawax