カテゴリ: CodeIgniter 更新日: 2026/04/14

CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法

CodeIgniterで正規表現を使った高度なルーティング設定
CodeIgniterで正規表現を使った高度なルーティング設定

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

生徒

「CodeIgniterで、URLの数字や文字を限定してページを表示させることはできますか?」

先生

「はい、正規表現という特別な書き方を使うと、特定のパターンだけに反応するルーティングが作れますよ。」

生徒

「正規表現ってなんだか難しそうですね。初心者でも使いこなせるでしょうか?」

先生

「ルールさえ覚えれば大丈夫です。WebサイトのURLをきれいに整えるための魔法の言葉のようなものですね。一緒に学んでいきましょう!」

1. ルーティングと正規表現の基本を学ぼう

1. ルーティングと正規表現の基本を学ぼう
1. ルーティングと正規表現の基本を学ぼう

PHPの人気フレームワークであるCodeIgniter(コードイグナイター)には、「ルーティング」という非常に重要な機能があります。ルーティングとは、ユーザーがブラウザの住所欄に入力したURLを読み取って、「どのプログラム(コントローラー)を動かすか」を交通整理する役割のことです。通常、CodeIgniterは自動的にURLを判断してくれますが、より細かく「このURLの時はこの動きをしてほしい」と指定したい場合があります。そこで登場するのが正規表現(せいきひょうげん)です。

正規表現とは、文字列のパターンを記号を使って表現する手法です。例えば、「数字だけのURL」や「アルファベット5文字だけのURL」といった条件を、短い記号でコンピュータに伝えることができます。これを使うことで、セキュリティを高めたり、ユーザーにとって分かりやすいURL(SEOに強いURL)を作成したりすることが可能になります。プログラミング未経験の方にとっては、最初は暗号のように見えるかもしれませんが、決まったパターンを組み合わせるだけなので安心してください。

2. ワイルドカードと正規表現の違い

2. ワイルドカードと正規表現の違い
2. ワイルドカードと正規表現の違い

CodeIgniterの標準的なルーティングでは、「(:num)」や「(:any)」といったワイルドカードがよく使われます。これは「何でもいいから数字」「何でもいいから文字列」という意味です。しかし、もっと厳密に「3桁の数字だけ」や「特定の英単語だけ」に制限したいときには、ワイルドカードでは力不足です。そこで正規表現の出番となります。

正規表現を使うと、「URLの中に含まれる文字が、自分の決めたルールに合格しているか」を厳しくチェックできます。これにより、意図しないURLにアクセスされたときにエラーを出したり、特定のページへ誘導したりといった高度な制御ができるようになります。PHPの開発現場では、このルーティング設定を最適化することが、使いやすいWebアプリケーションを作る第一歩と言われています。

3. 数字だけを許可する高度な設定例

3. 数字だけを許可する高度な設定例
3. 数字だけを許可する高度な設定例

まずは、URLの一部が「数字のみ」である場合に限定した設定を見てみましょう。例えば、ブログの記事IDが必ず数字である場合、文字が入っているURLは無視したいですよね。正規表現では、数字を「[0-9]」と表し、それが1回以上繰り返されることを「+」で表します。


// Routes.php の設定例
// 「news/123」のような数字のみのURLを、Newsコントローラーのviewメソッドに飛ばす設定
$routes->get('news/([0-9]+)', 'News::view/$1');

このコードにある「$1」という部分は、正規表現で捕まえた「数字(123など)」をそのままプログラムに引き継ぐという意味です。このように記述することで、URLに「news/abc」と入力されても、このルールには当てはまらないため、間違った動作を防ぐことができます。初心者の方は、まずこの「カッコで囲った部分が変数になる」という仕組みを覚えましょう。

4. 特定の文字数や範囲を指定する方法

4. 特定の文字数や範囲を指定する方法
4. 特定の文字数や範囲を指定する方法

さらに細かく指定することも可能です。例えば、「西暦4桁の数字だけ」を受け付けたい場合を考えてみましょう。正規表現では、回数を指定する際に「{n}」という記号を使います。これを使うと、余計なデータを受け付けない、より安全なWebサイトになります。


// 2024年や2025年など、4桁の数字のみを許可する設定
// 「archive/2025」はOK、「archive/99」はNG
$routes->get('archive/([0-9]{4})', 'Blog::archive/$1');

実行結果として、正しいURLを入力した時だけ、指定したページが表示されます。もし4桁以外の数字を入れると、CodeIgniterは「そんなページはありません」と返してくれます。これをバリデーション(入力チェック)の代わりとして使うことで、プログラム側でわざわざ数字の桁数をチェックする手間が省けるのです。


URL: domain.com/archive/2026 -> Blogコントローラーのarchiveメソッドが実行される
URL: domain.com/archive/123  -> 404 Not Found (不一致のため)

5. アルファベットの種類を限定するテクニック

5. アルファベットの種類を限定するテクニック
5. アルファベットの種類を限定するテクニック

数字だけでなく、文字の種類を制限したいこともあります。例えば、商品カテゴリーが「apple」「orange」「banana」の3種類しかない場合、それ以外の文字が入ったURLは拒否したいですよね。そんな時は「|(パイプ)」という記号を使います。これは「または」という意味です。


