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

CodeIgniter 4の仕組みを初心者向けにやさしく解説【MVCの基本】

CodeIgniter 4の仕組みを初心者向けにやさしく解説【MVCの基本】
CodeIgniter 4の仕組みを初心者向けにやさしく解説【MVCの基本】

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

生徒

「先生、CodeIgniter 4を使ってみたいんですが、どういう仕組みで動いているんですか?」

先生

「CodeIgniter 4は、MVCという仕組みを使ってプログラムを整理しています。これを理解すると、開発がとても楽になりますよ。」

生徒

「MVCって何ですか?難しそうですね…」

先生

「大丈夫です。レストランに例えると分かりやすいので、一緒に見ていきましょう!」

1. MVCとは?レストランで例えて理解しよう

1. MVCとは?レストランで例えて理解しよう
1. MVCとは?レストランで例えて理解しよう

MVCとは、Model(モデル)、View(ビュー)、Controller(コントローラー)の頭文字を取ったもので、Webアプリケーションを作るときの設計パターンです。プログラムを役割ごとに分けて整理する方法で、CodeIgniter 4でもこの仕組みを採用しています。

レストランで例えると分かりやすいです。View(ビュー)は、お客さんが見るメニュー表や料理そのものです。つまり、ユーザーが実際に見る画面(HTML)のことを指します。

Controller(コントローラー)は、ウェイターさんです。お客さんの注文を聞いて、キッチンに伝え、できた料理をお客さんに運びます。プログラムでは、ユーザーからのリクエストを受け取り、必要な処理を指示して、結果を画面に表示する役割です。

Model(モデル)は、キッチンです。食材(データ)を扱い、料理(データ処理)を作ります。プログラムでは、データベースとのやり取りやビジネスロジックを担当します。

この3つが連携することで、効率的で分かりやすいプログラムが作れます。それぞれの役割が明確なので、複数人で開発するときも、誰がどこを担当するか分けやすくなります。

2. CodeIgniter 4のフォルダ構成を理解しよう

2. CodeIgniter 4のフォルダ構成を理解しよう
2. CodeIgniter 4のフォルダ構成を理解しよう

CodeIgniter 4をインストールすると、いくつかのフォルダが作られます。初心者の方は、まずこの構成を理解することが大切です。主要なフォルダを見ていきましょう。

appフォルダは、あなたが開発するプログラムを置く場所です。この中に、さらにControllers、Models、Viewsというフォルダがあり、それぞれMVCの各要素を配置します。ほとんどの開発作業は、このappフォルダ内で行います。

publicフォルダは、Webブラウザから直接アクセスできる公開フォルダです。この中にindex.phpという入口ファイルがあり、すべてのリクエストはここを通ります。また、CSS、JavaScript、画像などの静的ファイルもここに配置します。

systemフォルダは、CodeIgniter 4本体のプログラムが入っています。基本的にこのフォルダは触りません。フレームワークの核となる機能が詰まっている場所です。

writableフォルダは、ログファイルやキャッシュファイルなど、プログラムが書き込みを行うファイルを保存する場所です。このフォルダには書き込み権限が必要です。

3. Controller(コントローラー)の役割と書き方

3. Controller(コントローラー)の役割と書き方
3. Controller(コントローラー)の役割と書き方

Controllerは、MVCの中心的な役割を担います。ユーザーからのリクエストを最初に受け取り、必要に応じてModelからデータを取得し、Viewに渡して画面を表示します。まさにウェイターさんのように、すべてを取りまとめる存在です。

CodeIgniter 4では、Controllerはapp/Controllersフォルダに配置します。ファイル名は大文字で始まり、クラス名と一致させる必要があります。例えば、Home.phpというファイルなら、中身はHomeクラスになります。

以下は、シンプルなControllerの例です。


<?php
namespace App\Controllers;

class Home extends BaseController
{
    public function index()
    {
        // データを準備
        $data = [
            'title' => 'ホームページ',
            'message' => 'CodeIgniter 4へようこそ!'
        ];
        
        // Viewを表示
        return view('home_view', $data);
    }
}

このコードでは、HomeクラスがBaseControllerを継承しています。継承とは、親クラスの機能を引き継ぐことです。index()メソッドは、このControllerのデフォルトメソッドで、URLで/homeにアクセスしたときに実行されます。$data配列にデータを入れて、view()関数でViewファイルに渡しています。

4. View(ビュー)でHTMLを作成する

4. View(ビュー)でHTMLを作成する
4. View(ビュー)でHTMLを作成する

Viewは、ユーザーに表示されるHTML画面を作成する部分です。Controllerから受け取ったデータを使って、動的にHTMLを生成します。デザインやレイアウトに関する部分は、すべてViewに記述します。

Viewファイルは、app/Viewsフォルダに配置します。ファイル名は小文字で、拡張子は.phpです。HTMLの中にPHPコードを埋め込むことができるので、データを表示したり、繰り返し処理をしたりできます。

先ほどのControllerに対応するViewファイルの例を見てみましょう。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title><?= $title ?></title>
</head>
<body>
    <h1><?= $title ?></h1>
    <p><?= $message ?></p>
    <p>現在の時刻: <?= date('Y年m月d日 H:i:s') ?></p>
</body>
</html>

という書き方で、Controllerから渡されたデータを表示できます。これはの省略形で、短く書けるので便利です。HTMLの中にPHPを混ぜて書くことで、動的なページが作れます。

Viewには複雑なロジックは書かず、あくまで表示に関することだけを記述するのがポイントです。データの加工や計算は、ControllerやModelで行います。

5. Model(モデル)でデータベースを操作する

5. Model(モデル)でデータベースを操作する
5. Model(モデル)でデータベースを操作する

Modelは、データベースとのやり取りを担当します。データの保存、取得、更新、削除などの処理を記述します。CodeIgniter 4では、Modelを使うことで、複雑なSQL文を書かなくても、簡単にデータベース操作ができます。

Modelファイルは、app/Modelsフォルダに配置します。ファイル名も大文字で始まり、一般的にテーブル名の単数形を使います。例えば、usersテーブルならUserModel.phpというファイル名にします。

以下は、基本的なModelの例です。


<?php
namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table = 'users';
    protected $primaryKey = 'id';
    protected $allowedFields = ['name', 'email', 'age'];
    
    // 全ユーザーを取得するメソッド
    public function getAllUsers()
    {
        return $this->findAll();
    }
    
    // 特定のユーザーを取得するメソッド
    public function getUserById($id)
    {
        return $this->find($id);
    }
}

$tableには対応するテーブル名、$primaryKeyには主キーのカラム名、$allowedFieldsには更新を許可するカラム名を配列で指定します。findAll()は全データを取得し、find($id)は指定したIDのデータを取得します。

Modelを使うことで、SQLインジェクション対策も自動的に行われるため、セキュリティ面でも安全です。

6. MVCの連携フロー:実際の動きを追ってみよう

6. MVCの連携フロー:実際の動きを追ってみよう
6. MVCの連携フロー:実際の動きを追ってみよう

ここまでMVC各要素を見てきましたが、実際にユーザーがWebページにアクセスしたとき、どのような流れで処理が進むのか、具体的に見ていきましょう。

まず、ユーザーがブラウザでURLにアクセスします。例えば、http://example.com/users/profile/5というURLにアクセスしたとします。このリクエストは、public/index.phpを通してCodeIgniter 4に渡されます。

次に、ルーティング設定に基づいて、適切なControllerとメソッドが呼び出されます。この場合、Usersコントローラーのprofile()メソッドが実行され、パラメータとして5が渡されます。

Controllerは、必要に応じてModelを呼び出します。UserModelgetUserById(5)メソッドを呼び出して、データベースからID5のユーザー情報を取得します。

Modelがデータベースに問い合わせて、データを取得します。取得したデータは、ModelからControllerに返されます。

Controllerは、Modelから受け取ったデータを整形し、Viewに渡します。view('profile_view', $data)のように、Viewファイルとデータを指定します。

最後に、ViewがHTMLを生成し、ブラウザに表示されます。ユーザーは、ID5のユーザー情報が表示されたプロフィールページを見ることができます。

7. ルーティング設定でURLとControllerを結びつける

7. ルーティング設定でURLとControllerを結びつける
7. ルーティング設定でURLとControllerを結びつける

ルーティングとは、URLとControllerのメソッドを結びつける設定のことです。どのURLにアクセスしたときに、どのControllerのどのメソッドを実行するかを決定します。

CodeIgniter 4では、app/Config/Routes.phpファイルでルーティングを設定します。デフォルトでは、/controller名/メソッド名/パラメータという形式でURLが構成されますが、カスタムルートを定義することもできます。

以下は、ルーティング設定の例です。


<?php
// app/Config/Routes.phpでの設定例
$routes->get('/', 'Home::index');
$routes->get('about', 'Pages::about');
$routes->get('contact', 'Pages::contact');
$routes->get('users/(:num)', 'Users::profile/$1');
$routes->post('login', 'Auth::login');

get()はGETリクエスト、post()はPOSTリクエストを処理します。(:num)は数字のパラメータを表し、$1でその値をメソッドに渡せます。例えば、/users/10にアクセスすると、Usersコントローラーのprofile()メソッドに10が渡されます。

カスタムルートを設定することで、分かりやすいURLを作ることができ、SEO対策にもなります。

8. 名前空間(Namespace)の理解

8. 名前空間(Namespace)の理解
8. 名前空間(Namespace)の理解

CodeIgniter 4では、名前空間という仕組みを使っています。名前空間とは、クラス名の衝突を避けるための仕組みで、プログラムを整理するために使われます。本棚で例えると、同じタイトルの本でも、棚が違えば区別できるようなものです。

CodeIgniter 4のControllerやModelの先頭には、namespace App\Controllers;namespace App\Models;という記述があります。これは、このクラスがどの名前空間に属しているかを示しています。

他のクラスを使うときは、use文でインポートします。例えば、Modelを使うときはuse CodeIgniter\Model;と書きます。これにより、そのクラスを短い名前で使えるようになります。

名前空間を使うことで、大規模なプロジェクトでもクラス名が重複せず、整理された状態を保てます。最初は難しく感じるかもしれませんが、基本的なパターンを覚えれば大丈夫です。

9. CodeIgniter 4の新機能と改善点

9. CodeIgniter 4の新機能と改善点
9. CodeIgniter 4の新機能と改善点

CodeIgniter 4は、旧バージョンのCodeIgniter 3から大幅に改善されています。まず、PHP 7.4以上が必須になり、最新のPHP機能を活用できるようになりました。これにより、パフォーマンスが向上し、より安全なコードが書けます。

名前空間のサポートが追加され、モダンなPHP開発のスタイルに対応しました。また、PSR-4オートローディングに対応し、クラスの読み込みが自動化されています。

環境設定の改善も大きな特徴です。.envファイルを使って、開発環境、本番環境などで異なる設定を簡単に切り替えられます。データベースのパスワードなど、機密情報を安全に管理できます。

コマンドラインインターフェース(CLI)も強化され、php sparkコマンドでControllerやModelの雛形を自動生成できます。これにより、開発効率が大幅に向上します。

これらの改善により、CodeIgniter 4は、よりモダンで使いやすいフレームワークになっています。

10. MVCを使うメリットと実践のポイント

10. MVCを使うメリットと実践のポイント
10. MVCを使うメリットと実践のポイント

MVCパターンを使う最大のメリットは、コードの整理整頓です。それぞれの役割が明確なので、どこに何を書けばいいか迷いません。バグが発生したときも、問題箇所を特定しやすくなります。

チーム開発でも威力を発揮します。デザイナーはViewを、バックエンドエンジニアはModelとControllerを担当するなど、役割分担がしやすくなります。お互いの作業が干渉しにくいので、効率的に開発を進められます。

保守性と拡張性も向上します。機能を追加したり、デザインを変更したりするときも、影響範囲が限定されるので、安心して修正できます。

実践のポイントとしては、Viewには複雑なロジックを書かないことです。データの表示だけに専念させましょう。Modelにはデータベース操作を集約し、Controllerは橋渡し役に徹することが大切です。

最初は慣れないかもしれませんが、MVCの考え方を身につければ、どんなWebアプリケーションでも整理された美しいコードが書けるようになります。CodeIgniter 4でMVCをマスターして、効率的な開発を楽しみましょう。

まとめ

まとめ
まとめ

ここまでCodeIgniter 4の仕組みとMVCの基本について、初心者の方にも分かりやすいように丁寧に解説してきました。CodeIgniter 4はPHPフレームワークの中でも学習コストが比較的低く、Webアプリケーション開発の基礎を身につけるのに最適なフレームワークです。特にMVCという設計パターンを理解することで、Controller、Model、Viewそれぞれの役割が明確になり、コードの見通しが一気に良くなります。

MVCとは、Modelがデータベース操作やビジネスロジックを担当し、ViewがHTMLを生成して画面表示を行い、Controllerがその橋渡しを行う仕組みでした。レストランの例で考えると、キッチンがModel、ウェイターがController、料理やメニュー表がViewにあたります。この役割分担を意識するだけで、PHPプログラミングの理解が深まります。

CodeIgniter 4では、appフォルダの中にControllers、Models、Viewsが用意されており、初心者でも迷いにくいフォルダ構成になっています。publicフォルダがエントリーポイントとなり、すべてのリクエストはindex.phpを経由してルーティング設定に従い適切なControllerへ振り分けられます。この流れを正しく理解することが、Webアプリケーション開発の第一歩です。

Controllerではリクエストを受け取り、必要に応じてModelを呼び出してデータを取得し、その結果をViewへ渡します。例えば、ユーザー一覧ページを表示する場合は、UserModelでデータベースからユーザー情報を取得し、Controllerで配列にまとめてViewへ渡します。Viewでは受け取ったデータをHTMLに埋め込み、動的なWebページを生成します。

実際の連携イメージをもう一度確認してみましょう。以下は、ユーザー一覧を表示する簡単なサンプルです。MVCの流れを復習する意味でも、コードの役割を意識しながら読み進めてください。


<?php
namespace App\Controllers;

use App\Models\UserModel;

class Users extends BaseController
{
    public function index()
    {
        $userModel = new UserModel();
        $data['users'] = $userModel->getAllUsers();
        return view('users_list', $data);
    }
}

上記のControllerではUserModelを利用して全ユーザーを取得しています。次にView側の例です。表示に専念している点が重要です。


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ユーザー一覧</title>
</head>
<body>
    <h1>ユーザー一覧ページ</h1>

    <?php foreach ($users as $user): ?>
        <p>
            名前: <?= $user['name']; ?> /
            メール: <?= $user['email']; ?>
        </p>
    <?php endforeach; ?>

</body>
</html>

このように、Controllerは制御、Modelはデータ操作、Viewは画面表示という原則を守ることで、保守性の高いWebシステムを構築できます。大規模開発やチーム開発でも役割分担がしやすく、バグの原因特定も容易になります。

また、ルーティング設定を活用することで、分かりやすいURL設計が可能になります。例えば、usersやprofileといった意味のあるURLを設計することで、ユーザビリティ向上にもつながります。CodeIgniter 4はPSR規約や名前空間にも対応しているため、モダンなPHP開発環境で実践的なスキルを身につけられます。

初心者の方はまず、Controllerを一つ作り、簡単なViewを表示するところから始めてみてください。その次にModelを追加し、データベース接続やCRUD処理を実装していくと理解が深まります。MVCの流れを何度も手を動かして確認することが、最短で上達するコツです。

CodeIgniter 4を通してMVCアーキテクチャを学ぶことは、他のPHPフレームワークやWebアプリケーション開発にも応用できます。基礎を丁寧に積み上げていけば、ログイン機能や投稿機能、管理画面なども自分の力で実装できるようになります。今回学んだMVCの基本を何度も復習し、実践で使いこなせるようにしていきましょう。

先生と生徒の振り返り会話

生徒

「先生、MVCの流れがやっとつながりました。Controllerが真ん中で調整しているんですね。」

先生

「その通りです。CodeIgniter 4ではControllerが司令塔の役割を果たします。そしてModelがデータベース操作、Viewが画面表示です。」

生徒

「Viewにロジックを書きすぎないことも大切だと分かりました。表示に集中させるんですね。」

先生

「その意識が重要です。役割分担を守ることで、保守しやすいWebアプリケーションになります。MVCを理解すれば、PHPフレームワーク全般の理解も深まりますよ。」

生徒

「まずは簡単なユーザー一覧機能から作って、CodeIgniter 4のMVC構造に慣れていきます。」

先生

「それが一番の近道です。基礎を固めれば、より高度な機能にも挑戦できます。一歩ずつ確実に身につけていきましょう。」

カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.3
Java&Spring記事人気No3
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.6
Java&Spring記事人気No6
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
No.7
Java&Spring記事人気No7
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.8
Java&Spring記事人気No8
Laravel
LaravelでRemember Me(ログイン状態保持)機能を実装する方法を完全解説!初心者でも安心の認証入門