カテゴリ: CodeIgniter 更新日: 2026/05/24

CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで

CodeIgniterでコントローラクラスを作成する方法
CodeIgniterでコントローラクラスを作成する方法

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

生徒

「CodeIgniterでWebアプリケーションを作りたいんですが、コントローラって何ですか?」

先生

「コントローラは、ユーザーからのリクエストを受け取って、適切な処理を行う司令塔のような役割を持つものです。CodeIgniterでは、コントローラクラスを作成することで、Webページの動きを制御できます。」

生徒

「難しそうですね…どうやって作るんですか?」

先生

「大丈夫です。基本的な手順を覚えれば、誰でも簡単にコントローラクラスを作成できますよ。それでは、順番に見ていきましょう!」

1. CodeIgniterのコントローラとは?基本概念を理解しよう

1. CodeIgniterのコントローラとは?基本概念を理解しよう
1. CodeIgniterのコントローラとは?基本概念を理解しよう

CodeIgniterのコントローラは、MVCアーキテクチャにおける重要な要素の一つです。MVCとは、Model(モデル)、View(ビュー)、Controller(コントローラ)の頭文字を取ったもので、プログラムを役割ごとに分けて管理する設計手法です。

コントローラは、ユーザーがブラウザでURLにアクセスしたときに、最初に呼び出される場所です。例えるなら、レストランのウェイターのような存在です。お客さん(ユーザー)の注文(リクエスト)を受け取り、キッチン(モデル)に伝え、できあがった料理をお皿に盛り付けて(ビュー)、お客さんに提供する役割を担います。

CodeIgniterでは、コントローラクラスを作成することで、Webページの表示や、フォームから送信されたデータの処理など、さまざまな機能を実装できます。初心者の方でも、基本的なルールを守れば、簡単にコントローラを作成できるので安心してください。

2. コントローラファイルの保存場所とファイル名の規則

2. コントローラファイルの保存場所とファイル名の規則
2. コントローラファイルの保存場所とファイル名の規則

CodeIgniterでコントローラクラスを作成する前に、まずファイルをどこに保存するかを理解しましょう。コントローラファイルは、CodeIgniterプロジェクトのapp/Controllersディレクトリに保存します。このディレクトリは、すべてのコントローラファイルを管理する専用の場所です。

ファイル名には重要なルールがあります。ファイル名の最初の文字は必ず大文字にする必要があります。例えば、Welcome.phpHome.phpBlog.phpのようになります。小文字で始まるwelcome.phpのようなファイル名は、CodeIgniterでは正しく認識されません。

また、ファイル名とクラス名は一致させる必要があります。Home.phpというファイルを作った場合、その中に定義するクラス名もHomeにします。この規則を守ることで、CodeIgniterが自動的にファイルを読み込んで実行できるようになります。

3. 最もシンプルなコントローラクラスの作成方法

3. 最もシンプルなコントローラクラスの作成方法
3. 最もシンプルなコントローラクラスの作成方法

それでは、実際にコントローラクラスを作成してみましょう。最もシンプルな例として、「Hello World」と表示するコントローラを作ります。以下のコードをapp/Controllers/Hello.phpとして保存してください。


<?php

namespace App\Controllers;

class Hello extends BaseController
{
    public function index()
    {
        echo 'Hello World!';
    }
}

このコードを見ていきましょう。namespace App\Controllers;は、このクラスがどのグループに属するかを示す名前空間の宣言です。CodeIgniterでは、コントローラは必ずApp\Controllers名前空間に属します。

class Hello extends BaseControllerの部分で、Helloという名前のクラスを定義しています。extends BaseControllerは、CodeIgniterが用意している基本的なコントローラクラスを継承することを意味します。継承とは、親クラスの機能を引き継いで使えるようにすることです。

public function index()は、コントローラの中のメソッド(関数)です。indexメソッドは、URLで特に指定がない場合に自動的に呼び出される、デフォルトのメソッドです。このコントローラにブラウザでアクセスすると、「Hello World!」と表示されます。

4. ビューを使ってHTMLページを表示するコントローラ

4. ビューを使ってHTMLページを表示するコントローラ
4. ビューを使ってHTMLページを表示するコントローラ

