CodeIgniterのデフォルトルーティングを完全ガイド!初心者でもわかる基本動作
生徒
「CodeIgniterでURLとプログラムがどう繋がっているのか分かりません。」
先生
「それは、ルーティングという仕組みが自動的に処理してくれているんですよ。」
生徒
「ルーティングって何ですか?難しそうですね。」
先生
「大丈夫です。実はCodeIgniterのデフォルトルーティングは、とてもシンプルで分かりやすいルールで動いています。今日はその基本をしっかり理解していきましょう!」
1. ルーティングとは?初心者向けの基礎知識
ルーティングとは、Webサイトのアドレス(URL)と実際に実行されるプログラムを結びつける仕組みのことです。例えば、あなたがレストランに行って「ハンバーグ定食をください」と注文したとします。すると店員さんは厨房に伝えて、料理人がハンバーグ定食を作ってくれますよね。
Webサイトでも同じことが起こっています。ブラウザのアドレスバーに「example.com/products」と入力すると、CodeIgniterが「productsというURLが来たから、商品一覧を表示するプログラムを実行しよう」と判断してくれます。この判断をする仕組みがルーティングなのです。
CodeIgniterには最初から設定されているデフォルトルーティングがあり、特別な設定をしなくても自動的にURLとプログラムを繋げてくれます。
2. CodeIgniterのデフォルトルーティングの基本ルール
CodeIgniterのデフォルトルーティングは、非常にシンプルな規則に従って動作します。基本的なURLの構造は次のようになっています。
http://example.com/コントローラー名/メソッド名/パラメータ1/パラメータ2
これだけ見ると難しそうですが、実際にはとても分かりやすいルールです。まずコントローラーとは、プログラムをまとめたファイルのことで、メソッドとは、そのファイルの中にある具体的な処理のことです。
例えば、お店に例えると、「商品管理部門」がコントローラーで、「商品を追加する」「商品を削除する」といった具体的な作業がメソッドになります。パラメータは、その作業に必要な情報(商品番号など)です。
3. 実際のURLとコントローラーの対応関係
具体的な例で見ていきましょう。次のようなURLにアクセスしたとします。
http://example.com/products/view/123
このURLをCodeIgniterが受け取ると、次のように解釈されます。
- products → Productsコントローラーを呼び出す
- view → viewメソッドを実行する
- 123 → 引数として「123」を渡す
つまり、「app/Controllers/Products.php」というファイルの中にある「view」という関数が実行され、商品番号123の情報が表示される、という流れになります。
実際のコントローラーのコードは次のようになります。
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function view($id)
{
echo "商品番号: " . $id . " の詳細ページです";
}
}
このコードを見ると、viewメソッドが$idという引数を受け取っています。URLの「123」が自動的にこの$idに入るのです。
4. コントローラー名だけを指定した場合の動作
もし、URLでメソッド名を省略したらどうなるでしょうか。例えば次のようなURLです。
http://example.com/products
この場合、CodeIgniterは自動的にindexメソッドを実行します。indexメソッドは、コントローラーのデフォルトメソッドとして扱われます。これは、お店で何も注文を言わなかったら「本日のおすすめ」が出てくるようなイメージです。
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function index()
{
echo "商品一覧ページへようこそ";
}
public function view($id)
{
echo "商品番号: " . $id;
}
}
この例では、「/products」にアクセスするとindexメソッドが実行され、「/products/view/123」にアクセスするとviewメソッドが実行されます。
5. 何も指定しない場合のデフォルト動作
では、URLがトップページだけの場合はどうでしょうか。
http://example.com/
このように何も指定されていない場合、CodeIgniterはHomeコントローラーのindexメソッドを実行します。これは「app/Config/Routes.php」ファイルで設定されているデフォルトコントローラーです。
Routesファイルを見ると、次のような記述があります。
<?php
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
この設定により、何も指定されていない場合は自動的にHomeコントローラーのindexメソッドが実行されるようになっています。これは、お店に入ったらまず受付に案内されるのと同じような仕組みです。
6. 複数のパラメータを渡す方法
URLには複数のパラメータを指定することもできます。例えば、商品を検索する機能で、カテゴリーと価格帯を指定したい場合を考えてみましょう。
http://example.com/products/search/electronics/1000
この場合、「electronics」(電化製品)というカテゴリーで、価格が1000円以上の商品を検索する、という処理になります。コントローラーでは次のように受け取ります。
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function search($category, $minPrice)
{
echo "カテゴリー: " . $category . "<br>";
echo "最低価格: " . $minPrice . "円以上";
}
}
URLのスラッシュ(/)で区切られた値が、順番にメソッドの引数に渡されていきます。この順番は重要で、入れ替わるとプログラムが正しく動作しないので注意が必要です。
7. 大文字小文字の扱いと命名規則
CodeIgniterのデフォルトルーティングでは、URLの大文字小文字は区別されません。ただし、コントローラーのクラス名は最初の文字を大文字にする必要があります。これは、PHPのクラス命名規則に従っています。
例えば、「UserProfile」というコントローラーを作った場合、次のどのURLでもアクセスできます。
- http://example.com/userprofile
- http://example.com/UserProfile
- http://example.com/USERPROFILE
しかし、ファイル名とクラス名は必ず「UserProfile.php」のように最初を大文字にしましょう。これは、プログラミングの世界で広く使われているパスカルケースという命名規則です。
8. デフォルトルーティングのメリットと注意点
CodeIgniterのデフォルトルーティングには、いくつかのメリットがあります。まず、特別な設定をしなくても、コントローラーとメソッドを作るだけですぐにURLでアクセスできるという手軽さがあります。初心者の方でも、複雑な設定ファイルを編集することなく、すぐにWebアプリケーション開発を始められます。
また、URLとプログラムの構造が一致するため、直感的で分かりやすいという特徴もあります。URLを見れば、どのコントローラーのどのメソッドが実行されるか予測できるので、チーム開発の際にも便利です。
ただし、注意点もあります。デフォルトルーティングでは、すべてのpublicメソッドがURLからアクセス可能になってしまいます。つまり、外部から実行されたくない処理も、URLを知られると実行されてしまう可能性があります。この問題を防ぐには、外部からアクセスさせたくないメソッドをprotectedまたはprivateにする必要があります。
9. デフォルトルーティングで作る簡単な例
最後に、デフォルトルーティングを使った簡単なサンプルを見てみましょう。ブログ記事を表示するコントローラーを作ります。
<?php
namespace App\Controllers;
class Blog extends BaseController
{
public function index()
{
echo "<h1>ブログ記事一覧</h1>";
echo "<p>すべての記事を表示します</p>";
}
public function article($id = 1)
{
echo "<h1>記事番号: " . $id . "</h1>";
echo "<p>この記事の内容を表示します</p>";
}
public function category($name)
{
echo "<h1>" . $name . "カテゴリーの記事</h1>";
echo "<p>このカテゴリーの記事一覧を表示します</p>";
}
}
このコントローラーを作成すると、次のようなURLでアクセスできます。
/blog→ 記事一覧を表示/blog/article/5→ 記事番号5を表示/blog/category/technology→ technologyカテゴリーの記事を表示
このように、デフォルトルーティングを理解すれば、設定ファイルを編集することなく、コントローラーを作るだけで様々なページを作成できるようになります。
10. ルーティングが動かない時のチェックポイント
デフォルトルーティングを使っていて、うまく動作しない場合のチェックポイントをご紹介します。
1. ファイル名とクラス名が一致しているか
ファイル名が「Products.php」なら、クラス名も「class Products」である必要があります。名前が違うとエラーになります。
2. 名前空間(namespace)が正しいか
コントローラーの先頭に「namespace App\Controllers;」が書かれているか確認しましょう。これがないとCodeIgniterがコントローラーを見つけられません。
3. BaseControllerを継承しているか
クラス定義で「extends BaseController」となっているか確認します。これがないと、CodeIgniterの機能を正しく使えません。
4. メソッドがpublicになっているか
URLからアクセスするメソッドは「public function」で宣言する必要があります。protectedやprivateではアクセスできません。
5. .htaccessファイルが正しく配置されているか
URLから「index.php」を省略したい場合は、適切な.htaccessファイルが必要です。これはサーバーの設定に関わる部分なので、動かない場合は確認してみましょう。