Laravelアドベントカレンダー12日目
Laravel Advent Calendar 2019 - Qiitaの 12 日目の記事です。
先日はおかしょいさんの日本の Laravel 関連コミュニティまとめでした
さて、アドベントカレンダー12日目を取り続けてもう3年目です。
1年目の記事と比べると、自分の成長を感じられます。
最近新しくアドベントカレンダーに挑戦されている方も見かけられて、凄く嬉しいです。
このアドベントカレンダーも一つのコミュニティの恩恵を受けられる場所だと思います。
素敵な文化を維持するためにも、今年も貢献していきましょう。
Laravel6.6!?
Laravel、皆さんお気づきですか。
もうLaravel6.6が出てますよ/(^o^)\
あれ?チョット前までLaravel5.8じゃなかった?
半年に一回くらいで0.1上がってたよね?
そしてこんなふうに思う人もいるかもしれません。
『『『こんなのバージョンアップなんて出来るわけないじゃんー!!!』』』
ってことで
そうじゃないんだよという話と、アップデートってどんなことをするのかを書こうと思います。
バージョンの付け方が変わった
以前Qiitaの方でも記事を書きましたが、Laravel6.xから、セマンティックバージョニングというものが導入されました。
結論から言うと、バージョンの付け方が変わりました。
セマンティックバージョニングって?
ばっくり説明すると、
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"
もしかすると、記事を見ている時点では、数値が変わっているかもしれませんが、
これは、 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などで教えていただけますと幸いです。
ここまでお読みくださり、ありがとうございました!
おまけ
マイナーバージョンアップで、だいたいとか、殆どとかいう言葉を使ってる理由。
マイナーバージョンアップで壊しに来る言語がありましてですね?
まあ、そもそも人が作ったものなので、バグが発生したり想定外だったりすることもあるわけで。
目くじら立てすぎないのが1番だと思いますです。