1. HOME
  2. ブログ
  3. IT技術
  4. Laravelフレームワークのバージョンアップを実施する
Laravelフレームワークのバージョンアップを実施する

Laravelフレームワークのバージョンアップを実施する

Laravelとは?

本日は、業務で実施しましたLaravelのバージョンアップ対応についての知見を記事にしようと思います。

多くのシステム開発やソフトウェア開発では、エンジニアの開発を支援するフレームワークが多数存在しています。

その中でも、LaravelはPHPのフレームワークの一つで、マイクロソフトの.NETの開発に参加していたテイラー(Taylor Otwell)氏が開発しました。

2011年リリースで、もはや世界的に大きく普及したフレームワークと言っても過言ではないかと思います。

その他PHPのフレームワークとして

  • CakePHP
  • Symfony
  • CodeIgniter
  • ZendFramework
  • FuelPHP

などがあります。

もともと、Laravelが登場する前、CakePHPがPHPフレームワークのトップシェアでした。

CakePHPは、ケーキを焼くように簡単にPHPが開発できるというコンセプトを持ったフレームワークを目指して名付けられたとも言われています。

また、Symfonyは保守性と安全性に重視し、コーディング規約が厳密で堅牢なイメージです。

Symfonyは以前少しだけ触れたことがありますが、Modelに相当するEntityに加え、Repository層が必要になります。

Laravelのフレームワークに関して、実は裏でSymfonyが動いていたりするため、Symfonyを理解していると使いやすいかもしれません。

Laravelのメリット・デメリット

メリット

  • コードが分かりやすく、学習コストが低い
  • プログラムの拡張性と自由度が高い
  • 機能が豊富
  • データベース操作が容易

特に感じるのは、プログラムの自由度です。

Laravelでも、SymfonyのようにService層やRepository層を利用するようなレイヤードアーキテクチャ(DI利用)で開発することはできるものの、公式ドキュメントしてそのような利用方法が載っておりません。

正直、使わなくても開発ができちゃうため、そう言った意味で自由性の高いフレームワークであることがわかるかと思います。

デメリット

  • コードが複雑化しやすい
  • 機能豊富ゆえ、処理速度がそこまで速くない

Laravelのドキュメントを見るとわかりますが、機能が豊富です。

(簡易的なサイトを作るとなると過剰な機能になりやすいかもしれません)

今回のアップデート概要

現在のバージョンが5.6で、とうの昔にサポートが切れています...

目標はもちろん最新バージョンの9.xですが、まずは7.xまで上げることを目標に取り組みました。

アップデートの手順

フレームワークのアップデートガイドを参考に、該当箇所の修正

Laravelに限らず、各バージョンごとにアップデートガイドを用意しています。

そのアップデートガイドを確認し、ソースに影響ある変更点をピックアップし、調査を進めます。

https://readouble.com/laravel/5.7/ja/upgrade.html
https://readouble.com/laravel/5.8/ja/upgrade.html
https://readouble.com/laravel/6.x/ja/upgrade.html
https://readouble.com/laravel/7.x/ja/upgrade.html

もちろんですが、1バージョンずつ順を追って上げていくのが良いです。飛ばしてアップデートすると、影響ある変更点を見逃してしまう可能性があります。

基本は上記手順に則って修正を進めることで問題なくアップデートすることができます。

また、LaravelのGithubではBranchがバージョンごとに切られているため、バージョン間のCompareで差分を確認することも可能です。

Ver.5.8と6.xの差分を確認する

言語のアップデートガイドを確認

フレームワークのバージョンで言語のバージョンの要件も変わっています。

今回Laravelのバージョンアップに影響し、言語側のPHPもアップデートが必要となりました。

PHPにもアップデートガイドがありますのでフレームワーク同様、ソースに影響ある変更点をピックアップし、調査を進めます。

https://www.php.net/manual/ja/migration73.php

インストール済ライブラリ関係のアップデート有無を確認

