カテゴリ: CodeIgniter 更新日: 2026/02/03

CodeIgniter 3とCodeIgniter 4の違いとは?移行前に知るべきポイントを徹底解説

CodeIgniter 3とCodeIgniter 4の違いとは?移行前に知るべきポイント
CodeIgniter 3とCodeIgniter 4の違いとは?移行前に知るべきポイント

先生と生徒の会話形式で理解しよう

生徒

「PHPのフレームワークを勉強したいのですが、CodeIgniterにはバージョン3と4があると聞きました。何が違うのでしょうか?」

先生

「CodeIgniter 3(CI3)とCodeIgniter 4(CI4)は、実は中身が別物と言ってもいいほど進化しています。車で例えるなら、ガソリン車と電気自動車くらい仕組みが違いますね。」

生徒

「そんなに違うんですか!初心者がこれから始めるなら、どちらを覚えればいいですか?」

先生

「これからの主流はCI4ですが、まずは何がどう変わったのか、移行のポイントを含めて一緒に見ていきましょう!」

1. フレームワークとは何か?初心者にも分かりやすく解説

1. フレームワークとは何か?初心者にも分かりやすく解説
1. フレームワークとは何か?初心者にも分かりやすく解説

プログラミングを始めたばかりの方にとって、「フレームワーク」という言葉は難しく感じるかもしれません。簡単に言うと、フレームワークとは「アプリを作るための便利な土台(テンプレート)」のことです。例えば、プラモデルを作るときに、一からプラスチックの板を削り出すのは大変ですよね。でも、最初から腕や足のパーツが揃っていれば、それを組み立てるだけで完成します。プログラミングにおけるフレームワークも、ログイン機能やデータの保存機能といった「よく使うパーツ」が最初から用意されている道具箱のようなものです。

PHPという言葉自体はプログラミング言語の名前ですが、そのPHPを効率よく使うための道具がCodeIgniter(コードイグナイター)です。CodeIgniterは、他のフレームワークに比べて動作が非常に軽く、ルールが厳しすぎないため、初心者でも扱いやすいことで知られています。しかし、歴史が長いため、古いルールで作られた「バージョン3」と、現代の最新技術に合わせた「バージョン4」が存在します。この違いを知ることが、Web開発の第一歩となります。

2. PHPのバージョンの違いと動作環境の変化

2. PHPのバージョンの違いと動作環境の変化
2. PHPのバージョンの違いと動作環境の変化

CodeIgniter 3と4の最も大きな違いの一つは、動かすために必要な「PHPのバージョン」です。PHP自体も日々進化しており、古い書き方はどんどん新しい効率的な書き方に置き換わっています。CI3はかなり古いPHP(バージョン5.6以上)でも動きましたが、CI4は最新のPHP(バージョン7.4以上、推奨は8.1以降)を必要とします。

「バージョンが上がると何が良いの?」と思うかもしれませんが、最新のPHPは処理速度が劇的に速くなっており、セキュリティ(安全面)も強化されています。古いパソコンで最新のゲームが動かないのと同じように、最新のフレームワークを使うためには、最新のPHPというエンジンが必要なのです。CI4を使うことで、自動的に安全で速いプログラムを書くための環境が整うことになります。

3. ディレクトリ構造と「名前空間(Namespace)」の導入

3. ディレクトリ構造と「名前空間(Namespace)」の導入
3. ディレクトリ構造と「名前空間(Namespace)」の導入

プログラムのファイルを整理する「フォルダの分け方(ディレクトリ構造)」も大きく変わりました。CI3では一つのフォルダに多くのファイルが詰め込まれていましたが、CI4では「publicフォルダ」という概念が重要視されています。これは、インターネット上に公開するファイルと、システムを動かす大事な設定ファイルを完全に分ける仕組みです。これにより、外部からの不正なアクセスを防ぎやすくなっています。

また、CI4からは「名前空間(Namespace)」という仕組みが必須になりました。これは、プログラムの世界における「名字」のようなものです。例えば、同じ「田中さん」という名前の命令が二つあっても、「東京の田中さん」と「大阪の田中さん」と区別できれば混乱しません。CI4では、この名字をつけることで、大規模な開発でも命令がぶつからないよう工夫されています。初心者のうちは、コードの先頭に「App\Controllers」のような一文を書く決まりができた、と覚えておけば大丈夫です。


namespace App\Controllers;

use CodeIgniter\Controller;

class Home extends Controller
{
    public function index()
    {
        return view('welcome_message');
    }
}

上記のコードは、CI4で最も基本的な画面を表示するための命令(コントローラー)です。先頭に「namespace」と書いてあるのが、CI4ならではの特徴ですね。

4. オートローディングとComposerの標準利用

4. オートローディングとComposerの標準利用
4. オートローディングとComposerの標準利用

プログラムを作っていると、他の人が作った便利な道具を使いたい場面が出てきます。CI3では、それらの道具を手動でダウンロードしてフォルダに配置していましたが、CI4では「Composer(コンポーザー)」という管理ツールを使うのが一般的になりました。Composerは、必要な道具を自動でダウンロードし、いつでも使えるように準備してくれる「専属のアシスタント」のような存在です。

また、必要なファイルを自動で読み込んでくれる「オートローディング」機能も強化されました。昔は「あのファイルを読み込んで!」といちいち指示(includeやrequire)を書く必要がありましたが、CI4では名前さえ正しく書いておけば、システムが自動で見つけてきてくれます。これにより、コードがスッキリして書きやすくなりました。


// CI4でのライブラリ呼び出しイメージ
// 昔のように手動でロードしなくても、使いたい時にすぐに呼び出せます
$email = \Config\Services::email();
$email->setTo('example@test.com');
$email->setSubject('テストメール');
$email->setMessage('これはCI4からのメール送信テストです。');
$email->send();

この例では、メールを送るためのサービスを一行で呼び出しています。非常にシンプルで分かりやすいですね。

5. データベース操作「Query Builder」と「Entity」の進化

5. データベース操作「Query Builder」と「Entity」の進化
5. データベース操作「Query Builder」と「Entity」の進化

Webサイトを作る上で欠かせないのが、情報を保存する「データベース」の操作です。CI3でも「Query Builder」という機能を使って簡単にデータの読み書きができましたが、CI4ではさらに進化し、「Entity(エンティティ)」という考え方が加わりました。

Entityとは、データベースに保存されている一行のデータを、一つの「物(オブジェクト)」として扱う仕組みです。例えば、ユーザー情報をただの文字の集まりとしてではなく、「ユーザーさん」という実体として扱うことで、そのデータに対して「この人のフルネームを取得する」といった特別な動きを簡単に追加できるようになります。これにより、データの扱いがより直感的になりました。


// データベースからIDが1のユーザーを取得する例
$userModel = new \App\Models\UserModel();
$user = $userModel->find(1);

// 画面に名前を表示する
echo "こんにちは、" . $user->name . "さん!";

実行結果は以下のようになります。


こんにちは、田中太郎さん!

6. ルーティングの設定方法が変わった

6. ルーティングの設定方法が変わった
6. ルーティングの設定方法が変わった

「URLにアクセスしたときに、どのプログラムを動かすか」を決める仕組みを「ルーティング」と呼びます。CI3では、URLの形から自動的にプログラムを探し出す「マジックルーティング」が主流でしたが、CI4ではセキュリティを考慮して、「このURLならこのプログラムを動かす」と、一つずつ丁寧に設定することが推奨されています。

一見面倒に感じるかもしれませんが、これによって「知らない間に予期せぬプログラムが実行されてしまう」という事故を防ぐことができます。また、URLの形を自由に変えやすくなったため、検索エンジンに好まれやすい(SEOに強い)URL構造を簡単に作れるようになりました。


// ルーティングの設定例(Routes.php)
// 「/profile」というURLにアクセスが来たら、Profileクラスのshowメソッドを動かす
$routes->get('profile', 'Profile::show');

7. 環境変数の管理(.envファイル)の導入

7. 環境変数の管理(.envファイル)の導入
7. 環境変数の管理(.envファイル)の導入

プログラムを動かす場所には、自分のパソコン(開発環境)や、世界中に公開する本番のサーバー(本番環境)など、いくつか種類があります。CI3では、それぞれの環境に合わせて設定ファイルを書き換える必要があり、これがミスの原因になっていました。CI4では「.env(ドットエンブ)」という特別なファイルを使って、環境ごとの設定を一箇所で管理できるようになりました。

「このパスワードは自分のパソコン用」「このデータベース名は本番用」といった情報を、プログラム本体を汚さずに管理できるため、安全性が格段に向上しました。これは現代の開発現場では当たり前の手法となっており、CI4を学ぶことでプロの現場でも通用する知識が身につきます。

8. 移行前に知っておくべき最大の注意点

8. 移行前に知っておくべき最大の注意点
8. 移行前に知っておくべき最大の注意点

もし今、CI3で作られたシステムを持っていて、それをCI4にアップデートしようと考えているなら、一つ大きな注意点があります。それは「CI3からCI4への自動アップデートボタンはない」ということです。前述の通り、仕組みが根本から変わっているため、コードの大部分を書き直す必要があります。

これを「移行(マイグレーション)」と呼びますが、実質的には「CI4を使って新しく作り直す」という作業に近くなります。しかし、CI4の書き方は一度慣れてしまえば、CI3よりもずっと効率的で、ミスが起きにくい構造になっています。これから新しくプログラミングを学ぶ方は、最初からCI4を学習することをおすすめします。現代のPHPらしい、美しく整ったコードを書く楽しさを実感できるはずです。

9. 学習の進め方とCodeIgniterの魅力

9. 学習の進め方とCodeIgniterの魅力
9. 学習の進め方とCodeIgniterの魅力

ここまでCI3とCI4の違いを見てきましたが、CodeIgniterの最大の魅力は「ドキュメント(説明書)の分かりやすさ」にあります。公式の解説が非常に丁寧で、プログラミングが初めての人でも、上から順番に読んでいけば簡単なWebアプリを作れるように設計されています。他の有名なフレームワーク(Laravelなど)に比べて覚えることが少ないため、「早く形にしたい」という方には最適です。

まずは、自分のパソコンにPHPをインストールし、CI4をダウンロードして、画面に「Hello World」と表示させることから始めてみましょう。最初の一歩は小さくても、積み重ねることで本格的な予約システムやSNSのようなアプリまで作れるようになります。CodeIgniter 4は、あなたのアイデアを形にするための最高のパートナーになってくれるでしょう。

カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New2
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New3
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
New4
Symfony
Symfonyのキャッシュ機構の基本を理解しよう(HTTPとアプリ別)
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.4
Java&Spring記事人気No4
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.5
Java&Spring記事人気No5
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.6
Java&Spring記事人気No6
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.8
Java&Spring記事人気No8
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説