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

CodeIgniterのルーティング完全ガイド!初心者でもわかるコントローラとURLの対応付け

CodeIgniterでコントローラとURLを対応付ける方法
CodeIgniterでコントローラとURLを対応付ける方法

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

生徒

「CodeIgniterでURLとコントローラを繋げる方法が知りたいんですが、どうすればいいですか?」

先生

「CodeIgniterでは、ルーティングという仕組みを使って、URLとコントローラを簡単に対応付けることができますよ。」

生徒

「ルーティングって何ですか?難しそうですね...」

先生

「いえいえ、とても簡単です。例えるなら、郵便配達のようなものです。住所(URL)を見て、正しい家(コントローラ)に届けるイメージです。それでは基本から見ていきましょう!」

1. CodeIgniterのルーティングとは?

1. CodeIgniterのルーティングとは?
1. CodeIgniterのルーティングとは?

CodeIgniterのルーティングとは、ウェブサイトのURLと、実際に処理を行うコントローラを結びつける仕組みのことです。簡単に言えば、訪問者がブラウザで特定のURLを入力したときに、どのプログラムを実行するかを決めるルールのことです。

例えば、あなたがレストランに行ったとき、メニュー表を見て料理を注文しますよね。するとウェイターさんが厨房に伝えて、シェフが料理を作ります。この場合、メニュー表がURL、ウェイターさんがルーティング、シェフがコントローラという関係になります。

CodeIgniterでは、この設定をapp/Config/Routes.phpというファイルで行います。このファイルに「このURLが来たら、このコントローラを呼び出してね」という指示を書いていくのです。

2. 基本的なルーティングの書き方

2. 基本的なルーティングの書き方
2. 基本的なルーティングの書き方

それでは、実際にルーティングを設定してみましょう。最も基本的な形は、$routes->get()メソッドを使う方法です。このgetというのは、HTTPメソッドのGETのことで、通常のウェブページを表示するときに使われます。

まず、app/Config/Routes.phpファイルを開いて、次のように書きます。


$routes->get('about', 'Home::about');

この一行の意味を詳しく説明しますね。'about'がURLの部分です。つまり、http://yoursite.com/aboutというURLにアクセスしたときの設定です。そして'Home::about'が実行するコントローラとメソッドです。Homeがコントローラ名、aboutがそのコントローラ内のメソッド名になります。

コントローラは、app/Controllersフォルダの中に作成します。上記の例では、Home.phpというファイルにabout()というメソッドが必要になります。

3. パラメータ付きのルーティング設定

3. パラメータ付きのルーティング設定
3. パラメータ付きのルーティング設定

URLに変数を含めたい場合もあります。例えば、ユーザーのプロフィールページで、それぞれのユーザーIDをURLに含めたいときなどです。CodeIgniterでは、このような動的なURLも簡単に設定できます。

パラメータを使うには、URLの中に(:num)(:any)といった特殊な記号を使います。(:num)は数字のみを受け取り、(:any)は任意の文字列を受け取ります。


$routes->get('user/(:num)', 'User::profile/$1');

この設定では、http://yoursite.com/user/123のようなURLにアクセスすると、Userコントローラのprofile()メソッドが呼ばれ、123という数字が引数として渡されます。$1は最初のパラメータを表す特別な記号です。

コントローラ側では、次のように受け取ることができます。


public function profile($id)
{
    echo "ユーザーID: " . $id;
}

4. 複数のパラメータを扱う方法

4. 複数のパラメータを扱う方法
4. 複数のパラメータを扱う方法

URLに複数のパラメータを含めることもできます。例えば、商品のカテゴリーと商品IDの両方をURLに含める場合などです。


$routes->get('product/(:any)/(:num)', 'Product::detail/$1/$2');

この場合、http://yoursite.com/product/electronics/456というURLにアクセスすると、Productコントローラのdetail()メソッドに、'electronics'456という2つの値が渡されます。$1が最初のパラメータ、$2が2番目のパラメータを表します。

5. デフォルトコントローラの設定

5. デフォルトコントローラの設定
5. デフォルトコントローラの設定

ウェブサイトのトップページ、つまりhttp://yoursite.com/にアクセスしたときに表示するコントローラを設定することができます。これをデフォルトコントローラといいます。

Routes.phpファイルには、最初から次のような設定があります。


$routes->get('/', 'Home::index');

これは、サイトのルートURL(トップページ)にアクセスしたときに、Homeコントローラのindex()メソッドを実行するという意味です。この設定を変更すれば、トップページの表示内容を変えることができます。

また、$routes->setDefaultController('Home');という書き方もあります。これは、URLでコントローラが指定されていない場合に使用されるコントローラを設定します。

6. POSTリクエストのルーティング

6. POSTリクエストのルーティング
6. POSTリクエストのルーティング

これまではget()メソッドを使ってきましたが、フォームからデータを送信する場合など、POSTリクエストを扱う必要があります。その場合はpost()メソッドを使います。

例えば、お問い合わせフォームの送信処理を設定する場合は次のようになります。


$routes->post('contact/submit', 'Contact::submit');

この設定により、フォームからhttp://yoursite.com/contact/submitにPOSTリクエストが送信されると、Contactコントローラのsubmit()メソッドが実行されます。GETとPOSTを区別することで、セキュリティも向上します。

7. ルーティンググループの活用

7. ルーティンググループの活用
7. ルーティンググループの活用

管理画面など、特定のURL配下にたくさんのページがある場合、ルーティンググループを使うと便利です。これにより、共通のプレフィックス(URLの先頭部分)をまとめて設定できます。

例えば、管理画面のURLをすべて/adminで始めたい場合は、次のように書きます。


$routes->group('admin', function($routes) {
    $routes->get('dashboard', 'Admin::dashboard');
    $routes->get('users', 'Admin::users');
    $routes->get('settings', 'Admin::settings');
});

この設定により、http://yoursite.com/admin/dashboardhttp://yoursite.com/admin/usershttp://yoursite.com/admin/settingsという3つのURLが使えるようになります。グループを使うことで、コードが見やすくなり、管理もしやすくなります。

8. ルーティングの優先順位

8. ルーティングの優先順位
8. ルーティングの優先順位

CodeIgniterのルーティングには優先順位があります。Routes.phpファイルに書かれた順番に、上から順にチェックされていきます。最初にマッチしたルートが使用されるため、より具体的なルートを上に、より一般的なルートを下に書く必要があります。

例えば、次のような設定があったとします。


$routes->get('news/latest', 'News::latest');
$routes->get('news/(:any)', 'News::view/$1');

この場合、news/latestという具体的なルートを先に書いています。もし順番を逆にすると、news/latestへのアクセスがnews/(:any)にマッチしてしまい、意図した動作にならない可能性があります。ルートを追加するときは、この優先順位を意識することが大切です。

9. ワイルドカードとカスタムルート

9. ワイルドカードとカスタムルート
9. ワイルドカードとカスタムルート

CodeIgniterでは、より柔軟なルーティングを実現するために、正規表現を使ったカスタムルートも設定できます。これにより、複雑な条件でのURL設定が可能になります。

例えば、日付形式のURLを扱いたい場合は、次のように書くことができます。


$routes->get('blog/([0-9]{4})/([0-9]{2})/([0-9]{2})', 'Blog::date/$1/$2/$3');

この設定では、http://yoursite.com/blog/2024/01/15のような形式のURLにマッチします。[0-9]{4}は4桁の数字、[0-9]{2}は2桁の数字を表します。これにより、年月日をそれぞれパラメータとして受け取ることができます。

正規表現は最初は難しく感じるかもしれませんが、使いこなせるようになると、非常に強力なツールになります。

10. ルーティングのテストとデバッグ

10. ルーティングのテストとデバッグ
10. ルーティングのテストとデバッグ

ルーティング設定が正しく動作しているか確認するには、実際にブラウザでURLにアクセスしてみるのが一番です。もしエラーが出た場合は、CodeIgniterのエラーメッセージをよく読んでください。多くの場合、どのコントローラやメソッドが見つからないかを教えてくれます。

また、spark routesというコマンドラインツールを使うと、現在設定されているすべてのルートを一覧表示できます。ターミナルやコマンドプロンプトで、プロジェクトのルートディレクトリに移動して、次のコマンドを実行してください。


php spark routes

このコマンドを実行すると、設定されているすべてのルートが表示され、URLとコントローラの対応関係を確認できます。ルーティングの設定ミスを見つけるのに非常に役立ちます。

ルーティングをマスターすることで、CodeIgniterでのウェブアプリケーション開発がぐっと楽になります。最初は基本的な設定から始めて、徐々に複雑な設定にも挑戦してみてください。

カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New2
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New3
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
New4
CodeIgniter
CodeIgniterのコントローラとは?役割と基本構造を完全解説!初心者向けガイド
人気記事
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構文まとめ!@if @foreach など基本ディレクティブ解説
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法