CodeIgniterのURLルーティングとコントローラ呼び出しを完全解説!初心者向けガイド
生徒
「CodeIgniterで、URLを入力するとどうやってプログラムが動くんですか?」
先生
「URLから自動的にコントローラというファイルのメソッドが呼び出される仕組みがあるんです。これをルーティングと言います。」
生徒
「ルーティング?コントローラ?難しそうですね...」
先生
「大丈夫です!身近な例えで説明しますね。レストランで注文すると料理が出てくるように、URLを指定するとプログラムが実行される仕組みです。それでは詳しく見ていきましょう!」
1. CodeIgniterとは?PHPフレームワークの基礎知識
CodeIgniter(コードイグナイター)は、PHPフレームワークの一つです。フレームワークとは、プログラムを作るときの土台となる枠組みのことで、よく使う機能があらかじめ用意されています。例えるなら、家を建てるときの設計図のようなものです。一から全部作る必要がなく、決まった方法で効率的にウェブサイトやアプリケーションを開発できます。
CodeIgniterは、特に初心者に優しい設計で、シンプルで分かりやすいのが特徴です。ファイルの配置や書き方に一定のルールがあり、それに従うことで誰でも同じような構造のプログラムを作ることができます。
2. コントローラとは?プログラムの司令塔
コントローラ(Controller)は、CodeIgniterの中心となる重要なファイルです。レストランで例えると、お客さんからの注文を受けて、キッチンに指示を出すウェイターのような役割を果たします。
コントローラはapp/Controllers/というフォルダの中に保存されるPHPファイルで、ユーザーからのリクエスト(要求)を受け取り、必要な処理を実行して、結果を画面に表示する指示を出します。例えば「商品一覧を表示する」「ユーザー情報を登録する」といった処理を担当します。
コントローラの中にはメソッドという機能が複数入っています。メソッドとは、特定の仕事をするプログラムのまとまりのことです。一つのコントローラファイルの中に、複数のメソッドを作ることができます。
3. URLからコントローラが呼び出される基本の流れ
CodeIgniterでは、ブラウザのアドレスバーに入力するURLと、実行されるコントローラのメソッドが対応しています。この対応関係を自動で処理してくれる仕組みをルーティングと呼びます。
基本的なURLの構造は次のようになっています:
http://example.com/コントローラ名/メソッド名/パラメータ
例えば、http://example.com/products/listというURLにアクセスすると、Productsコントローラのlistメソッドが実行されます。まるで住所を指定すると、その場所に自動で案内してくれるカーナビのような仕組みです。
4. 実際のコントローラファイルの作り方
それでは実際にコントローラファイルを作成してみましょう。CodeIgniterでコントローラを作るには、app/Controllers/フォルダの中にPHPファイルを作成します。ファイル名の最初の文字は大文字にするルールがあります。
例として、商品情報を扱うProducts.phpというコントローラを作成してみます:
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function index()
{
echo "商品一覧ページです";
}
public function detail()
{
echo "商品詳細ページです";
}
}
このコードを順番に説明します。namespaceは名前空間といって、ファイルの場所を示すものです。class ProductsでProductsという名前のクラス(設計図)を作成しています。extends BaseControllerは、CodeIgniterの基本機能を継承する(受け継ぐ)という意味です。
public function index()とpublic function detail()が、それぞれメソッドです。publicは外部から呼び出せるという意味で、functionは関数(機能)を作るときのキーワードです。
5. URLとメソッドの対応関係を理解する
先ほど作成したProductsコントローラは、次のようなURLでアクセスできます:
http://example.com/products
→ Products コントローラの index メソッドが実行される
http://example.com/products/index
→ Products コントローラの index メソッドが実行される
http://example.com/products/detail
→ Products コントローラの detail メソッドが実行される
メソッド名を省略すると、自動的にindexメソッドが呼び出されます。indexは、そのコントローラのデフォルト(初期設定)のメソッドという意味です。本屋さんで例えると、「小説コーナーに行って」と言われたら入口に案内されるようなイメージです。
コントローラ名とメソッド名は、URLでは小文字で書くことができます。CodeIgniterが自動的に大文字小文字を判断して、正しいコントローラを見つけてくれます。
6. パラメータを受け取るメソッドの作り方
URLから値を受け取って処理することもできます。例えば、商品番号を指定して詳細を表示したい場合、メソッドにパラメータ(引数)を設定します。パラメータとは、メソッドに渡す情報のことです。
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function show($id)
{
echo "商品番号: " . $id . " の詳細情報";
}
}
この場合、http://example.com/products/show/123というURLにアクセスすると、次のように表示されます:
商品番号: 123 の詳細情報
URLの最後の123が、メソッドの$idパラメータに自動的に渡されます。複数のパラメータを受け取ることもできます。例えばpublic function search($category, $keyword)のように書けば、カテゴリとキーワードの両方を受け取れます。
7. デフォルトコントローラの設定方法
サイトのトップページ(http://example.com/)にアクセスしたとき、どのコントローラを表示するかを設定できます。これをデフォルトコントローラといいます。
設定はapp/Config/Routes.phpファイルで行います。このファイルを開くと、次のような記述があります:
<?php
$routes->get('/', 'Home::index');
この設定により、トップページにアクセスするとHomeコントローラのindexメソッドが実行されます。別のコントローラをトップページにしたい場合は、'Home::index'の部分を変更します。例えば商品一覧をトップページにしたいなら'Products::index'と書き換えます。
8. ルーティングのカスタマイズ方法
URLとコントローラの対応関係は、自由にカスタマイズすることができます。app/Config/Routes.phpファイルで独自のルートを設定できます。
例えば、http://example.com/item/123というURLで商品詳細を表示したい場合:
<?php
$routes->get('item/(:num)', 'Products::show/$1');
(:num)は数字を表すプレースホルダー(場所取り)で、URLの数字部分を$1として受け取ります。このように設定すると、実際にはProductsコントローラのshowメソッドが呼び出されますが、URLはitemという分かりやすい名前にできます。
他にも(:any)で任意の文字列、(:alpha)でアルファベットのみを受け取るなど、様々なパターンが使えます。これにより、ユーザーに分かりやすいURLを設計できます。
9. コントローラが見つからないときの動作
存在しないコントローラやメソッドにアクセスすると、CodeIgniterは404エラーページを表示します。404とは「ページが見つかりません」という意味のエラーコードです。
例えば、http://example.com/notexistのように、存在しないコントローラ名を指定すると、エラーページが表示されます。開発中は詳しいエラー情報が表示されますが、本番環境では一般的なエラーページが表示されるように設定できます。
このエラーページもapp/Views/errors/フォルダで自由にカスタマイズできます。デザインを変更して、ユーザーに優しいエラーページを作成することができます。
10. コントローラからビューを表示する基本
実際のウェブサイトでは、HTMLで作られた画面を表示します。CodeIgniterでは、画面の表示部分をビュー(View)というファイルで管理します。コントローラからビューを呼び出して画面を表示する流れを見てみましょう。
まずapp/Views/フォルダにproduct_list.phpというビューファイルを作成します:
<!DOCTYPE html>
<html>
<head>
<title>商品一覧</title>
</head>
<body>
<h1>商品一覧ページ</h1>
<p>ここに商品リストが表示されます</p>
</body>
</html>
そして、コントローラからこのビューを呼び出します:
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function list()
{
return view('product_list');
}
}
view('product_list')という関数で、ビューファイルを読み込んで表示します。ファイル名の.phpは省略できます。この仕組みにより、プログラムのロジック(処理)と画面デザインを分離して管理できるようになります。レストランで例えると、料理を作る人(コントローラ)と、お皿に盛り付ける人(ビュー)が分担しているようなイメージです。
まとめ
CodeIgniterのURLルーティングとコントローラの仕組みを振り返る
ここまで、CodeIgniterにおけるURLルーティングとコントローラの役割について詳しく見てきました。CodeIgniterはPHPフレームワークの中でも特にシンプルで理解しやすい設計になっており、初心者でも段階的にウェブアプリケーション開発を学ぶことができます。特に重要なのが、URLとコントローラメソッドの対応関係です。ブラウザでアクセスされたURLがどのプログラムを実行するのかを自動的に判断し、適切な処理を呼び出す仕組みがルーティングです。
ウェブサイトの開発では、ユーザーが入力したURLをどのように処理するのかがとても重要になります。CodeIgniterでは、コントローラというファイルがその中心的な役割を担います。コントローラはユーザーからのリクエストを受け取り、必要な処理を行い、最終的に画面を表示するビューを呼び出します。この流れは多くのPHPフレームワークでも採用されているMVC構造の基本であり、ウェブアプリケーション開発の基礎として必ず理解しておきたいポイントです。
URLとコントローラの関係を理解することで、ウェブサイトの構造を整理しながら開発できるようになります。例えば商品一覧ページ、商品詳細ページ、検索ページなど、それぞれのURLがどのコントローラのどのメソッドに対応しているのかを整理しておくことで、開発だけでなく保守作業も非常に楽になります。また、URLにパラメータを渡すことで、商品番号や検索キーワードなどの情報をサーバー側のプログラムに送ることができます。
さらに、Routes.phpを使ったカスタムルーティングを利用すると、より分かりやすいURLを設計できます。例えば商品詳細ページをproducts/show/123のようなURLではなく、item/123のような短く分かりやすいURLに変更することも可能です。このようなURL設計は、ユーザーにとって分かりやすいだけでなく、検索エンジンにも理解されやすい構造になります。ウェブサイトの設計では、このようなURL構造の工夫がとても重要になります。
また、CodeIgniterではデフォルトコントローラの設定も簡単に行えます。トップページにアクセスしたときにどのコントローラを表示するのかを設定することで、サイトの入り口となるページを自由にカスタマイズできます。商品一覧ページをトップページにすることもできますし、ニュースページやブログ記事一覧をトップページにすることも可能です。
コントローラからビューを呼び出す仕組みも、ウェブアプリケーション開発ではとても重要です。コントローラは処理を担当し、ビューは画面表示を担当します。この役割分担を行うことで、プログラムの構造が整理され、後から機能追加や修正を行うときにも作業しやすくなります。大規模なウェブサイトでは、このような構造化された設計が開発効率を大きく左右します。
理解を深めるサンプルコントローラ
ここで、今回学んだ内容をまとめたシンプルなサンプルコントローラを見てみましょう。URLルーティング、メソッド呼び出し、パラメータ取得、ビュー表示までの基本的な流れを確認できます。
<?php
namespace App\Controllers;
class Products extends BaseController
{
public function index()
{
return view('product_list');
}
public function show($id)
{
echo "商品番号: " . $id . " の商品詳細ページです";
}
public function search($keyword)
{
echo "検索キーワード: " . $keyword;
}
}
このコントローラでは、商品一覧ページ、商品詳細ページ、商品検索ページという三つの基本機能を用意しています。URLに応じてそれぞれのメソッドが呼び出される仕組みになっています。
http://example.com/products
商品一覧ページが表示される
http://example.com/products/show/10
商品番号10の詳細ページが表示される
http://example.com/products/search/phone
phoneというキーワードで検索される
このようにURLとメソッドを整理して設計することで、ウェブサイトの構造がとても分かりやすくなります。CodeIgniterのルーティング機能を理解すると、ブログサイト、商品管理システム、会員管理システムなど様々なウェブアプリケーションを効率的に作れるようになります。
特に初心者のうちは、URLとコントローラの対応関係をしっかり意識しながらプログラムを書くことが大切です。どのURLでどのメソッドが呼び出されるのかを理解しておくことで、バグの原因も見つけやすくなります。また、将来的に機能を追加するときにも、どのコントローラに新しいメソッドを追加すればよいのかがすぐに判断できるようになります。
生徒
今日の記事で、URLを入力するとコントローラのメソッドが呼び出される仕組みがよく分かりました。CodeIgniterのルーティングはとてもシンプルですね。
先生
そうですね。CodeIgniterは初心者でも理解しやすいように設計されています。URLとコントローラ、メソッドの関係を覚えることがウェブアプリケーション開発の第一歩になります。
生徒
URLの最後に数字をつけると、その数字がメソッドのパラメータに渡されるのも便利ですね。商品番号などを簡単に取得できます。
先生
その通りです。例えば商品詳細ページやブログ記事ページでは、URLにIDを含めることが多いです。CodeIgniterではその値をメソッドの引数として簡単に受け取ることができます。
生徒
Routes.phpでルーティングをカスタマイズすると、もっと分かりやすいURLを作れるのも面白いですね。
先生
そうですね。ウェブサイトではURL設計もとても重要です。分かりやすいURLはユーザーにも理解しやすく、サイト全体の構造も整理しやすくなります。
生徒
コントローラとビューを分ける仕組みも理解できました。処理を書く場所と画面を作る場所が分かれていると管理しやすいですね。
先生
その考え方がMVC構造です。コントローラは処理、ビューは画面表示という役割分担をすることで、大きなシステムでも整理されたプログラムを書くことができます。
生徒
なるほど。まずはコントローラとルーティングをしっかり理解して、簡単なウェブアプリケーションを作ってみたいです。
先生
とても良い考えです。商品一覧ページやブログ記事一覧ページなどを作りながら練習すると、URLルーティングとコントローラの仕組みが自然に身につきますよ。