実際のWebアプリケーションでは、echoで直接文字を出力するのではなく、ビューと呼ばれるHTMLテンプレートファイルを使って画面を表示します。ビューを使うことで、デザインとプログラムのロジックを分離でき、管理がしやすくなります。

以下は、ビューを読み込んで表示するコントローラの例です。


<?php

namespace App\Controllers;

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

return view('welcome_message');の部分で、app/Views/welcome_message.phpというビューファイルを読み込んで表示しています。view()関数は、CodeIgniterが提供するヘルパー関数で、ビューファイルを簡単に読み込めます。

ビューファイルには、通常のHTMLを記述します。例えば、app/Views/welcome_message.phpに以下のようなHTMLを書くことができます。


<!DOCTYPE html>
<html>
<head>
    <title>ようこそ</title>
</head>
<body>
    <h1>CodeIgniterへようこそ!</h1>
    <p>これは最初のページです。</p>
</body>
</html>

5. 複数のメソッドを持つコントローラの作成

5. 複数のメソッドを持つコントローラの作成
5. 複数のメソッドを持つコントローラの作成

一つのコントローラには、複数のメソッドを定義できます。それぞれのメソッドは、異なるURLに対応し、異なる処理を実行できます。これにより、関連する機能をまとめて管理できるようになります。

例えば、ブログ記事を管理するコントローラを考えてみましょう。記事の一覧表示、詳細表示、新規作成など、複数の機能が必要になります。以下は、複数のメソッドを持つコントローラの例です。


<?php

namespace App\Controllers;

class Blog extends BaseController
{
    public function index()
    {
        echo '記事一覧ページ';
    }

    public function show($id)
    {
        echo '記事ID: ' . $id . ' の詳細ページ';
    }

    public function create()
    {
        echo '新規記事作成ページ';
    }
}

このコントローラでは、三つのメソッドを定義しています。index()は記事一覧、show()は記事詳細、create()は新規作成の処理を行います。show()メソッドは、$idというパラメータを受け取り、URLから渡された記事番号を表示します。

URLとメソッドの対応は以下のようになります。http://example.com/blogにアクセスするとindex()が呼ばれ、http://example.com/blog/show/5にアクセスするとshow(5)が呼ばれます。このように、URLの構造とメソッド名、パラメータが自動的に結びつきます。

6. データをビューに渡すコントローラの書き方

6. データをビューに渡すコントローラの書き方
6. データをビューに渡すコントローラの書き方

コントローラからビューにデータを渡すことで、動的なWebページを作成できます。例えば、データベースから取得した情報をページに表示したり、ユーザーが入力したデータを画面に反映させたりできます。

データをビューに渡すには、view()関数の第二引数に配列形式でデータを指定します。以下の例を見てみましょう。


<?php

namespace App\Controllers;

class User extends BaseController
{
    public function profile()
    {
        $data = [
            'name' => '山田太郎',
            'age' => 25,
            'email' => 'yamada@example.com'
        ];

        return view('user_profile', $data);
    }
}

この例では、$dataという配列に、ユーザーの名前、年齢、メールアドレスを格納しています。この配列をview()関数の第二引数として渡すことで、ビューファイル内でこれらのデータを使用できます。

ビューファイル(app/Views/user_profile.php)では、以下のように配列のキーを変数名として使えます。


<!DOCTYPE html>
<html>
<head>
    <title>プロフィール</title>
</head>
<body>
    <h1><?= $name ?>のプロフィール</h1>
    <p>年齢: <?= $age ?>歳</p>
    <p>メール: <?= $email ?></p>
</body>
</html>

<?= $name ?>は、PHPの短縮記法で、変数の値を出力します。コントローラから渡されたnameageemailの値が、ビューで自動的に使えるようになります。

7. コンストラクタを使った初期化処理

7. コンストラクタを使った初期化処理
7. コンストラクタを使った初期化処理

コントローラが呼び出されたときに、最初に実行したい処理がある場合は、コンストラクタを使います。コンストラクタは、クラスのインスタンスが作成されるときに自動的に実行される特別なメソッドです。

