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ファイルが必要です。これはサーバーの設定に関わる部分なので、動かない場合は確認してみましょう。
まとめ
CodeIgniterのデフォルトルーティングの基本を振り返る
CodeIgniterを使ったWebアプリケーション開発では、URLとプログラムの処理を結び付ける仕組みとしてルーティングという重要な機能が存在します。本記事ではその中でも特に基本となるデフォルトルーティングの仕組みについて解説してきました。デフォルトルーティングを理解すると、CodeIgniterのコントローラー構造やURL設計の考え方が自然と理解できるようになります。
CodeIgniterのデフォルトルーティングは非常にシンプルな構造で動いています。基本的なURLの形式はコントローラー名メソッド名パラメータという順番で構成されます。つまりブラウザからアクセスされたURLの文字列をCodeIgniterが解析し、その内容に応じて適切なコントローラークラスとメソッドを自動的に呼び出してくれるのです。
例えば products view 123 のようなURLにアクセスすると Productsコントローラーのviewメソッドが実行され、パラメータとして数値の一二三が渡されます。この仕組みによって商品番号ごとのページ表示や記事詳細ページなどを簡単に作ることができます。WebアプリケーションではこのようにURLから情報を受け取り処理を行うことが非常に多いため、ルーティングの理解はとても重要です。
indexメソッドとデフォルトコントローラー
CodeIgniterのデフォルトルーティングには便利な自動処理も用意されています。例えばURLでメソッド名を指定しなかった場合は自動的にindexメソッドが呼び出されます。つまり products というURLにアクセスすると Productsコントローラーのindexメソッドが実行されます。このindexメソッドはページの一覧表示やトップ画面などによく使われます。
さらにサイトのトップURLだけがアクセスされた場合にはデフォルトコントローラーが実行されます。通常はHomeコントローラーが設定されており、そのindexメソッドが実行されます。この設定はRoutes設定ファイルで管理されており、必要に応じて変更することも可能です。サイトのトップページをどのコントローラーで表示するかを決める重要な設定になります。
<?php
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
この設定によってトップページにアクセスした時には自動的にHomeコントローラーのindexメソッドが実行されます。Webサイトの入口となる処理をここで管理することができます。
パラメータの受け取りとURL設計
デフォルトルーティングではURLに複数のパラメータを含めることもできます。例えば商品検索機能やブログ記事表示などではURLから情報を受け取り、その内容に応じて表示内容を変更する必要があります。URLのスラッシュ区切りの値は順番にメソッドの引数として渡されるため、コントローラー側ではそれを受け取るだけで処理を実装できます。
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function view($id)
{
echo "商品番号 " . $id . " の詳細ページです";
}
}
このようにURLの値が自動的にメソッドの引数に入る仕組みを理解しておくと、商品ページや記事ページなどの動的ページを簡単に作成できます。Webアプリケーション開発ではとても基本的な仕組みなのでしっかり覚えておくと良いでしょう。
デフォルトルーティングのメリット
CodeIgniterのデフォルトルーティングには多くの利点があります。まず設定が非常に少なく初心者でもすぐに開発を始められる点です。複雑な設定ファイルを書かなくてもコントローラーを作るだけでURLからアクセスできるため学習効率が高くなります。
またURL構造とプログラム構造が一致するためコードの可読性が高くなります。開発者がURLを見ただけでどのコントローラーのどのメソッドが実行されるか理解できるため、チーム開発でも管理しやすい構造になります。これはCodeIgniterが初心者からプロまで幅広く利用されている理由の一つでもあります。
開発時に注意するポイント
便利なデフォルトルーティングですがいくつか注意点もあります。特に重要なのはコントローラーのpublicメソッドがURLから直接実行できるという点です。つまり外部から実行されたくない処理をpublicのままにしておくと、URLを入力するだけで実行されてしまう可能性があります。そのため内部処理専用のメソッドはprotectedまたはprivateに設定しておくことが重要です。
<?php
class Sample extends BaseController
{
public function index()
{
echo "公開ページです";
}
protected function internalProcess()
{
echo "内部処理です";
}
}
このようにアクセス制御を適切に設定することで安全なWebアプリケーションを構築することができます。ルーティングの仕組みを理解することはセキュリティ面でも重要なポイントになります。
CodeIgniterのデフォルトルーティングはWebアプリケーション開発の基礎となる重要な仕組みです。コントローラー構造URL設計メソッド呼び出しパラメータ処理など多くの基本要素がここに集約されています。最初にこの仕組みを理解しておくことで、ブログシステム商品管理システム会員管理システムなど様々なWebサービスを効率良く開発できるようになります。
URL構造とコントローラーの関係を意識しながら開発を進めることで、整理された分かりやすいアプリケーション設計ができるようになります。CodeIgniterのルーティングの基本をしっかり理解して、実際の開発で活用していきましょう。
生徒
今日の内容を振り返るとCodeIgniterではURLとコントローラーの関係がとても分かりやすい仕組みになっていると感じました。特別な設定をしなくてもURLから自動的にコントローラーとメソッドが呼び出されるのは便利ですね。
先生
その通りです。CodeIgniterのデフォルトルーティングは初心者でも理解しやすい設計になっています。コントローラー名メソッド名パラメータという順番を覚えておくだけで基本的な動作は理解できます。
生徒
なるほど。例えば products view 一二三 のようなURLにアクセスするとProductsコントローラーのviewメソッドが実行されて商品番号のページが表示されるという仕組みですね。
先生
その理解で大丈夫です。そしてメソッドを指定しなかった場合はindexメソッドが実行されます。さらにトップURLの場合はHomeコントローラーのindexメソッドが実行されるという流れになります。
生徒
URLの構造とプログラムの構造が一致しているのでとても覚えやすいですね。これならブログや商品一覧などのページも作れそうです。
先生
そうですね。まずはデフォルトルーティングを理解してコントローラーを作る練習をすると良いでしょう。慣れてきたらカスタムルーティングも使えるようになります。ですが基本は今日学んだデフォルトルーティングなので、しっかり身に付けておきましょう。
生徒
はい。URLとコントローラーの関係を意識しながらCodeIgniterのアプリケーション開発を練習してみます。