CodeIgniterのルーティング設定を完全ガイド!初心者でもわかる基本の書き方
生徒
「CodeIgniterで、URLと実際に動くプログラムを結びつける方法ってありますか?」
先生
「それは、ルーティングという機能を使います。URLのアドレスと、どのプログラムを動かすかを決める設定ですね。」
生徒
「ルーティングって難しそうですね…どのように設定するんですか?」
先生
「大丈夫です。基本的な書き方を覚えれば、誰でも簡単に設定できますよ。それでは、順番に見ていきましょう!」
1. CodeIgniterのルーティングとは?
CodeIgniterのルーティングとは、ウェブサイトのURLアドレスと、実際に動くプログラム(コントローラーとメソッド)を結びつける仕組みのことです。例えば、レストランで注文するときをイメージしてください。お客さんがメニューの「ハンバーグ定食」を注文すると、キッチンで料理人が「ハンバーグ定食を作る」という作業を行います。この「注文」がURLで、「料理を作る作業」がプログラムの実行にあたります。ルーティングは、この注文と作業を結びつける役割を果たしているのです。
CodeIgniterでは、通常は「app/Config/Routes.php」というファイルにルーティングの設定を書きます。このファイルを編集することで、自分の好きなURLでウェブサイトを作ることができるようになります。
2. ルーティング設定ファイルの場所と基本構造
まず、ルーティングを設定するファイルがどこにあるのかを確認しましょう。CodeIgniter4の場合、プロジェクトのフォルダ構造の中で「app」フォルダの中に「Config」フォルダがあり、その中に「Routes.php」というファイルがあります。このファイルを開くと、すでにいくつかの設定が書かれています。
Routes.phpファイルの中には、$routesという変数が用意されています。この変数を使って、URLとプログラムの対応関係を設定していきます。基本的な形は、$routes->メソッド名('URL', 'コントローラー名::メソッド名');という書き方になります。
3. 最もシンプルなルーティングの書き方
それでは、実際にルーティングを設定してみましょう。最も基本的な書き方は、getメソッドを使った方法です。これは、ブラウザでURLを入力してアクセスするときに使われる方法です。
$routes->get('about', 'Home::about');
この設定は、「https://example.com/about」というURLにアクセスしたときに、「Home」コントローラーの「about」メソッドを実行する、という意味になります。「Home」はコントローラーの名前で、「about」はその中のメソッド(関数)の名前です。コントローラーとは、プログラムの処理をまとめたファイルのことで、メソッドとは、その中の具体的な処理の単位のことです。
この書き方を覚えておけば、自分の好きなURLで、好きなプログラムを動かすことができるようになります。
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. 複数のパラメータを扱うルーティング
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メソッドに応じたルーティング設定
ウェブサイトでは、ページを見るだけでなく、フォームからデータを送信することもあります。このとき、データの送り方によって処理を変える必要があります。ページを見るときはget、データを送信するときはpostというメソッドを使います。
$routes->get('contact', 'Contact::form');
$routes->post('contact', 'Contact::submit');
この設定では、同じ「contact」というURLでも、普通にアクセスしたときは「form」メソッドでフォームを表示し、フォームから送信ボタンを押したときは「submit」メソッドでデータを処理する、という使い分けができます。HTTPメソッドとは、ブラウザとサーバーがデータをやり取りする方法の種類のことです。
このように、同じURLでも処理方法を変えることで、より使いやすいウェブサイトを作ることができます。
7. デフォルトコントローラーとホームページの設定
ウェブサイトのトップページ(ホームページ)は、ドメイン名だけでアクセスされる特別なページです。CodeIgniterでは、このトップページに表示するコントローラーを指定することができます。
Routes.phpファイルの中には、すでに次のような設定があるはずです。
$routes->get('/', 'Home::index');
この設定は、「https://example.com/」にアクセスしたときに、「Home」コントローラーの「index」メソッドを実行する、という意味です。スラッシュ(/)だけの指定は、ルートURL、つまりトップページを表しています。
自分のウェブサイトのトップページを変更したいときは、この部分を編集すればよいのです。例えば、「Welcome」というコントローラーを作って、そちらをトップページにしたい場合は、$routes->get('/', 'Welcome::index');のように書き換えます。
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. グループ化によるルーティング管理
ウェブサイトが大きくなってくると、管理画面や会員専用ページなど、特定の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. ルーティング設定の確認とデバッグ方法
ルーティングを設定した後は、正しく動作するか確認することが大切です。CodeIgniterには、設定したルーティングの一覧を確認する便利な機能があります。コマンドラインから「php spark routes」というコマンドを実行すると、すべてのルーティング設定が一覧で表示されます。
もしルーティングがうまく動かない場合は、次の点を確認してみましょう。まず、URLのスペルミスがないか確認します。次に、コントローラー名とメソッド名が正しく指定されているか確認します。コントローラーのファイル名は、先頭が大文字で、拡張子が「.php」になっている必要があります。
また、パラメータを使う場合は、受け取る側のメソッドでも引数を定義する必要があります。例えば、$routes->get('blog/(:num)', 'Blog::view/$1');という設定の場合、Blogコントローラーのviewメソッドはpublic function view($id)のように引数を受け取れる形にしておく必要があります。
エラーが出た場合は、エラーメッセージをよく読んで、どこに問題があるのかを確認しましょう。CodeIgniterは親切なエラーメッセージを表示してくれるので、初心者でも問題を見つけやすくなっています。