例えば、すべてのメソッドで共通して使うデータの読み込みや、ログインチェックなどの処理をコンストラクタに書くことができます。CodeIgniterでコンストラクタを使う場合は、必ず親クラスのコンストラクタも呼び出す必要があります。

以下は、コンストラクタを使ったコントローラの例です。


<?php

namespace App\Controllers;

class Admin extends BaseController
{
    protected $adminName;

    public function __construct()
    {
        parent::__construct();
        $this->adminName = '管理者';
        echo '管理画面にアクセスしました
'; } public function dashboard() { echo $this->adminName . 'のダッシュボード'; } }

__construct()がコンストラクタメソッドです。このメソッド内でparent::__construct();を呼び出すことで、親クラス(BaseController)の初期化処理を実行しています。これを忘れると、CodeIgniterの機能が正しく動作しない可能性があるので注意してください。

コンストラクタで設定した$this->adminNameは、クラス内のすべてのメソッドから$this->adminNameとしてアクセスできます。このように、複数のメソッドで共通して使う値を保存しておくと便利です。

8. リダイレクト機能を使ったページ遷移

8. リダイレクト機能を使ったページ遷移
8. リダイレクト機能を使ったページ遷移

Webアプリケーションでは、ある処理が完了した後に別のページに移動させるリダイレクトという機能がよく使われます。例えば、フォームの送信が完了したら確認ページに移動する、ログインに成功したらトップページに移動する、といった場合に使います。

CodeIgniterでは、redirect()関数を使って簡単にリダイレクトを実装できます。この関数は、指定したURLにユーザーを自動的に転送します。リダイレクトを使うことで、ユーザーに適切なページを表示し、スムーズな操作体験を提供できます。

リダイレクトには、コントローラ名とメソッド名を指定する方法と、完全なURLを指定する方法があります。状況に応じて使い分けることで、柔軟なページ遷移を実現できます。フォーム送信後の二重送信を防ぐためにも、リダイレクトは重要な技術です。

9. コントローラでよく使う便利な機能

9. コントローラでよく使う便利な機能
9. コントローラでよく使う便利な機能

CodeIgniterのコントローラには、開発を効率化する便利な機能が多数用意されています。BaseControllerを継承することで、これらの機能を簡単に使えるようになります。

ヘルパーの読み込みは、よく使う機能の一つです。ヘルパーとは、特定の処理をまとめた便利な関数の集まりです。例えば、url_helperを読み込むと、URLを生成するbase_url()などの関数が使えるようになります。$this->helper('url');のように記述して読み込みます。

セッション管理も重要な機能です。セッションを使うと、ユーザーごとに情報を保存できます。ログイン状態の管理や、ショッピングカートの情報保存などに使われます。$this->sessionでセッションにアクセスでき、$this->session->set('key', 'value')でデータを保存、$this->session->get('key')でデータを取得できます。

リクエストオブジェクトを使うと、ユーザーから送信されたデータを取得できます。$this->request->getPost('name')でフォームのPOSTデータを、$this->request->getGet('id')でURLパラメータを取得できます。これらの機能を組み合わせることで、本格的なWebアプリケーションを構築できます。

10. コントローラ作成時の注意点とベストプラクティス

10. コントローラ作成時の注意点とベストプラクティス
10. コントローラ作成時の注意点とベストプラクティス

CodeIgniterでコントローラを作成する際には、いくつかの重要な注意点があります。まず、ファイル名とクラス名を必ず一致させることです。Blog.phpというファイルにはclass Blogと書きます。大文字小文字も正確に合わせる必要があります。

次に、コントローラには複雑な処理を書きすぎないことが推奨されます。データベース操作などの複雑な処理は、モデルに分離するべきです。コントローラは、リクエストを受け取り、適切なモデルを呼び出し、結果をビューに渡す、という橋渡し役に徹することで、コードの保守性が高まります。

セキュリティ対策も忘れてはいけません。ユーザーから受け取ったデータは必ず検証し、不正な値が入っていないかチェックします。CodeIgniterには、入力検証のための機能が用意されているので、積極的に活用しましょう。また、データベースに保存する前には、SQLインジェクション対策として、適切なエスケープ処理を行います。

最後に、メソッド名は処理内容がわかりやすい名前にしましょう。index()create()update()delete()のように、RESTfulな命名規則に従うと、他の開発者にも理解しやすいコードになります。コメントも適切に記述し、チーム開発でもスムーズに作業できるよう心がけましょう。

まとめ

まとめ
まとめ

CodeIgniterのコントローラを理解することがWebアプリ開発の第一歩

ここまで、CodeIgniterのコントローラクラスの基本から実践的な使い方まで詳しく解説してきました。CodeIgniterは軽量で高速なPHPフレームワークとして多くのWeb開発者に利用されており、その中心的な役割を担うのがコントローラです。コントローラは、ユーザーのリクエストを受け取り、必要な処理を行い、最終的にビューへ結果を渡して画面を表示するという重要な役割を持っています。

Webアプリケーションは単にHTMLページを表示するだけではなく、ユーザーの操作に応じて動的にデータを処理し、画面を更新していく仕組みが必要になります。そのときに中心となるのがコントローラです。CodeIgniterのMVC構造において、モデルがデータ処理、ビューが画面表示を担当するのに対して、コントローラはそれらをつなぐ司令塔として機能します。

まず理解しておきたいのは、CodeIgniterではコントローラファイルをapp/Controllersディレクトリに保存するというルールです。そしてファイル名とクラス名は必ず一致させ、さらにファイル名の最初の文字は大文字で始める必要があります。このルールを守ることで、CodeIgniterのルーティングシステムが自動的にクラスを読み込み、URLとメソッドを結びつけてくれます。

最も基本的なコントローラは、indexメソッドを持つシンプルなクラスです。indexメソッドはURLでメソッド名を指定しなかった場合に自動的に実行されるデフォルトメソッドです。Webサイトのトップページや一覧ページなど、多くの場合このメソッドが最初に呼び出されます。

コントローラとビューの連携がWebページ表示の基本

実際のWebアプリケーションでは、コントローラが直接echoで文字を出力することはほとんどありません。代わりにview関数を使ってビューファイルを読み込み、HTMLテンプレートを表示します。この仕組みによって、プログラムの処理と画面デザインを分離できるようになります。

ビューを利用することで、デザイナーとプログラマーが役割を分担して開発できるようになります。またHTMLの変更があった場合でも、コントローラの処理を変更する必要がなくなるため、保守性が大きく向上します。

さらにコントローラからビューへデータを渡すことで、動的なページを作成することが可能になります。ユーザー情報、ブログ記事、商品一覧など、データベースから取得した情報を配列としてビューに渡すことで、HTMLテンプレート内でそのデータを表示できます。

複数メソッドを持つコントローラで機能を整理する

一つのコントローラには複数のメソッドを定義できます。例えばブログ機能を作る場合、記事一覧を表示するindexメソッド、記事の詳細を表示するshowメソッド、新規記事を作成するcreateメソッドなどをまとめて管理することができます。

URLとメソッドは自動的に対応付けられるため、ブログ一覧はblog、記事詳細はblog/show/記事番号という形でアクセスできます。このようなURL構造はSEOの観点からも理解しやすく、検索エンジンにも認識されやすい構造になります。

またパラメータをメソッドに渡すことで、記事IDやユーザーIDなどを取得することもできます。これにより、同じメソッドでも異なるデータを表示できる柔軟なWebアプリケーションを作ることが可能になります。

コンストラクタを使った初期化処理の活用

コントローラではコンストラクタを利用して初期化処理を行うこともできます。コンストラクタはクラスが生成されたときに自動的に実行される特別なメソッドで、共通処理をまとめるのに便利です。

例えば管理画面のコントローラでは、ログインチェックをコンストラクタに記述することで、すべてのメソッドでログイン状態を確認できます。また共通のデータ読み込みや設定処理などもコンストラクタにまとめることで、コードを整理することができます。

リダイレクトとリクエスト処理で実践的なWebアプリを作る

Webアプリケーションでは、処理の完了後に別のページへ移動するリダイレクト処理も重要です。フォーム送信後に確認ページへ移動したり、ログイン成功後にダッシュボードへ移動したりする場面で使用されます。CodeIgniterではredirect関数を使うことで簡単にページ遷移を実装できます。

またコントローラでは、ユーザーから送信されたデータを取得するリクエストオブジェクトも頻繁に利用します。POSTデータやGETパラメータを取得することで、ユーザー入力に応じた処理を実行できます。これらの機能を組み合わせることで、ログイン機能、投稿機能、検索機能などの本格的なWebアプリケーションを構築できます。

コントローラ設計のベストプラクティス

CodeIgniterのコントローラを設計する際には、役割を明確にすることが重要です。コントローラはあくまでリクエスト処理の中心であり、データベース操作や複雑なビジネスロジックはモデルに任せるべきです。このように役割を分離することで、コードの可読性と保守性が大きく向上します。

またメソッド名は処理内容がわかりやすい名前にすることが大切です。index、show、create、update、deleteなどの命名は多くの開発者にとって理解しやすく、チーム開発でもスムーズに作業できます。

コントローラのサンプルプログラム


<?php

namespace App\Controllers;

class Sample extends BaseController
{
    public function index()
    {
        $data = [
            'title' => 'CodeIgniterコントローラ入門',
            'message' => 'コントローラからビューへデータを渡すサンプルです'
        ];

        return view('sample_view', $data);
    }
}

<!DOCTYPE html>
<html>
<head>
    <title><?= $title ?></title>
</head>
<body>
    <h1><?= $title ?></h1>
    <p><?= $message ?></p>
</body>
</html>

このように、CodeIgniterのコントローラはWebアプリケーション開発の中心となる重要な仕組みです。コントローラの作成方法、ビューとの連携、メソッドの設計、データの受け渡しなどをしっかり理解することで、実用的なWebシステムを構築できるようになります。初心者の方はまずシンプルなコントローラから作成し、徐々に機能を増やしていくことで理解が深まります。

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

生徒

CodeIgniterのコントローラって、Webアプリの中心になる部分なんですね。ユーザーのリクエストを受け取って処理をする役割だと理解できました。

先生

その通りです。コントローラはMVC構造の中で、モデルとビューをつなぐ役割を持っています。ユーザーのアクセスを受け取り、必要な処理を行って、最終的に画面を表示します。

生徒

コントローラはappのControllersフォルダに作るんでしたよね。そしてファイル名とクラス名は同じにする必要があるんですよね。

先生

よく覚えていますね。さらにファイル名の最初の文字は大文字にする必要があります。このルールを守ることでCodeIgniterが自動的にコントローラを読み込みます。

生徒

indexメソッドがデフォルトで実行されるというのも重要なポイントですね。URLにメソッドを書かなくても動く仕組みがよく分かりました。

先生

そうですね。そして実際の開発ではechoではなくview関数を使ってHTMLテンプレートを表示します。これがMVCの考え方です。

生徒

コントローラからビューにデータを渡す方法も理解できました。配列を使って渡すことで、HTML側で変数として表示できるんですね。

先生

その理解で完璧です。コントローラの基本を覚えれば、ログイン機能や投稿機能など、さまざまなWebシステムを作れるようになります。まずはシンプルなコントローラを作りながら経験を積んでいきましょう。

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelのルート管理のベストプラクティスまとめ!初心者でもわかるやさしい解説
New2
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド
New4
Symfony
SymfonyでカスタムURLジェネレーターを作成する方法!初心者でも理解できる手順を完全解説
人気記事
No.1
Java&Spring記事人気No1
CodeIgniter
CodeIgniterでファイルアップロードをマスター!安全な保存と管理方法
No.2
Java&Spring記事人気No2
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.3
Java&Spring記事人気No3
Laravel
LaravelのFeatureテストとUnitテストの違いを理解しよう
No.4
Java&Spring記事人気No4
Laravel
Laravelのルーティングでサブドメインを使う方法!初心者向けにやさしく解説
No.5
Java&Spring記事人気No5
Laravel
Laravelでドメインルートを使う方法!マルチドメイン対応を初心者向けに解説
No.6
Java&Spring記事人気No6
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド