カテゴリ: CodeIgniter 更新日: 2026/01/08

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をマスターして、効率的な開発を楽しみましょう。

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド