エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Laravel】6.xからバージョンが進むのが早い理由と、バージョンアップのやり方【790日目】

Laravelアドベントカレンダー12日目

Laravel Advent Calendar 2019 - Qiitaの 12 日目の記事です。

先日はおかしょいさんの日本の Laravel 関連コミュニティまとめでした

blog.okashoi.net

さて、アドベントカレンダー12日目を取り続けてもう3年目です。
1年目の記事と比べると、自分の成長を感じられます。
最近新しくアドベントカレンダーに挑戦されている方も見かけられて、凄く嬉しいです。

このアドベントカレンダーも一つのコミュニティの恩恵を受けられる場所だと思います。
素敵な文化を維持するためにも、今年も貢献していきましょう。

Laravel6.6!?

Laravel、皆さんお気づきですか。

もうLaravel6.6が出てますよ/(^o^)\

あれ?チョット前までLaravel5.8じゃなかった?
半年に一回くらいで0.1上がってたよね?

そしてこんなふうに思う人もいるかもしれません。

『『『こんなのバージョンアップなんて出来るわけないじゃんー!!!』』』

ってことで

そうじゃないんだよという話と、アップデートってどんなことをするのかを書こうと思います。

バージョンの付け方が変わった

以前Qiitaの方でも記事を書きましたが、Laravel6.xから、セマンティックバージョニングというものが導入されました。

qiita.com

結論から言うと、バージョンの付け方が変わりました。

セマンティックバージョニングって?

ばっくり説明すると、

Laravel 5.1->5.2->5.3

Laravel 6->7->8

という順にアップデートされるようになりました。

するとどうなる?

Laravel 5.8.0 -> 5.8.1 -> 5.8.2

Laravel 6.0 -> 6.1 -> 6.2

みたいなバージョン付けになります。
前のバージョンで言う、 5.8.xのアップデートが、今の 6.xのバージョンアップなのですね。

後ほど触れますが、これらはだいたい既存の機能を壊したりしない、 マイナーバージョンアップと呼ばれるものたちです。

(バージョンアップ話) 5系から5系にするときは?

さて、ここから本題。
Laravelのバージョンアップって、どうやってやるのでしょう?

手持ちのアプリケーションが壊れるのは置いておいて、一旦Laravelの中身だけバージョンを上げるのは、

1.composer.jsonを開きます。

"laravel/framework": "5.5.*",

こんなふうに書いてる部分が見つかると思うので、ここを書き換えます。

"laravel/framework": "5.6.*",

書き換えたら、ダウンロードをしましょう。コマンドを打ち込みます。

composer update

これで、新しいバージョンがダウンロードされます。
(composer updateは、オプションを付けなかった場合、
他のライブラリもバージョンアップされていた場合は、
そちらも新しいバージョンがダウンロードされます)

laravel/composer.json at 5.8 · laravel/laravel · GitHub

(補足)アスタリスク

ちなみに、 composer updateは、 composer.jsonを参考にして、インストールをいろいろしますが、
そこに、 *などが書かれているものがあると思います。それは、対応の記号に応じて、最新バージョンを取得してくれます。

"laravel/framework": "5.5.*",

これで composer updateをすると、5.5.10 のように、その当時での新しい数値を参考にしてダウンロードしてくれます。

composer.lockがある場合や、 composer installとの違いとかもありますが、一旦ここでは割愛します。

6.xから書き方変わったじゃん?

6.xに戻ります。

composer.json を見てみましょう。

laravel/framework": "^6.2"

github.com

もしかすると、記事を見ている時点では、数値が変わっているかもしれませんが、 これは、 6.2~6.xの最新までをダウンロードしてくれます。
いつの間にか^6.0じゃなくなっててびっくりした

ってことで、6系にアップデートするときには、上のファイルを参考にして、
composer.jsonを書き換えれば良さそう。

でも、6.2や6.3とかで差があるんじゃないの?

この差ですが、先程伝えたように、この6.xのx部分は、マイナーバージョンアップと呼ばれるものです。

これは、既存の機能を壊したりしないようなアップデートが行われます。

例えば?バグやセキュリティの修正。
例えば?LazyCollectionに新しい機能の『追加』。

こんなふうに、アップデートを気軽にしても、アプリが壊れることは殆どないアップデートです。

逆にいうと、昔は・・・

逆に言うと、昔の5.xのx部分のアップデートは、マイナーバージョンアップではないです。

ばんっっっっばん、既存の機能を壊しているメジャーアップデートです。

この認識を間違えていると、マイナーバージョンアップだから5系のバージョンアップ楽勝だろと言われて死にます
なんなら誤解されてて死にかけました。説明大切。

まとめると

5.5 -> 5.6 -> 5.7 -> 5.8 -> 6.x(実質5.9) -> 7.x(実質5.10)

みたいなのが、現在のバージョンアップです。

そして、過去の5.xのバージョンアップは、マイナーバージョンアップではないので、
アップデートするときは覚悟してねっ!ってお話でした。

明日は@n1215さんの記事です。よろしくお願いいたします!

間違えてる点などございましたら、twitterなどで教えていただけますと幸いです。
ここまでお読みくださり、ありがとうございました!

twitter.com

おまけ

マイナーバージョンアップで、だいたいとか、殆どとかいう言葉を使ってる理由。
マイナーバージョンアップで壊しに来る言語がありましてですね?

まあ、そもそも人が作ったものなので、バグが発生したり想定外だったりすることもあるわけで。

目くじら立てすぎないのが1番だと思いますです。