composerでインストール済みのライブラリ関係がLaravelのバージョンアップで影響を受けないかを確認していきます。

  1. アップデート後、該当ライブラリが正常に動くかの確認
  2. ライブラリのGithubのReleasesを確認し、サポートされているかを確認

PHPのバージョンの兼ね合いもありますので、必要に応じて対応するようにアップデートしましょう。

アップデート後、どういった内容が変更になっているかをGithubのReleasesを見て確認しておきましょう。

インフラ側のサポートを確認、アップデート手順の確認

実際にサービスが動いているインフラ側のアップデートが必要かを確認します。

本業務で取り扱っているのが、GoogleCloudPlatformのAppEngineを利用しています。

AppEngineは、ランタイムの切り替えで簡単にPHPのバージョンアップが可能であることがわかります。

https://cloud.google.com/appengine/docs/standard/php7/runtime?hl=ja#php-7.3

また、定時バッチ実行をGoogleCloudPlatformのComputeEngine(仮想マシン)利用しているため、Linux Debian環境のPHPアップデートが必要となります。

また、Composerも1から2にアップデートする対応を取りました。

実際に仮想マシン環境のアップデートを実施した手順は下記となります。

  1. apt-getコマンドの有効化
  2. PHP7.3のインストールと切り替え
  3. Composer2のインストールと切り替え

apt-getコマンドの有効化

apt-getは、パッケージ(ソフト)のインストールやアンインストールを簡単にするためのツールです。

実際に利用していたComputeEngineではapt-getコマンドが使える環境ではなかったので、apt-getを有効化させました。

実際のエラーは異なっていたかもしれませんが、リポジトリの情報が変更された影響でアップデートできなくなっていました。

下記のコマンドで対応可能です。

PHP7.3のインストールと切り替え

現在インストールされているのは、PHP7.2ですので、7.3をインストールします。

フォールバックのことも考慮する必要があるため、今のバージョンに対し、追加バージョンを入れ、切り替えるように対応します。

packages.sury.org/php のリポジトリ情報を追加し、パッケージ・リストの更新を行います。

その後、使用バージョンの確認し、正常にインストールされているかを確認します。

Composer2のインストールと切り替え

Ver.9のLTSが外れた理由とは?

本来、Laravel待望の新バージョン9がLTS(Long Term Support)で発表され、多くの人が期待を膨らませてアップデートを検討していたかと思います...

しかし、下記を確認する限り、LTSではなくなってます...

https://github.com/laravel/docs/blob/9.x/releases.md

あれ、LTSやめた?見間違い???

と思っていたのですが、どうやらLTSが外れてしまったのには理由があるようです。

下記Pull Requestを見ると納得です。

https://github.com/symfony/symfony/pull/45377

簡単にご説明します。

冒頭でもお話ししましたが、Laravelは裏でSymfonyが動いています。そのSymfonyに影響の大きいPRが出ており、PHPの最低バージョンを8.1に引き上げるというものでした。

上記PRは2月25日にマージされており、Symfony6.1からPHP8.1以上の要件が確定しました。

しかしながら現状、Laravel9のPHPサポートは、8.0~8.1となっているので、上記理由からLTSを外したのではないかと言われています。

上記のこともあって、今度リリースされるLaravel10に関してはPHP8.1以上が要件として既に組まれています。

最新のLTSが使えるようになるのはまだまだ先になりそうです...泣

こまめなアップデートを

ついつい後回しにしがちなアップデート対応ですが、対応が遅れれば遅れるほど大変になります...

特に、セキュリティー関わるところですので、何かがあっては遅いです。

また、近々Laravelのバージョン9を目指してアップデート対応をすることになると思います。

Laravel9に上げて安心!という訳ではなく、Release Notesにもあります通り、2024年2月がセキュリティサポート期限です。

エンジニアとして、常にフレームワークや言語のバージョンサポート期限を意識し、影響が大きくなる前にアップデートは進めましょう!

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア