CodeIgniter 4のルーティング完全ガイド!GET・POSTを初心者が使い分ける方法
生徒
「CodeIgniterでWebサイトを作っていますが、データの送信方法によってURLの動作を変えるにはどうすればいいですか?」
先生
「それは『ルーティング』の設定で行います。特にGETとPOSTという2つの通信方法を区別して登録するのが基本ですよ。」
生徒
「GETとPOST……なんだか難しそうですね。使い分けの方法を教えてください!」
先生
「実はとてもシンプルです。今回はCodeIgniterでのルーティングの書き方を、初心者の方にも分かりやすく解説しますね!」
1. ルーティングとは何かを学ぼう
プログラミングの世界、特にWeb開発において「ルーティング(Routing)」という言葉は非常によく使われます。これは簡単に言うと、Webサイトにアクセスしてきたユーザーを「どのプログラムに案内するか」を決める道路標識や案内係のような役割を指します。
パソコンやスマートフォンでインターネットを見ているとき、私たちは「https://example.com/contact」といった「URL(ユーアールエル)」を入力しますよね。このURLを見たサーバー(情報を管理しているコンピューター)が、「あ、この人はお問い合わせページを見たいんだな」と判断して、正しい画面を表示してくれる仕組みがルーティングです。CodeIgniter(コードイグナイター)というPHPのフレームワークを使えば、この案内設定を自由自在にカスタマイズすることができるのです。
2. GETとPOSTの違いをやさしく解説
ルーティングを学ぶ上で避けて通れないのが、「GET(ゲット)」と「POST(ポスト)」という2つの言葉です。これらは「HTTPメソッド」と呼ばれ、情報を送る際の種類を指します。
GETは、主に「情報を取得したいとき」に使います。例えば、ブログの記事を読んだり、検索結果を表示したりするときです。情報はURLの後ろに「?q=keyword」のようにくっついて送られるため、誰でも中身を見ることができます。まるで透明な封筒に入った手紙のようなものです。
対してPOSTは、「情報を新しく送りたいとき」に使います。お問い合わせフォームからメッセージを送信したり、会員登録でパスワードを送ったりする場合です。情報はURLには表示されず、隠された状態で送られます。こちらは中身が見えない茶封筒のようなイメージですね。この2つを適切に使い分けることが、セキュリティの高い安全なWebサイトを作る第一歩となります。
3. CodeIgniterでのルーティング設定ファイル
CodeIgniter 4でルーティングを設定するには、特定のファイルにプログラムを書き込む必要があります。そのファイルは、プロジェクトフォルダの中の app/Config/Routes.php という場所にあります。
このファイルの中に、「もしこのURLにGETでアクセスが来たらこの処理を動かす」「もしPOSTでアクセスが来たらこちらを動かす」というルールを書いていきます。最初は難しく感じるかもしれませんが、書き方のパターンは決まっています。基本的には、$routes という変数(データを入れる箱)に対して、命令を追加していくだけで設定が完了します。
4. GET送信用のルーティングを書く方法
まずは、最も基本的なGET通信のルーティングを見てみましょう。例えば、「お問い合わせ画面」を表示するための設定です。ユーザーがURLを叩いて画面を表示するだけの場合は、必ずGETを使います。
// お問い合わせページを表示するためのGET設定
$routes->get('contact', 'ContactController::index');
このコードの意味を解説します。最初の 'contact' はURLの最後に来る名前です。そして 'ContactController::index' は、その時に動かすプログラム(クラスとメソッド)を指定しています。これで、ブラウザで /contact にアクセスしたときに、お問い合わせ用の画面が表示されるようになります。
5. POST送信用のルーティングを書く方法
次に、フォームから入力内容を送信した後の処理、つまりPOST通信のルーティングを書きましょう。お問い合わせ内容を「送信ボタン」で送ったときなどは、これを使います。
// お問い合わせ内容を受け取るためのPOST設定
$routes->post('contact/send', 'ContactController::send');
ここでは get ではなく post という命令を使っています。URLは 'contact/send' とし、送信専用のプログラムである send という部分を動かすように設定しました。このように、同じ「お問い合わせ」関連でも、表示はGET、送信はPOSTとはっきり分けることが重要です。
6. 実際に動くお問い合わせフォームの例(HTML)
ルーティングを設定したら、次にHTML側の「送信フォーム」を準備する必要があります。ここで大切なのは、HTMLの method という属性に、ルーティングで設定したのと同じ種類(GETかPOSTか)を書くことです。今回はPOSTで送る例を作成します。
<form action="/contact/send" method="post">
<label>お名前:</label>
<input type="text" name="username">
<button type="submit">送信する</button>
</form>
このコードでは、ボタンを押すと /contact/send というURLに向かって、POST形式でデータが飛んでいきます。サーバー側では、先ほど設定した $routes->post のルールが「あ、POSTで来たからあのプログラムを動かそう!」と反応してくれるわけです。
7. URLにパラメーターを含める便利なテクニック
時には、URLの一部を自由に変えたいことがあります。例えば「1番の記事」「2番の記事」のように、数字によって表示を変える場合です。これを「プレースホルダー」と呼びます。CodeIgniterでは (:num) や (:any) という特別な記号を使って設定します。
// 記事のID(数字)をURLで受け取るGET設定
$routes->get('blog/view/(:num)', 'BlogController::show/$1');
この (:num) という部分は、「ここには数字が入りますよ」という意味です。ユーザーが blog/view/123 にアクセスすると、プログラム側に 123 という数字が渡されます。これにより、一つのルーティング設定だけで、何千記事あっても対応できるようになります。非常に効率的ですね。
8. エラーを防ぐ!ルーティングの注意点
ルーティングを書くときに初心者がやってしまいがちな失敗が、「順番の間違い」です。プログラムは上から順番に読み込まれるため、あまりに広範囲をカバーする設定を上に書いてしまうと、その下にある具体的な設定が無視されてしまうことがあります。
また、GETで設定しているURLに対して、間違えてPOSTでアクセスしようとすると「405 Method Not Allowed」というエラーが出ます。これは「そのURLはGET専用だから、POSTで来られても困るよ!」というコンピューターからの警告です。エラーが出たときは、まず Routes.php の記述と、HTMLの送信方法が一致しているかを確認しましょう。
9. セキュリティとルーティングの関係
なぜGETとPOSTをわざわざ分ける必要があるのでしょうか?それはWebサイトの安全を守るためです。例えば、データの削除やユーザー情報の更新といった「重要な操作」をGETで許可してしまうと、URLを直接入力するだけで誰でも操作できてしまう危険があります。これを防ぐために、データの変更を伴う処理は必ずPOSTに限定し、必要であれば「CSRF(シーエスアールエフ)対策」という、偽造された送信を防ぐ仕組みを併用します。CodeIgniterにはこれらのセキュリティ機能が標準で備わっているため、ルーティングを正しく設定するだけで安全性がぐっと高まります。
10. ルーティングの一覧を確認する方法
最後に、自分が書いたルーティングが正しく登録されているか確認する方法を紹介します。パソコンの「コマンドプロンプト」や「ターミナル」を使って、プロジェクトのフォルダで以下の命令を入力してみましょう。
php spark routes
これを実行すると、現在有効なすべてのルート設定が一覧で表示されます。どのURLがどのコントローラーに繋がっているのか、そしてGETなのかPOSTなのかが一目で分かります。設定がうまくいかないときは、この一覧を見て「自分の書いたルールがちゃんと認識されているか」を確認するのが上達の近道です。