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

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でのウェブアプリケーション開発がぐっと楽になります。最初は基本的な設定から始めて、徐々に複雑な設定にも挑戦してみてください。

まとめ

まとめ
まとめ

CodeIgniterのルーティングの重要なポイントを整理する

ここまでCodeIgniterのルーティングについて詳しく解説してきました。ルーティングとは、ブラウザからアクセスされたURLと、実際に処理を行うコントローラのメソッドを結びつける仕組みです。Webアプリケーション開発では、この仕組みを正しく理解することで、URL設計が分かりやすくなり、保守性の高いシステムを構築することができます。

CodeIgniterでは、ルーティングの設定をapp Config Routes.phpファイルで管理します。このファイルにURLとコントローラの対応関係を書くことで、ユーザーが特定のURLへアクセスしたときに、どのコントローラのどのメソッドを実行するのかを明確に定義できます。つまり、Webサイトの動作の流れをコントロールする重要な設定ファイルといえます。

まず基本として覚えておきたいのは、GETリクエストを処理するルーティングの書き方です。通常のページ表示ではGETリクエストが使われるため、最初に理解するべき重要な部分です。Routes.phpに次のように書くことで、URLとコントローラメソッドを簡単に対応付けることができます。


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

この設定では、aboutというURLにアクセスしたときにHomeコントローラのaboutメソッドが実行されます。シンプルな記述ですが、この仕組みを理解することでWebサイトのページ構成を自由に設計できるようになります。

パラメータ付きルーティングで動的ページを作る

次に重要なのがパラメータ付きルーティングです。実際のWebサイトでは、ユーザー情報ページや商品詳細ページなど、URLの一部が変化する動的ページが多く存在します。CodeIgniterではこのようなURLも簡単に処理することができます。

例えばユーザーIDをURLに含める場合は次のような設定を行います。


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

このルーティングを設定すると、userのあとに数字が続くURLを処理できるようになります。例えばuser百二十三というURLにアクセスすると、Userコントローラのprofileメソッドが呼び出され、その数字がメソッドの引数として渡されます。これによりユーザーごとに異なるページを表示できるようになります。


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

このような仕組みを理解すると、ユーザー管理機能や商品管理機能などの実装がとても分かりやすくなります。URLとデータベースのデータを結びつける基本的な考え方として覚えておくと良いでしょう。

複数パラメータやルーティンググループの活用

CodeIgniterのルーティングでは、複数のパラメータを扱うこともできます。例えば商品カテゴリーと商品IDを同時にURLに含めることで、より分かりやすいURL設計が可能になります。


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

この設定により、カテゴリー名と商品IDを同時にコントローラへ渡すことができます。検索エンジンやユーザーにとっても理解しやすいURL構造になるため、Webサイトの構造が整理されます。

また、管理画面のように同じURLのプレフィックスを持つページが多い場合は、ルーティンググループを使うことでコードを整理できます。グループ化することでRoutes.phpの可読性が高くなり、大規模なアプリケーションでも管理しやすくなります。


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

このようにルーティンググループを使うと、管理画面のURL構造が整理されます。実務のWeb開発ではこのような構造化されたルーティングがとても重要になります。

POSTリクエストとルーティングの使い分け

フォーム送信などの処理ではPOSTリクエストを使用します。CodeIgniterではGETとPOSTを明確に分けてルーティングを定義できるため、セキュリティ面でも安全な設計が可能になります。


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

このようにHTTPメソッドごとにルーティングを設定することで、ページ表示とデータ送信の処理を明確に分離できます。これによりアプリケーションの構造が整理され、トラブルが起きたときの原因調査もしやすくなります。

ルーティングを理解すると開発が大きく変わる

CodeIgniterのルーティングを理解すると、Webアプリケーション開発の流れがはっきり見えるようになります。ユーザーがURLへアクセスする。ルーティングがそのURLを解析する。そして対応するコントローラメソッドが実行され、最終的にビューが表示されます。この一連の流れを理解しておくと、エラーが発生した場合でも原因を素早く特定できるようになります。

また、ルーティングの優先順位や正規表現を使ったカスタムルートを理解すれば、より柔軟なURL設計が可能になります。ブログシステムや会員サイト、ECサイトなど、さまざまなWebアプリケーションを作る際に役立つ知識です。

CodeIgniterのルーティングはシンプルですが非常に強力な仕組みです。基本的な書き方からパラメータ付きルーティング、ルーティンググループ、HTTPメソッドの使い分けまで理解しておくことで、実践的なWebアプリケーション開発をスムーズに進めることができるでしょう。

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

生徒

CodeIgniterのルーティングについて学んでみて、URLとコントローラがどのようにつながっているのかが少し分かってきました。今まではページが表示される仕組みを深く考えたことがありませんでしたが、Routes.phpでルールを定義しているのですね。

先生

その通りです。ルーティングはWebアプリケーションの入り口とも言える重要な部分です。ユーザーがアクセスしたURLを解析して、どのコントローラを実行するのかを決める役割があります。

生徒

パラメータ付きルーティングも便利ですね。ユーザーIDや商品IDをURLから受け取れるので、動的ページを作るときにとても役立ちそうです。

先生

そうですね。実際のWebサイトではほとんどのページが動的ページです。ルーティングとコントローラを組み合わせることで、ユーザーごとに異なる情報を表示できるようになります。

生徒

ルーティンググループも便利だと思いました。管理画面などURLの構造が整理できるので、大きなサイトでも見やすくなりそうです。

先生

その理解はとても良いですね。ルーティングをしっかり設計すると、アプリケーション全体の構造が分かりやすくなります。CodeIgniter開発では必ず使う重要な機能なので、実際にコードを書きながら慣れていくと良いでしょう。

カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterでフォームのバリデーションエラーを表示する方法!初心者向け徹底解説
New3
Symfony
Symfonyのコントローラで404・403エラーを制御する方法を初心者向けに解説!
New4
Symfony
Symfonyで独自イベント(カスタムイベント)を作成する方法をやさしく解説
人気記事
No.2
Java&Spring記事人気No2
Laravel
LaravelでReactコンポーネントを組み込む方法完全ガイド!JSX対応でフロントエンド連携を学ぼう
No.3
Java&Spring記事人気No3
CodeIgniter
CodeIgniterのCSRF対策を完全解説!フォーム処理のセキュリティ手順
No.4
Java&Spring記事人気No4
Laravel
Laravelのリレーションを使った検索条件の書き方(whereHas)
No.5
Java&Spring記事人気No5
Symfony
Symfonyでバリデーションをコントローラに組み込む方法を徹底解説!初心者にもやさしい入力チェックの基本
No.6
Java&Spring記事人気No6
Laravel
LaravelのRESTfulコントローラ設計のベストプラクティスを初心者向けにわかりやすく解説
No.7
Java&Spring記事人気No7
Laravel
Laravelのold()関数でフォーム再表示時に値を保持する方法
No.8
Java&Spring記事人気No8
Symfony
Symfonyのインストール方法!CLIとComposerの導入手順まとめ