ホーム › ブログ › PHP・Laravelの保守・バージョンアップ › CodeIgniter 3 のシステム、Laravel へ移すか延命するかの判断

PHP・Laravelの保守・バージョンアップ

CodeIgniter 3 のシステム、Laravel へ移すか延命するかの判断

結論から書くと、CodeIgniter 3 のシステムをどうするかは、あと何年使うか、どのくらい変更を続けるか、誰が保守するか の3つで決まります。先に押さえておきたいのは、Laravel へ移すのも CodeIgniter 4 へ移すのも、中身は「書き換え」に近いということです。逆に延命は、サポート期間内の PHP で動かせる見込みが立つかどうかにかかっています。

古いフレームワーク全般の判断の基準は「古い PHP フレームワークのシステム、書き換えか延命かの判断基準」で説明しました。この記事では、CodeIgniter 3 に絞って、公式の情報と、移すときの具体的な対応関係を扱います。

CodeIgniter 3 の現状を公式の情報で確かめる

2026年11月4日に公式のページで確認した内容です。

  • 最新版は 3.1.13。 CodeIgniter 3 の変更履歴では、3.1.13 のリリース日は2022年3月3日で、これが最新です。
  • 要件の記載は古い PHP が前提。 CodeIgniter 3 のサーバー要件には「PHP 5.6 以上を推奨」とあり、PHP 8 系での動作についての記載はありません。
  • CodeIgniter 4 との互換性は無い。 3.x から 4.x への移行の案内には、CodeIgniter 4 はフレームワークの書き直しで後方互換性がなく、アップグレードというより、アプリケーションの変換と考えるほうが適切だと書かれています。
  • CodeIgniter 4 は新しい PHP が前提。 CodeIgniter 4 のサーバー要件では PHP 8.2 以上が必要で、PHP 8.5 で使うには 4.7.0 以上が必要です。

一方で、PHP のサポート期限は、PHP 8.2 が2026年12月31日、PHP 8.3 が2027年12月31日です。つまり CodeIgniter 3 を使い続けるなら、新しい PHP への対応は、フレームワーク本体も含めて自分たちで持つ ことになります。

3つの選択肢

選択肢 内容 向いている状況 注意点
延命 CodeIgniter 3 のまま、サポート期間内の PHP で動くように直す 変更が少ない。数年のうちに入れ替えや廃止の予定がある フレームワーク本体の修正も自分で持つ。PHP を上げるたびに同じ確認が要る
CodeIgniter 4 へ変換 同じ系統の新しいフレームワークへ移す CodeIgniter の書き方に慣れた体制で、構成を近く保ちたい 公式のとおり互換性は無く、アプリケーションの変換になる
Laravel へ移行 別のフレームワークで作り直す 長く使い、機能の追加が続く。Laravel を保守できる体制がある 毎年メジャー版が出て、各版のセキュリティ修正は2年。定期的な更新が前提

Laravel について補足すると、公式のリリースノートのとおり、メジャーバージョンは毎年出て、各バージョンのセキュリティ修正は2年です。移した後も、使っているバージョンのセキュリティ修正が終わる前に次のバージョンへ上げる作業を、保守の計画に入れておく必要があります。移すこと自体より、移した後に更新を続けられるかのほうが、長い目で見ると重要です。

延命する場合の作業

延命では、まず検証環境で移行先の PHP にして動かし、エラーと警告を洗い出します。直す対象は、自前のコードと、system/ ディレクトリにあるフレームワーク本体の両方です。

本体に手を入れる場合は、元の 3.1.13 からの差分を必ず記録します。どこを直したかが分からなくなると、次に PHP を上げるときに、同じ調査を一からやり直すことになります。本体も含めて git で管理し、本体の修正は独立したコミットに分けておくと、後から追えます。

PHP 8.2 の動的プロパティの警告は、PHP の公式の説明のとおり、クラスに #[\AllowDynamicProperties] 属性を付けると出なくなります。ただしこれは警告を止める方法で、コードの書き方が新しくなるわけではありません。どのクラスに付けたかも、差分として記録しておきます。

判断の軸

次の順に考えると整理しやすくなります。

  1. あと何年使うか。 数年のうちに業務の入れ替えや廃止の予定があるなら、延命が有力です。大きな投資を回収する時間がありません。
  2. 変更の頻度。 機能の追加や変更が今後も続くなら、移行の効果が大きくなります。変更がほとんど無いなら、延命で足ります。
  3. 誰が保守するか。 社内か外部か。保守する人が慣れているフレームワークを選ぶと、移した後の費用を抑えられます。
  4. 延命の見込み。 検証環境で PHP 8.3 以上にして動かし、フレームワーク本体と自前のコードでどれだけ問題が出るかを調べます。PHP 8.2 で動的プロパティの作成が非推奨になったことなど、新しい PHP の変更がどこに影響するかは、実際に動かして確かめるのが確実です。
  5. 規模と構造。 コントローラに処理が集中しているか、モデルに分かれているか。データベースの処理が整理されていれば、移す作業は見積もりやすくなります。

延命と移行は、どちらか一方でなくても構いません。期限が迫っているなら、まず延命でサポート期間内の PHP に乗せ、その間に移行を計画する、という順番もあります。

Laravel へ移すときの対応関係

移すと決めた場合に、主な部品がどう対応するかの目安です。

CodeIgniter 3 Laravel 移すときの注意
application/config/routes.php と URL の自動の対応 routes/web.php すべての URL を明示的に定義する必要がある
application/controllers/ app/Http/Controllers/ 処理の多いコントローラは、移すときに分ける
application/models/($this->db のクエリビルダ) Eloquent、またはクエリビルダ SQL の結果が変わらないかを確かめる
application/views/ Blade のテンプレート 出力のエスケープの扱いを確認する
フォームのバリデーション バリデーション、フォームリクエスト エラーメッセージの文言を合わせる
セッションのライブラリ セッション 形式が違うので、切り替えるとログインし直しになる
libraries/ helpers/ サービスのクラス、ヘルパー 使われていないものは移さない

特に注意したいのが URL です。CodeIgniter 3 は、公式の URL の説明のとおり、example.com/class/function/ID の形で、URL の区切りがそのままコントローラとメソッドに対応します。ルートの定義に書かれていない URL も動いているので、アクセスログと照らし合わせて、実際に使われている URL を洗い出してから移します。

段階的に移す場合の進め方

全部を一度に移さず、機能ごとに移すこともできます。

  1. 入口で振り分ける。 Web サーバーの設定で、移した URL だけを Laravel へ、残りを CodeIgniter 3 へ渡します。
  2. データベースは共有する。 新旧の両方から同じテーブルを読み書きするので、移している間はテーブルの構造を大きく変えません。
  3. ログインの扱いを先に決める。 セッションの形式が違うため、新旧をまたいでログインを保つ方法を最初に決めます。段階移行では、ここに手間がかかりやすくなります。
  4. 移した機能の古いコードは削除する。 残すと、どちらが使われているのか分からなくなります。

h-system でできること

h-system では、CodeIgniter 3 で作られたシステムについて、延命、CodeIgniter 4 への変換、Laravel への移行のどれが合うかを、ソースコードとサーバー環境を調べたうえでご説明しています。延命の見込みを確かめるために、検証環境で新しい PHP に上げたときの問題を洗い出す調査だけのご依頼も可能です。初回のご相談と概算のお見積りは無料で、詳細な調査は有償です。範囲と費用は着手前にご案内します。

TOP