CodeIgniterバリデーション完全攻略!複数項目をチェックする方法を初心者向けに解説
生徒
「お問い合わせフォームを作っているのですが、名前やメールアドレスなど、たくさんの項目を一度に正しく入力されているか確認する方法はありますか?」
先生
「CodeIgniter(コードイグナイター)には、バリデーションという便利な機能があります。これを使えば、複数の入力内容を一気にチェックできますよ。」
生徒
「難しそうですが、初心者でもできますか?」
先生
「大丈夫です!ルールを決めてあげるだけで、プログラムが自動で『空っぽじゃないか』『メールの形式になっているか』を判断してくれます。一緒に見ていきましょう!」
1. バリデーションとは?身近な例で解説
プログラミングの世界でよく聞くバリデーション(Validation)とは、一言でいうと「入力内容が正しいかどうかを確認する作業」のことです。例えば、あなたが市役所で書類を提出する場面を想像してみてください。窓口の担当者は、「名前は書いてありますか?」「住所に漏れはありませんか?」とチェックしますよね。もし書き忘れがあれば、「ここを書いてください」と教えてくれます。この「窓口でのチェック」が、ウェブサイトにおけるバリデーションの役割です。
ウェブサイトのフォーム(お問い合わせや会員登録など)では、ユーザーがわざと、あるいはうっかり間違った情報を送ってくることがあります。例えば、メールアドレスの欄に電話番号を書いてしまったり、必須項目を空欄のまま送信ボタンを押してしまったりすることです。これらをそのまま受け取ってしまうと、システムが故障したり、後で連絡が取れなくなったりして困ります。そこで、CodeIgniterという便利な道具(フレームワーク)を使って、スマートにチェックを行いましょう。
2. なぜ複数の項目にバリデーションが必要なのか
実際のウェブサイトにある入力フォームは、項目が一つだけということはまずありません。「お名前」「フリガナ」「メールアドレス」「電話番号」「お問い合わせ内容」など、複数の項目がセットになっているのが普通です。これらを一つひとつバラバラにチェックするのは、プログラムを作る人にとって非常に手間がかかります。
そこでCodeIgniterでは、複数のバリデーションルールをまとめて設定できる仕組みが用意されています。これにより、「お名前は必須」「メールアドレスは正しい形式で」「パスワードは8文字以上」といった複数の条件を、一つの命令でまとめて実行できるようになります。これにより、コードがスッキリして読みやすくなり、ミスも減らすことができます。初心者の方は、まずこの「まとめてチェックする感覚」を身につけることが大切です。
3. 基本的な複数項目バリデーションの書き方
それでは、実際にCodeIgniterでどのように複数の項目をチェックするのか、具体的なプログラムの書き方を見てみましょう。ここでは、名前(username)とメールアドレス(email)の2つを同時にチェックする例を紹介します。
CodeIgniterでは、setRules(セット・ルールズ)という命令を使って、「どの項目に、どんなルールを適用するか」を指定します。まずは、一番シンプルなコードの形を確認してみましょう。
$validation = \Config\Services::validation();
// 複数の項目に対してルールを設定します
$validation->setRules([
'username' => 'required|min_length[3]',
'email' => 'required|valid_email'
]);
if ($validation->withRequest($this->request)->run()) {
echo 'すべてのチェックに合格しました!';
} else {
echo '入力内容にエラーがあります。';
}
このコードの中で出てくるrequiredは「必須入力」、min_length[3]は「3文字以上」、valid_emailは「メールアドレスの形式か」という意味です。縦の棒 | (パイプライン)を使うことで、一つの項目に複数のルールを重ねがけすることもできます。これをバリデーションルールと呼び、これを覚えるだけで高度なチェックができるようになります。
4. ユーザーに分かりやすいエラーメッセージを出す方法
ただ「エラーがあります」と言うだけでは、使っている人はどこを直せばいいのか分かりません。親切なサイトを作るためには、「名前を入力してください」といった具体的なメッセージを出す必要があります。CodeIgniterでは、項目ごとにオリジナルのメッセージを設定することが可能です。
初心者の方は、まず日本語のメッセージを表示させる方法から学びましょう。プログラムが勝手に英語で喋ってしまうのを、私たちが普段使う言葉に翻訳してあげるイメージです。以下のコードは、エラーの内容を個別に指定する書き方です。
$rules = [
'nickname' => [
'label' => 'ニックネーム',
'rules' => 'required',
'errors' => [
'required' => '{field}は必ず入力してね!'
]
],
'age' => [
'label' => '年齢',
'rules' => 'numeric',
'errors' => [
'numeric' => '{field}は数字だけで入力してね!'
]
]
];
$this->validate($rules);
このように書くと、{field}の部分に「ニックネーム」や「年齢」といったラベル名が自動で入ります。これをプレースホルダーと呼びます。専門用語ですが、要するに「後で中身が入れ替わる箱」のようなものだと思ってください。これにより、一つひとつのメッセージを細かく手書きしなくても、統一感のある案内ができるようになります。
5. 入力フォーム(HTML)との連携を理解しよう
プログラム側でバリデーションを作ったら、それを実際の画面(HTML)に反映させなければなりません。ユーザーが送信ボタンを押したとき、もし間違いがあれば入力した内容を消さずに残しておいてあげると、とても親切です。これを「値の保持」と呼びます。
CodeIgniterには、入力された値をそのまま表示するためのset_valueや、エラーを表示するためのlist_errorsといった便利な道具が備わっています。HTMLの中に少しだけPHPのコードを混ぜることで、魔法のようにエラーメッセージが表示されるようになります。
<form action="/submit" method="post">
<!-- エラーがあればまとめて表示する魔法のコード -->
<div class="error-list">
<?= validation_list_errors() ?>
</div>
<label>お名前</label>
<input type="text" name="username" value="<?= set_value('username') ?>">
<label>メールアドレス</label>
<input type="text" name="email" value="<?= set_value('email') ?>">
<button type="submit">送信する</button>
</form>
ここで使っているvalidation_list_errors()は、発生したすべてのエラーを箇条書きにしてくれる機能です。また、set_value('username')は、エラーで画面が戻ってきたときに、さっきまで入力していた名前を消さずに箱の中に残しておく役割をします。パソコン操作に慣れていない人にとって、一度書いたものが消えてしまうのはとてもストレスなので、この設定は非常に重要です。
6. よく使うバリデーションルール一覧
複数の項目を扱う際に、よく組み合わされるルールをいくつか紹介します。これらを組み合わせることで、どんなに複雑なフォームでも怖くありません。初心者のうちは、よく使うものをメモしておくと良いでしょう。
| ルール名 | 意味 | 使いどころ |
|---|---|---|
| required | 必須項目 | 名前や住所など絶対必要なもの |
| min_length[n] | n文字以上 | パスワードの安全性を高める時 |
| max_length[n] | n文字以内 | ひとことコメントなど制限がある時 |
| exact_length[n] | ちょうどn文字 | 郵便番号や電話番号など |
| valid_email | 正しいメアド形式 | メール送信が必要な機能 |
| matches[項目名] | 他と同じか | パスワード確認用の再入力 |
例えば、会員登録などで「パスワード」と「パスワード(確認用)」の2つを入力してもらうことがありますよね。その時はmatches[password]というルールを使うことで、2つの箱の中身が一致しているかを一瞬で判定できます。わざわざ自分で一つずつ文字を比較するプログラムを書かなくても、CodeIgniterが裏側でやってくれるのです。
7. 実践!お問い合わせフォームのバリデーション例
最後に、これまで学んだことを全部使って、より実践的な「お問い合わせフォーム」のバリデーションを組み立ててみましょう。名前、メール、件名、メッセージの4つをチェックします。このように項目が増えても、書き方のパターンはいつも同じです。
public function create()
{
// 1. ルールの定義(設計図を作る)
$rules = [
'user_name' => 'required|min_length[2]',
'user_mail' => 'required|valid_email',
'subject' => 'required|max_length[50]',
'message' => 'required|min_length[10]'
];
// 2. チェックの実行
if (!$this->validate($rules)) {
// 3. 失敗した場合:入力画面に戻す
return view('contact_form', [
'validation' => $this->validator
]);
}
// 4. 成功した場合:完了画面を表示する
return view('success_page');
}
プログラムの流れを整理すると、「①ルールを決める」→「②チェックする」→「③ダメなら戻す、OKなら進む」という3つのステップになります。この流れは、プログラミングの世界ではアルゴリズムと呼ばれる手順の基本です。最初は難しく感じるかもしれませんが、このテンプレートをコピーして、項目名(user_nameなど)を書き換えるところから始めてみてください。パソコンの操作に自信がない方でも、文字を打ち替える作業を繰り返すうちに、自然とルールが身についていきます。
CodeIgniterのバリデーションは、初心者にとっての強力な味方です。これを使いこなせるようになると、ユーザーにとって使いやすく、安全なウェブサイトを作ることができるようになります。まずは、2つの項目から練習を始めて、徐々に項目を増やしていきましょう!