// 特定のキーワードのみを受け付けるルーティング
// appleかorangeかbananaの時だけ、Shopコントローラーを呼び出す
$routes->get('shop/(apple|orange|banana)', 'Shop::category/$1');

このように設定することで、全く関係のない「shop/pc」といったURLからのアクセスを遮断できます。これは、システムを攻撃から守るための防護壁のような役割も果たします。パソコンを触ったことがない方でも、このように「あらかじめ決めた言葉以外は通さない」という設定ができるのは、とても便利だと感じられるはずです。

6. 複雑なパターンを組み合わせる応用編

6. 複雑なパターンを組み合わせる応用編
6. 複雑なパターンを組み合わせる応用編

これまでの知識を組み合わせると、さらに実用的なURLが作れます。例えば、「ユーザー名(英数字)」と「投稿ID(数字)」が混ざったURLを作りたい場合です。英数字を表すときは「[a-zA-Z0-9]」という書き方を使います。これは、小文字のaからz、大文字のAからZ、数字の0から9のどれでも良い、という意味になります。


// ユーザー名(英数字)と記事番号(数字)の組み合わせ
// 例:user/taro123/post/456
$routes->get('user/([a-z0-9]+)/post/([0-9]+)', 'User::post/$1/$2');

このコードでは、「$1」にユーザー名が、「$2」に記事番号が入ります。このように複数の情報をURLに含めることで、検索エンジン(Googleなど)にとっても内容が理解しやすいSEOフレンドリーなURLになります。GoogleはURLの中に含まれるキーワードを見て、そのページが何について書かれているかを判断する材料の一つにしているからです。多くのユーザーに記事を読んでもらうためには、このルーティング設定を工夫することが欠かせません。

7. 正規表現の特殊な記号「アンカー」の役割

7. 正規表現の特殊な記号「アンカー」の役割
7. 正規表現の特殊な記号「アンカー」の役割

正規表現には、始まりと終わりをしっかり固定する「アンカー」という考え方があります。具体的には「^」が文頭、「$」が文末を意味します。CodeIgniterのルーティング設定では、内部的にこれらが処理されていることが多いですが、自力で正規表現を書く際には、この概念を知っておくと「部分一致」による間違いを防げます。

例えば、「product」という文字が含まれていれば何でもOKにするのか、それとも「product」で「終わっている」必要があるのかを厳密に区別できます。プログラミング初心者のうちは、あまり難しく考えすぎず、「文字の並びをパターン化するためのルールがあるんだな」と理解しておくだけで十分です。設定ファイルを一箇所書き換えるだけで、サイト全体の動きが変わる面白さをぜひ体感してください。

8. エラーを防ぐためのテストと確認

8. エラーを防ぐためのテストと確認
8. エラーを防ぐためのテストと確認

高度なルーティング設定を行うと、時々「ページが表示されなくなった!」というトラブルが起こります。これは、正規表現の条件が厳しすぎたり、書き間違えていたりすることが原因です。設定を変更した後は、必ず自分でブラウザを動かして、想定通りのURLでページが開くか、逆におかしなURLでエラー(404)が出るかを確認しましょう。

CodeIgniterでは「spark routes」というコマンドを使うと、現在どのようなルーティングが有効になっているかを一覧で確認できます。コマンドプロンプトやターミナルといった黒い画面(CUI)を触ることに慣れていない方も、このコマンド一つで設定ミスをすぐに見つけられるようになるので、ぜひ挑戦してみてください。一つずつステップを踏んでいけば、あなたも立派なPHPエンジニアへの道を歩むことができます。

9. ルーティング設定がSEOに与える好影響

9. ルーティング設定がSEOに与える好影響
9. ルーティング設定がSEOに与える好影響

最後に、なぜここまでルーティングにこだわるのか、その理由をお話しします。それは、Webサイトの「使い勝手」と「検索順位」に直結するからです。意味不明な記号が並んだURLよりも、blog/it-skill/100 のように、意味が通じるURLの方が、人間にも検索エンジンにも好かれます。正規表現をマスターすれば、こうした「きれいなURL」を自動的に、かつ安全に生成できるようになります。

初心者の方は、最初はコピー&ペーストから始めて構いません。少しずつ「ここは数字に変えよう」「ここは文字数を増やそう」と調整していくうちに、自然と正規表現が身についていきます。CodeIgniterという強力なツールを使いこなして、世界中の人に届く素晴らしいWebアプリケーションを作っていきましょう!

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelのredirect()関数の使い方を完全ガイド!初心者でもわかる画面遷移とリダイレクト処理
New2
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
New3
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
New4
Laravel
Laravelのコントローラで例外処理を行うベストプラクティス!初心者にもわかりやすく解説
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
Laravel
Laravelでリダイレクト処理を行う方法(redirectヘルパーの使い方)
No.3
Java&Spring記事人気No3
Symfony
Symfonyで条件付きバリデーションを実装する方法!初心者向けにgroupsの使い方を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
Laravel
LaravelでHello Worldを表示する方法を完全解説!初心者向けにルーティングと画面表示をやさしく説明
No.6
Java&Spring記事人気No6
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.7
Java&Spring記事人気No7
CodeIgniter
CodeIgniterのServicesクラスとは?初心者向け完全ガイド
No.8
Java&Spring記事人気No8
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本