カテゴリ: CodeIgniter 更新日: 2026/02/06

CodeIgniterのルーティングを徹底解説!ルートパラメータの使い方入門

CodeIgniterのルートパラメータの使い方をやさしく解説
CodeIgniterのルートパラメータの使い方をやさしく解説

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

生徒

「CodeIgniter(コードイグナイター)を使っているのですが、URLの数字や文字をプログラムで受け取るにはどうすればいいですか?」

先生

「それは『ルートパラメータ』という仕組みを使えば解決しますよ。URLの一部を『変数(値を入れる箱)』として扱う方法です。」

生徒

「URLの特定の場所を自由に読み取れるということですね!難しそうですが、私にもできますか?」

先生

「大丈夫です。設定ファイルに少し書き加えるだけで、驚くほど簡単に実装できます。基本から一緒に見ていきましょう!」

1. ルーティングとルートパラメータの基本

1. ルーティングとルートパラメータの基本
1. ルーティングとルートパラメータの基本

CodeIgniter(コードイグナイター)というフレームワークにおいて、ルーティングとは「このURLにアクセスが来たら、このプログラムを動かす」という交通整理のような役割を果たします。通常、Webサイトの住所であるURLは固定されていますが、ブログの記事ページやユーザーのプロフィールページなど、表示する内容によってURLの一部が変わる場合がありますよね。例えば、example.com/blog/1example.com/blog/2 といった具合です。

この「1」や「2」といった、状況に応じて変化する部分のことをルートパラメータと呼びます。パラメータとは、プログラムに渡す「材料」のようなものだと考えてください。パソコンに詳しくない方でも、整理整頓された棚をイメージすれば分かりやすいでしょう。「何番の棚(URLの数字)を開けて、中身(データ)を取り出すか」を指示するのがルートパラメータの役割です。

2. プレースホルダ(身代わり)の種類を知ろう

2. プレースホルダ(身代わり)の種類を知ろう
2. プレースホルダ(身代わり)の種類を知ろう

CodeIgniterでは、URLのどの部分をパラメータとして受け取るかを指定するために「プレースホルダ」という特別な記号を使います。これは、本物のデータの代わりに置いておく「予約席の札」のようなものです。主に使われるのは以下の2種類です。

  • (:num):数字だけを受け取るときに使います。ID番号などに最適です。
  • (:any):数字、文字、記号など、何でも受け取るときに使います。

これらを使い分けることで、「ここは数字しか入らないはずだ」というルールを明確にでき、プログラムの不具合や間違いを防ぐことができます。初心者の方は、まずはこの2つのキーワードを覚えるだけで十分です。PHPの基礎知識がなくても、この書き方さえマスターすればURLを自由に操れるようになります。

3. routes.phpの設定方法

3. routes.phpの設定方法
3. routes.phpの設定方法

それでは、具体的に設定を書いてみましょう。CodeIgniterの設定ファイルである app/Config/Routes.php を編集します。このファイルは、いわばサイトの「案内図」です。ここに「もし数字のパラメータが来たら、この処理に飛ばしてね」という命令を記述します。

以下のコードは、ブログの記事詳細ページを想定した例です。URLが item/数字 だった場合に、その数字をプログラムに渡す設定です。


// $routes->get('URLのパターン', 'コントローラー名::メソッド名/パラメータ');
$routes->get('product/(:num)', 'Product::show/$1');

ここで出てくる $1 というのは、(:num) で受け取った中身(例えば「10」という数字)をそのまま後ろのプログラムに引き渡すという意味です。これを記述するだけで、URLから情報を抜き出す準備が整います。まるで魔法のようですね。

4. コントローラーでの受け取り方

4. コントローラーでの受け取り方
4. コントローラーでの受け取り方

設定ファイルでルートパラメータを定義したら、次はそれを受け取る「コントローラー」側のプログラムを作成します。コントローラーとは、Webサイトの「司令塔」のことです。パラメータを受け取るには、関数のカッコの中に変数(データの入れ物)を用意するだけです。

プログラミングを始めたばかりの方にとって「変数」という言葉は難しく聞こえるかもしれませんが、単なる「ラベルを貼った箱」だと思ってください。箱の名前は何でも良いのですが、中身が分かりやすい名前にするのがコツです。ここでは $id という名前の箱を使ってみましょう。


namespace App\Controllers;

class Product extends BaseController
{
    public function show($id)
    {
        // $idの中には、URLで指定された数字が入っています
        echo "あなたが選んだ商品の番号は " . $id . " です。";
    }
}

もしURLが example.com/product/50 であれば、画面には以下のように表示されます。


あなたが選んだ商品の番号は 50 です。

5. 複数のパラメータを同時に扱う方法

5. 複数のパラメータを同時に扱う方法
5. 複数のパラメータを同時に扱う方法

時には、URLから2つ以上の情報を抜き出したい場面もあります。例えば「2025年」の「1月」の記事を表示したい場合、URLは archive/2025/01 のようになります。この場合も、ルーティングの設定を少し増やすだけで対応可能です。

設定ファイルでは (:num) を2回使い、渡す側も $1, $2 と順番に指定します。これによって、複数の「予約席」を作ることができます。複雑に見えるかもしれませんが、パズルのピースを組み合わせるような感覚で設定できます。


// 年と月の2つの数字を受け取る設定
$routes->get('archive/(:num)/(:num)', 'Blog::archive/$1/$2');

そして、コントローラー側でも箱を2つ用意します。


public function archive($year, $month)
{
    echo $year . "年" . $month . "月の記事一覧を表示します。";
}

実行結果は以下のようになります。


2025年01月の記事一覧を表示します。

6. 文字列を受け取る (:any) の活用

6. 文字列を受け取る (:any) の活用
6. 文字列を受け取る (:any) の活用

数字だけでなく、ユーザーの名前やカテゴリー名などをURLに含めたいときは (:any) を使います。any は英語で「何でも」という意味がある通り、アルファベットや漢字なども受け取ることができます。

例えば、ユーザーごとのプロフィールページを作る場合を考えてみましょう。URLを user/taro のようにしたい場合に非常に便利です。ただし、何でも受け取れてしまうため、予期せぬ文字が入ってくる可能性も考慮する必要があります。初心者のうちは、まずは「文字も受け取れる便利な設定」として覚えておきましょう。


// ユーザー名などの文字列を受け取る設定
$routes->get('profile/(:any)', 'User::profile/$1');

コントローラーでの記述例です。


public function profile($name)
{
    echo "こんにちは、" . $name . "さん!あなたの専用ページです。";
}

URLが profile/tanaka なら、結果は次の通りです。


こんにちは、tanakaさん!あなたの専用ページです。

7. ルートパラメータを使うメリット

7. ルートパラメータを使うメリット
7. ルートパラメータを使うメリット

なぜ、わざわざルートパラメータを使うのでしょうか?それには大きな理由が3つあります。

  1. URLが綺麗で見やすくなる(SEO対策):検索エンジンは、シンプルで意味の通じるURLを好みます。パラメータを使うことで、人間にも機械にも優しいサイトになります。
  2. プログラムが共通化できる:記事が1,000個あっても、プログラムは1つ書くだけで済みます。数字が変わるだけで、中身を自動で切り替えてくれるからです。
  3. 管理が楽になる:後からURLの形を変えたいとき、設定ファイルを1箇所直すだけでサイト全体のURLルールを変更できます。

プログラミング未経験の方にとって、最初はコードを書くこと自体が壁に感じるかもしれません。しかし、このルーティングの仕組みを理解すると、Webサイトがどのようにして動いているのか、その「裏側」が手に取るようにわかるようになります。CodeIgniterは、こうした難しい仕組みをとてもシンプルに提供してくれる素晴らしい道具なのです。

8. エラーを防ぐためのポイント

8. エラーを防ぐためのポイント
8. エラーを防ぐためのポイント

ルートパラメータを使う際に初心者が陥りやすいミスがあります。それは「順番」と「数」の不一致です。設定ファイルで (:num) を1つ書いたなら、コントローラーの関数でも必ず1つの変数で受け取らなければなりません。このバランスが崩れると、プログラムは「話が違うよ!」と怒ってエラーを出してしまいます。

もしエラー画面が出てしまったら、まずは「渡す側の数」と「受け取る側の数」が合っているかを確認してください。落ち着いて確認すれば、必ず解決できます。プログラミングは失敗を繰り返して上達するものです。まずは小さなコードから試して、URLが変わる楽しさを体験してみてください。

カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New2
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New3
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
New4
Symfony
Symfonyのキャッシュ機構の基本を理解しよう(HTTPとアプリ別)
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.4
Java&Spring記事人気No4
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.5
Java&Spring記事人気No5
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.6
Java&Spring記事人気No6
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelでコントローラを作成する方法(artisanコマンド)
No.8
Java&Spring記事人気No8
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説