CodeIgniterのルーティングをマスター!コントローラ単位で整理する初心者ガイド
生徒
「CodeIgniterを使っているのですが、URLとプログラムを繋ぐ『ルーティング』の設定がどんどん増えて、どこに何が書いてあるか分からなくなってしまいました…。」
先生
「それはウェブ開発でよくある悩みですね。CodeIgniterでは、ルーティングを整理して、コントローラごとにスッキリまとめる方法がありますよ。」
生徒
「コントローラごとに整理できるんですか?初心者でも簡単にできますか?」
先生
「もちろんです!まずは基本の仕組みから、バラバラになった設定をきれいに整頓する手順まで、ゆっくり丁寧に解説していきましょう。」
1. ルーティングとコントローラとは?
パソコンを触ったことがない方のために、まずは基本中の基本からお話しします。インターネットでウェブサイトを見るとき、私たちはブラウザのアドレスバーに「URL」という住所を入力します。この「URL」を受け取って、どのプログラムを動かすかを決める案内役のことを、プログラミングの世界ではルーティングと呼びます。
そして、実際に「画面を表示する」「データを計算する」といった具体的なお仕事を担当するのがコントローラです。例えるなら、ルーティングはデパートの受付嬢で、「3階の服売り場に行きたい」というお客さん(URL)を、正しい担当者(コントローラ)へ案内する役割を担っています。
PHPのフレームワークであるCodeIgniter(コードイグナイター)は、この案内業務をとても得意としていますが、サイトが大きくなってくると、案内図(設定ファイル)がどんどん複雑になってしまいます。そこで、案内図を役割ごとに小分けにして整理する技術が必要になるのです。
2. 基本的なルーティングの書き方
まずは、一番シンプルなルーティングの書き方を見てみましょう。CodeIgniterでは通常、app/Config/Routes.phpというファイルにすべての行き先を書き込みます。初心者が最初につまずきやすいのは、このファイルがどんどん長くなってしまうことです。まずは、基本のコードを確認しましょう。
// 「/hello」というURLにアクセスが来たら、Homeという名前のコントローラのindexという仕事を実行する
$routes->get('hello', 'Home::index');
この一行は、「もしユーザーがサイトのURLの末尾に『/hello』と打ってきたら、Homeという箱の中にあるindexという命令を動かしてね」という意味になります。これを一つひとつ手作業で書いていくのが基本的なルーティングの設定方法です。しかし、これだけだとページが増えた時に大変なことになりますよね。そこで、グループ化という手法を使います。
3. グループ化機能を使って整理整頓
コントローラごとにルーティングを整理する第一歩は、グループ化(grouping)という機能を使うことです。これは、関連するページを一つのグループとしてまとめる方法です。例えば、ブログの「記事を書く」「記事を消す」「記事を直す」という機能は、すべて「ブログ管理」という一つのグループにまとめられます。
このようにグループ化することで、設定ファイルの中で「ここからここまではブログのルールです!」という境界線がはっきりします。視覚的にも非常に分かりやすくなり、後から修正したい時も迷子にならずに済みます。
// 「blog」という名前でグループを作る
$routes->group('blog', function($routes) {
// 実際には /blog/list というURLになる
$routes->get('list', 'BlogController::index');
// 実際には /blog/detail というURLになる
$routes->get('detail', 'BlogController::show');
});
実行結果として、以下のようなURL構造が自動的に整理されます。
サイトURL/blog/list -> BlogControllerのindexメソッドへ
サイトURL/blog/detail -> BlogControllerのshowメソッドへ
4. 別ファイルに分けてさらにスッキリさせる方法
グループ化してもまだファイルが長い場合は、ルーティングの設定自体をコントローラごとに「別々のファイル」に分けてしまう究極の整理術があります。これを「ファイル分割」と呼びます。本棚がパンパンになったので、新しい本棚を買い足してカテゴリーごとに分けるようなイメージです。
CodeIgniterでは、設定ファイルの中で他のファイルを読み込む命令(require)を使うことができます。例えば、ユーザー管理用のルーティングだけを別のファイルに書き出して、それをメインの案内図から呼び出すようにします。これにより、メインのファイルは数行で済み、非常にメンテナンスしやすくなります。
// app/Config/Routes.php の中で別ファイルを読み込む
if (file_exists(APPPATH . 'Config/UserRoutes.php')) {
require APPPATH . 'Config/UserRoutes.php';
}
「file_exists」というのは「そのファイルは存在しますか?」と確認する魔法の言葉です。もしファイルがあれば読み込むという処理をすることで、エラーを防ぎつつ整理ができます。これで、ユーザー管理の修正をしたい時は「UserRoutes.php」だけを見れば良いという状態になります。
5. オートルーティングを活用して自動案内
「そもそもルーティングを一回ずつ書くのが面倒くさい!」という方には、オートルーティング(Auto Routing)という便利な機能があります。これは、あらかじめ決まったルールに従って、CodeIgniterが自動的にURLとコントローラを紐付けてくれる機能です。初心者のうちは、この「自動モード」に頼るのも一つの手です。
例えば、「サイトURL/Member/login」というURLでアクセスしたら、自動的に「Memberという名前のコントローラのloginという仕事」を探しに行ってくれます。自分で一行ずつ案内図を書く必要がないので、手間が大幅に省けます。ただし、この機能を使うには設定画面でスイッチをオンにする必要があります。
// app/Config/Routing.php 内の設定(※CodeIgniter4の例)
public bool $autoRoute = true;
この設定を「true(本当、つまりオンという意味)」にすることで、自動案内が始まります。ただし、最近のプログラミングの世界では、セキュリティの観点から「勝手に案内されるより、自分でしっかり案内図を書く(明示的ルーティング)」ことが推奨されることも多いので、使い分けが大切です。
6. 名前付きルートでリンクの修正を簡単に
ルーティングを整理する際に、ぜひ覚えておきたいのが名前付きルートです。これは、特定のルートにニックネームを付ける機能です。ウェブサイトを作っていると、途中で「URLをやっぱり変えたいな」と思うことがよくあります。そんな時、あちこちにURLを直に書いていると全部修正しなければなりませんが、ニックネームを使っていれば、案内図の一箇所を直すだけで全てのリンクが自動的に切り替わります。
初心者のうちは「なぜそんな面倒なことを?」と思うかもしれませんが、ページ数が10枚、20枚と増えていくにつれて、このニックネーム機能のありがたみが身に染みてわかってきます。プログラムを「楽に管理する」ための知恵の一つです。
// 「mypage」というニックネーム(as)を付ける
$routes->get('user/profile/settings', 'User::settings', ['as' => 'mypage']);
// HTML(画面の部品)側ではニックネームで呼び出す
echo url_to('mypage');
実行結果として表示されるURLは以下の通りです。
http://localhost/user/profile/settings
7. プレースホルダーで柔軟なURLを作る
最後に、より高度な整理術として「プレースホルダー」を紹介します。これは、URLの一部に「何が入るか分からない変数(入れ物)」を置く方法です。例えば、ブログの記事ページを作る際、記事ごとに「blog/1」「blog/2」のように数字が変わりますよね。これを全部ルーティングに書くのは不可能です。
そこで、「ここには数字が入りますよ」という予約席を作っておきます。これがプレースホルダーです。CodeIgniterでは (:num) と書くことで、「ここは数字専用の席です」と指定できます。これにより、一つのルーティング設定だけで何千件もの記事ページに対応できるようになります。これも、コントローラ単位でルーティングをスッキリさせるためには欠かせない知識です。
// 「(:num)」は数字が入る場所という指定
$routes->get('news/view/(:num)', 'News::show/$1');
このように設定することで、ニュースの1番、2番、100番といった個別のページへ、たった1行の設定で正しく案内することができるようになります。