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

CodeIgniterのルーティング設定を完全ガイド!初心者でもわかる基本の書き方

CodeIgniterでルーティングを設定する基本の書き方
CodeIgniterでルーティングを設定する基本の書き方

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

生徒

「CodeIgniterで、URLと実際に動くプログラムを結びつける方法ってありますか?」

先生

「それは、ルーティングという機能を使います。URLのアドレスと、どのプログラムを動かすかを決める設定ですね。」

生徒

「ルーティングって難しそうですね…どのように設定するんですか?」

先生

「大丈夫です。基本的な書き方を覚えれば、誰でも簡単に設定できますよ。それでは、順番に見ていきましょう!」

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

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

CodeIgniterのルーティングとは、ウェブサイトのURLアドレスと、実際に動くプログラム(コントローラーとメソッド)を結びつける仕組みのことです。例えば、レストランで注文するときをイメージしてください。お客さんがメニューの「ハンバーグ定食」を注文すると、キッチンで料理人が「ハンバーグ定食を作る」という作業を行います。この「注文」がURLで、「料理を作る作業」がプログラムの実行にあたります。ルーティングは、この注文と作業を結びつける役割を果たしているのです。

CodeIgniterでは、通常は「app/Config/Routes.php」というファイルにルーティングの設定を書きます。このファイルを編集することで、自分の好きなURLでウェブサイトを作ることができるようになります。

2. ルーティング設定ファイルの場所と基本構造

2. ルーティング設定ファイルの場所と基本構造
2. ルーティング設定ファイルの場所と基本構造

まず、ルーティングを設定するファイルがどこにあるのかを確認しましょう。CodeIgniter4の場合、プロジェクトのフォルダ構造の中で「app」フォルダの中に「Config」フォルダがあり、その中に「Routes.php」というファイルがあります。このファイルを開くと、すでにいくつかの設定が書かれています。

Routes.phpファイルの中には、$routesという変数が用意されています。この変数を使って、URLとプログラムの対応関係を設定していきます。基本的な形は、$routes->メソッド名('URL', 'コントローラー名::メソッド名');という書き方になります。

3. 最もシンプルなルーティングの書き方

3. 最もシンプルなルーティングの書き方
3. 最もシンプルなルーティングの書き方

それでは、実際にルーティングを設定してみましょう。最も基本的な書き方は、getメソッドを使った方法です。これは、ブラウザでURLを入力してアクセスするときに使われる方法です。


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

この設定は、「https://example.com/about」というURLにアクセスしたときに、「Home」コントローラーの「about」メソッドを実行する、という意味になります。「Home」はコントローラーの名前で、「about」はその中のメソッド(関数)の名前です。コントローラーとは、プログラムの処理をまとめたファイルのことで、メソッドとは、その中の具体的な処理の単位のことです。

この書き方を覚えておけば、自分の好きなURLで、好きなプログラムを動かすことができるようになります。

4. パラメータを含むルーティングの設定方法

4. パラメータを含むルーティングの設定方法
4. パラメータを含むルーティングの設定方法

次は、URLの中に変数を含める方法を学びましょう。例えば、ブログ記事のページで、記事番号によって表示内容を変えたいときなどに使います。URLの中の変化する部分をパラメータと呼びます。


$routes->get('blog/(:num)', 'Blog::view/$1');

この設定では、(:num)という部分が数字を受け取るパラメータになります。例えば、「https://example.com/blog/5」にアクセスすると、「Blog」コントローラーの「view」メソッドに「5」という数字が渡されます。$1は、最初のパラメータ(この場合は5)を意味しています。

他にも、(:any)を使えばどんな文字列でも受け取ることができますし、(:alpha)を使えばアルファベットのみを受け取ることができます。用途に応じて使い分けることで、柔軟なURL設計が可能になります。

5. 複数のパラメータを扱うルーティング

5. 複数のパラメータを扱うルーティング
5. 複数のパラメータを扱うルーティング

URLに複数の情報を含めたい場合もあります。例えば、カテゴリーと記事IDの両方を指定したいときなどです。そのような場合は、パラメータを複数並べて設定します。


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

この例では、「https://example.com/product/shoes/123」のようなURLにアクセスすると、「Product」コントローラーの「detail」メソッドに「shoes」と「123」の2つの値が渡されます。$1が最初のパラメータ(shoes)、$2が2番目のパラメータ(123)を表しています。

このように、複数のパラメータを組み合わせることで、より詳細な情報をURLで表現できるようになります。ただし、あまり多くのパラメータを使いすぎると、URLが長く複雑になってしまうので、必要最小限にとどめることが大切です。

6. HTTPメソッドに応じたルーティング設定

6. HTTPメソッドに応じたルーティング設定
6. HTTPメソッドに応じたルーティング設定

ウェブサイトでは、ページを見るだけでなく、フォームからデータを送信することもあります。このとき、データの送り方によって処理を変える必要があります。ページを見るときはget、データを送信するときはpostというメソッドを使います。


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

この設定では、同じ「contact」というURLでも、普通にアクセスしたときは「form」メソッドでフォームを表示し、フォームから送信ボタンを押したときは「submit」メソッドでデータを処理する、という使い分けができます。HTTPメソッドとは、ブラウザとサーバーがデータをやり取りする方法の種類のことです。

このように、同じURLでも処理方法を変えることで、より使いやすいウェブサイトを作ることができます。

7. デフォルトコントローラーとホームページの設定

7. デフォルトコントローラーとホームページの設定
7. デフォルトコントローラーとホームページの設定

ウェブサイトのトップページ(ホームページ)は、ドメイン名だけでアクセスされる特別なページです。CodeIgniterでは、このトップページに表示するコントローラーを指定することができます。

Routes.phpファイルの中には、すでに次のような設定があるはずです。


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

この設定は、「https://example.com/」にアクセスしたときに、「Home」コントローラーの「index」メソッドを実行する、という意味です。スラッシュ(/)だけの指定は、ルートURL、つまりトップページを表しています。

自分のウェブサイトのトップページを変更したいときは、この部分を編集すればよいのです。例えば、「Welcome」というコントローラーを作って、そちらをトップページにしたい場合は、$routes->get('/', 'Welcome::index');のように書き換えます。

8. ルーティングの優先順位と注意点

8. ルーティングの優先順位と注意点
8. ルーティングの優先順位と注意点

ルーティングの設定は、Routes.phpファイルの上から順番に評価されていきます。つまり、同じURLに対して複数の設定がある場合、最初に見つかった設定が適用されます。これを優先順位といいます。

例えば、次のような設定があった場合を考えてみましょう。


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

この場合、「https://example.com/news/latest」にアクセスすると、最初の設定が適用されて「News」コントローラーの「latest」メソッドが実行されます。もし設定の順番を逆にすると、2番目の設定が先に適用されてしまい、意図した動作にならない可能性があります。

そのため、より具体的なルーティング(パラメータを使わないもの)を先に書き、より汎用的なルーティング(パラメータを含むもの)を後に書くことが重要です。この順番を意識することで、想定通りの動作を実現できます。

9. グループ化によるルーティング管理

9. グループ化によるルーティング管理
9. グループ化によるルーティング管理

ウェブサイトが大きくなってくると、管理画面や会員専用ページなど、特定のURL配下に複数のページをまとめたいことがあります。そのようなときは、groupメソッドを使ってルーティングをグループ化すると便利です。

グループ化を使うことで、共通のURL部分を一度だけ書けばよくなり、設定がシンプルになります。また、後から共通部分を変更したいときも、一箇所を修正するだけで済むので、メンテナンスが楽になります。

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


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

この設定により、「https://example.com/admin/dashboard」「https://example.com/admin/users」「https://example.com/admin/settings」という3つのURLが自動的に設定されます。それぞれが「Admin」コントローラーの各メソッドに対応します。

グループ化は、コードを見やすくするだけでなく、セキュリティ設定やフィルター(アクセス制限)を一括で適用するときにも便利です。

10. ルーティング設定の確認とデバッグ方法

10. ルーティング設定の確認とデバッグ方法
10. ルーティング設定の確認とデバッグ方法

ルーティングを設定した後は、正しく動作するか確認することが大切です。CodeIgniterには、設定したルーティングの一覧を確認する便利な機能があります。コマンドラインから「php spark routes」というコマンドを実行すると、すべてのルーティング設定が一覧で表示されます。

もしルーティングがうまく動かない場合は、次の点を確認してみましょう。まず、URLのスペルミスがないか確認します。次に、コントローラー名とメソッド名が正しく指定されているか確認します。コントローラーのファイル名は、先頭が大文字で、拡張子が「.php」になっている必要があります。

また、パラメータを使う場合は、受け取る側のメソッドでも引数を定義する必要があります。例えば、$routes->get('blog/(:num)', 'Blog::view/$1');という設定の場合、Blogコントローラーのviewメソッドはpublic function view($id)のように引数を受け取れる形にしておく必要があります。

エラーが出た場合は、エラーメッセージをよく読んで、どこに問題があるのかを確認しましょう。CodeIgniterは親切なエラーメッセージを表示してくれるので、初心者でも問題を見つけやすくなっています。

カテゴリの一覧へ
新着記事
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のルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド