CodeIgniter 4 ルーティング完全攻略!管理画面とAPIを賢く切り分ける設計術
生徒
「CodeIgniterでWebサイトを作っているのですが、ユーザーが見るページと、管理人が使う管理画面、さらにスマホアプリ用のAPIをぐちゃぐちゃにせず整理する方法はありますか?」
先生
「それはとても大切な視点ですね!CodeIgniter 4には『ルーティング』という住所録のような機能があり、それを使って入り口を綺麗に分けることができるんですよ。」
生徒
「住所録ですか?初心者でも設定できますか?」
先生
「もちろんです。URLのルールを決めてあげるだけで、プログラムが迷子にならなくなります。具体的な書き方を一緒に見ていきましょう!」
1. ルーティングとは?初心者にもわかる「Webの案内役」
プログラミングの世界で言うルーティングとは、一言で言えば「URL(Webサイトの住所)」と「実行する処理(プログラム)」を紐付けるための案内役のことです。例えば、あなたがブラウザで /about というページにアクセスしたとき、サーバー側では『会社概要のプログラムを動かして!』という命令が飛びます。この橋渡しをするのがルーティングの役割です。
CodeIgniter 4(コードイグナイター4)という便利なフレームワーク(アプリを作るための道具箱)では、app/Config/Routes.php というファイルにこのルールを書いていきます。もしこの設定がバラバラだと、管理画面のURLが表側から見えてしまったり、セキュリティ上の問題が発生したりする可能性があります。そのため、しっかりと「整理整頓」することが、安全なシステム開発の第一歩となるのです。
これから解説するのは、通常のWebページ、管理者が使う特別なページ(管理画面)、そしてデータだけをやり取りするAPIの3つを、誰が見ても分かりやすいようにグループ分けする方法です。
2. グループ化(Group)の魔法!管理画面用URLをスッキリさせる
管理画面を作るとき、URLの先頭に admin/ という言葉をつけたいことがよくあります。例えば、admin/login や admin/users といった形です。これを1つずつ設定するのは大変ですよね。そこで便利なのがグループ化という機能です。
グループ化を使うと、「ここから先は全部 admin の仲間ですよ!」と宣言することができます。これにより、コードの見た目が綺麗になり、修正が必要なときも一箇所を直すだけで済むようになります。また、管理画面だけに適用したい特別なルール(例えば、ログインしていない人は入れないといった制限)も、このグループ単位で設定しやすくなります。
まずは、最も基本的な管理画面用のルーティング設定を見てみましょう。ここでは「Admin」というフォルダの中にあるプログラムを呼び出すように設定しています。
// 管理画面用のグループ設定
$routes->group('admin', function ($routes) {
// URLが「admin/dashboard」の時の設定
$routes->get('dashboard', 'Admin\Dashboard::index');
// URLが「admin/users」の時の設定
$routes->get('users', 'Admin\Users::list');
});
この設定を書くだけで、ブラウザから http://example.com/admin/dashboard にアクセスした際に、管理画面専用のプログラムが動き出します。初心者のうちは、このように「塊」で考える癖をつけると上達が早くなります。
3. API用ルーティングの分離!専用の入り口を作る理由
次に、スマホアプリや外部サービスとデータをやり取りするためのAPI(エーピーアイ)について考えましょう。APIとは、人間が読むHTMLファイルではなく、プログラムが読みやすい形式(JSONなど)でデータを受け渡す窓口のことです。
API用のURLには、慣習として api/ という文字を含めることが多いです。また、APIには「バージョン」という考え方があります。例えば、アプリを大幅にアップデートした際に古いアプリも動かし続けるため、api/v1/(バージョン1)や api/v2/(バージョン2)のように名前を分けることが一般的です。これもルーティングのグループ機能を使えば、驚くほど簡単に実現できます。
以下のコードは、API専用の入り口をバージョン管理も含めて作成する例です。
// API専用のグループ設定(バージョン1)
$routes->group('api/v1', function ($routes) {
// ニュース一覧を取得するAPI
$routes->get('news', 'Api\V1\News::index');
// 特定のニュースを保存するAPI
$routes->post('news/create', 'Api\V1\News::create');
});
このように分けておくことで、将来的にプログラムが巨大になっても、「APIの不具合ならこのファイル、管理画面ならこのファイル」と即座に判断できるようになります。これがプロの現場でも使われる「設計」の第一歩です。
4. 名前空間(Namespace)の活用!プログラムの住所を整理する
ルーティングを整理する際に欠かせないのが名前空間(Namespace)という考え方です。これは、プログラムの「名字」のようなものです。例えば、同姓同名の「佐藤さん」が二人いても、住所(名前空間)が違えば見分けがつきますよね。
CodeIgniterでは、Admin フォルダの中にあるプログラムと、一般公開用のプログラムが同じ名前になってしまうことがよくあります。これを防ぐために、ルーティング設定の中で「このグループは、このフォルダの中のプログラムを使ってね」と明示的に指定します。これを 'namespace' => 'App\Controllers\Admin' のように記述します。
この設定を組み合わせることで、より高度で安全なルーティング設計が可能になります。実際にオプションを指定した書き方を確認してみましょう。
// 名前空間を指定して管理画面をグループ化
$routes->group('manager', ['namespace' => 'App\Controllers\Admin'], function ($routes) {
// 実際には App\Controllers\Admin\Home::index が呼ばれる
$routes->get('home', 'Home::index');
// 実際には App\Controllers\Admin\Settings::show が呼ばれる
$routes->get('settings', 'Settings::show');
});
この書き方をマスターすると、ファイル構成が非常に美しくなり、チーム開発でも「分かりやすい!」と喜ばれるコードになります。
5. フィルター機能との連携!セキュリティを鉄壁にする
管理画面やAPIを分ける最大のメリットの一つは、フィルター(Filter)を適用しやすくなることです。フィルターとは、プログラムの本処理が動く前に「この人はログインしているかな?」や「変なデータが入っていないかな?」とチェックを行う検問所のような機能です。
一般ユーザー向けのページにはログインチェックは不要ですが、管理画面には必須です。グループごとにフィルターを設定することで、一行書くだけでグループ内の全てのページにセキュリティチェックをかけることができます。初心者の方がやりがちな「1つずつログインチェックのコードをコピーして貼り付ける」という手間を完全に省くことができるのです。
// ログインチェックフィルター(auth)を適用した管理画面グループ
$routes->group('admin', ['filter' => 'auth'], function ($routes) {
// この中のページは全て、ログインしていないと見られないようになります
$routes->get('profile', 'Admin\User::profile');
$routes->get('config', 'Admin\Config::index');
});
このように、ルーティングの設計を丁寧に行うことは、単にURLを綺麗にするだけでなく、アプリ全体のセキュリティレベルを底上げすることにも直結します。ぜひこの「グループ化」と「フィルター」の組み合わせを覚えておいてください。
6. 実際の動作確認!設定したURLにアクセスしてみよう
ルーティングの設定が終わったら、実際にブラウザや専用のツールで正しく動くか確認しましょう。パソコンに詳しくない方でも、URLの仕組みがわかれば簡単にテストできます。
例えば、先ほどの管理画面の設定が正しければ、ブラウザのURL入力欄に 自分のサイトの住所/admin/profile と入力してエンターキーを押すと、あなたが用意した管理画面用のページが表示されるはずです。もし「404 Not Found」というエラーが出た場合は、ルーティングの書き方に間違いがないか、あるいはフォルダの名前が間違っていないかをチェックしてみましょう。
APIの場合は、ブラウザで見るよりも「Postman」や「Talend API Tester」といったツールを使うと便利ですが、最初はブラウザで get メソッド(情報を取得する命令)を試すだけでも十分な学習になります。
// 成功した場合のイメージ(APIの応答など)
{
"status": "success",
"message": "管理画面のデータ取得に成功しました",
"data": {
"admin_name": "管理者A",
"last_login": "2026-01-08"
}
}
このような結果が返ってくれば、あなたのルーティング設計は大成功です!住所録が正しく機能し、プログラムが意図した通りに呼び出されている証拠です。一つずつ丁寧に設定していくことで、複雑なWebアプリケーションも必ず完成させることができます。