CodeIgniterのルーティング完全ガイド!RESTfulな設計でWebアプリ作成
生徒
「CodeIgniterでWebサイトを作っているのですが、URLの見た目をきれいに整える方法はありますか?」
先生
「それは『ルーティング』という機能を使うのが一番ですね。特にRESTful(レストフル)という考え方を取り入れると、とても整理された使いやすいシステムになりますよ。」
生徒
「レストフル…?何だか難しそうですね。初心者でも設定できるのでしょうか?」
先生
「大丈夫です!まずは住所案内のようなものだと考えれば簡単です。具体的な書き方を一緒に学んでいきましょう!」
1. ルーティングとは?初心者向けの基本解説
プログラミングの世界、特にPHPのフレームワークであるCodeIgniter(コードイグナイター)において、ルーティングは非常に重要な役割を持っています。初心者の方に分かりやすく例えると、ルーティングは「案内板」や「郵便配達員」のようなものです。
例えば、あなたがインターネットで「お菓子のレシピ」を見たいとき、ブラウザの住所欄(URL)に特定の文字を入力しますよね。この入力された住所を見て、「あ、この人はレシピのページを見たいんだな。じゃあ、レシピを準備するプログラムを動かそう!」と判断して案内してくれる仕組みがルーティングです。これがないと、コンピューターはどのプログラムを動かせばいいのか迷子になってしまいます。
通常、CodeIgniterでは「コントローラー」と呼ばれる、命令を出す担当者がページを表示させますが、ルーティングを設定することで、このURLのときはこのコントローラーを動かす、といった細かいルールを決めることができます。
2. RESTful(レストフル)設計の考え方
次に、少し聞き慣れないRESTful(レストフル)という言葉について説明します。これは、Webサイトの住所(URL)を誰が見ても分かりやすく、規則正しく作ろうという「設計図のルール」のことです。パソコンを触り始めたばかりの方でも、整理整頓された本棚をイメージすれば分かりやすいでしょう。
例えば、ブログの記事を管理する場合を考えてみましょう。
- 記事の一覧を見たいとき:
/articles - 新しい記事を書きたいとき:
/articles/new - 特定の記事を詳しく読みたいとき:
/articles/show/1
このように、URLを見ただけで「何をするページなのか」が想像できるのがRESTfulな設計の魅力です。CodeIgniterはこのRESTfulなルーティングを簡単に設定できる機能を持っています。これにより、開発者が増えても迷わずに作業ができ、Googleなどの検索エンジンからも「構造が分かりやすいサイトだ」と評価されやすくなります。
3. ルーティングの基本設定ファイルを覗いてみよう
CodeIgniterでルーティングの設定を行う場所は決まっています。基本的には app/Config/Routes.php という名前のファイルに命令を書き込んでいきます。ファイル名にある「Config(コンフィグ)」とは「設定」という意味、「Routes(ルーツ)」は「経路」という意味です。つまり「道筋を決める設定ファイル」ということですね。
まずは、一番シンプルなルーティングの書き方を見てみましょう。以下のコードは、「/hello」というURLにアクセスしたときに、指定したメッセージを出すための設定例です。
// Routes.phpの中身のイメージ
$routes->get('hello', function() {
return 'こんにちは!CodeIgniterの世界へようこそ。';
});
このコードでは、$routes->getという命令を使っています。これは「ブラウザからこのページを表示してねというお願い(GETリクエスト)が来たら」という意味です。かっこっこの中の 'hello' がURLの最後につく名前、その後の function() が実行される中身を表しています。このように、一行書くだけで新しいページが作れるのが特徴です。
4. HTTPメソッドとRESTfulな使い分け
RESTfulな設計を理解する上で欠かせないのが「HTTPメソッド」という言葉です。これはブラウザがサーバーに対して出す「お願いの種類」のことです。代表的なものは以下の4つです。パソコンの操作に例えると非常に簡単です。
| メソッド名 | 役割(パソコン操作の例え) |
|---|---|
| GET(ゲット) | ファイルを開いて見る(閲覧) |
| POST(ポスト) | 新しいファイルを作る(作成・保存) |
| PUT(プット) | ファイルの内容を書き換える(更新) |
| DELETE(デリート) | ファイルをゴミ箱に捨てる(削除) |
CodeIgniterでは、これらのメソッドごとにルーティングを記述できます。例えば、日記を投稿する処理を作る場合は、同じ「/diary」というURLでも、見るだけならGET、新しく書くならPOSTといった具合に使い分けるのがRESTfulなプログラミングの基本です。
5. 具体的なRESTfulルーティングの記述例
それでは、実際にブログシステムを想定したルーティングの構成例を見ていきましょう。初心者のうちは、一つずつ丁寧に設定を書いていくことが上達の近道です。コントローラー名を「Blog」とした場合の書き方は次のようになります。
// ブログ記事の一覧を表示する(見るだけ)
$routes->get('blog', 'Blog::index');
// 新しい記事を書くための画面を表示する
$routes->get('blog/create', 'Blog::create');
// 書いた記事をデータベースに保存する(作成)
$routes->post('blog/store', 'Blog::store');
// 特定の記事(1番など)の詳細を表示する
$routes->get('blog/show/(:num)', 'Blog::show/$1');
ここで出てきた (:num) というのは、「ここには数字が入りますよ」という特別な目印です。これを「プレースホルダー」と呼びます。例えば blog/show/5 と入力すれば、5番の記事を表示するプログラムが動きます。$1 というのは、その数字をプログラムの中で使えるように橋渡しをするための合言葉のようなものです。これにより、何百記事あっても一つのルーティング設定で対応できるようになります。
6. resourceを使った一括ルーティング設定
先ほどは一つずつ丁寧に設定を書きましたが、CodeIgniterには「一気に全部設定しちゃおう!」という便利な機能があります。それが resource(リソース)という機能です。これを使うと、先ほど説明したGETやPOSTなどの基本的なルールを一行で自動的に作成してくれます。
// 「photos」という名前でRESTfulなルートを自動作成する
$routes->resource('photos');
たったこれだけで、写真の投稿、閲覧、編集、削除に関わる全ての道筋(ルート)が自動的に出来上がります。初心者の方にとっては、最初は中身がどうなっているか分かりにくいかもしれませんが、「決まったルールで道を作ってくれる魔法の呪文」だと思っておけば大丈夫です。慣れてきたら、この魔法を使って効率よく開発を進めることができます。
7. URLに引数を渡して動的なページを作る
Webサイトには、ユーザーの名前によって表示を変えたり、検索したキーワードに合わせて結果を出したりする機能がありますよね。これを「動的なページ」と呼びます。ルーティングでも、URLの一部をデータとしてプログラムに渡すことができます。数字だけでなく、文字を受け取る場合は (:any) という書き方を使います。
// ユーザー名を受け取ってプロフィールを表示する例
// 例:/profile/tanaka にアクセス
$routes->get('profile/(:any)', 'User::profile/$1');
この (:any) は「どんな文字でもOK」という意味です。「tanaka」さんでも「yamada」さんでも、この一つの設定でそれぞれのプロフィールを表示する準備が整います。まるで、空欄になっている宛名ラベルに、後から好きな名前を書けるようなイメージですね。これこそが、プログラミングの便利なところです。
8. ルーティングにおけるセキュリティと注意点
最後に、ルーティングを設定する際の「お作法」についても触れておきましょう。パソコンを触り始めたばかりの方は、どこに何を書いても動けばいいと思いがちですが、実は順番がとても大切です。ルーティングは「上から順番に」チェックされます。
例えば、「全てに当てはまるルール」を一番上に書いてしまうと、その下にある「特別なルール」まで辿り着けなくなってしまいます。まずは具体的な条件から書き、だんだん広い条件にしていくのがコツです。また、存在しないURLにアクセスされたときに「ページが見つかりません(404エラー)」と正しく表示させるのも、ルーティングの大切な仕事の一つです。適切な設定は、利用者の安心感に繋がり、結果としてSEO(検索エンジン最適化)にも良い影響を与えます。
CodeIgniterのルーティングをマスターすれば、どんな複雑なWebアプリケーションでも、綺麗で分かりやすい構造で作り上げることができるようになります。まずは簡単なURLから試して、少しずつRESTfulな世界に慣れていきましょう!