Skip to content
閲覧中:
バリデーション

バリデーション

バリデーション(Validation)**とは、一言で言うと「入力されたデータが、決められたルールに沿って正しく構成されているかを確認する作業」**のことです。日本語では「入力チェック」や「妥当性確認」と呼ばれます。

ITの世界では、ユーザーがどんな値を入力してくるか分かりません。そのため、システムが壊れたり不正なデータが保存されたりしないよう、入り口で厳重にチェックを行う必要があります。


1. なぜバリデーションが必要なのか?

バリデーションを怠ると、以下のような問題が発生します。

  • システムのクラッシュ: 数字を期待している場所に「文字」が入ると、計算ができずエラーで止まる。
  • データの不整合: 「2024年2月30日」のような存在しない日付が登録されてしまう。
  • セキュリティリスク: 悪意のあるプログラムコードを入力され、データベースを操作される(SQLインジェクションなど)。

2. バリデーションの3つのレベル

実務では、以下の3段階でチェックをかけることが一般的です。

レベル 場所 役割
フロントエンド ブラウザ上 (JS) ユーザーへの親切心。 送信ボタンを押す前に「未入力ですよ」と教える。
バックエンド サーバー (Python等) 最後の砦。 悪意のある攻撃や、ブラウザを介さない不正な送信を阻止する。
データベース DB (SQL) データの整合性。 重複したIDや、定義外のデータ型を拒否する。

3. 具体的なチェック項目の例

5,000行程度のシステム開発でも、以下のようなバリデーションコードが数百行から千行ほどを占めることになります。

  • 必須チェック: 名前やメールアドレスが空欄ではないか。
  • 型チェック: 年齢の欄に「漢字」が入っていないか。
  • 範囲チェック: 注文個数が「-1」などのマイナスになっていないか。
  • 形式チェック: メールアドレスに「@」が含まれているか。
  • 相関チェック: 「貸出開始日」が「返却予定日」より後の日付になっていないか。

4. Pythonでの実装イメージ(スタブ)

前述のディレクトリ構成にあった services/loan_logic.py などで、以下のように記述されます。

Python
def validate_loan_period(start_date, end_date):
    # 1. 型のチェック
    if not isinstance(start_date, date):
        raise ValueError("開始日が日付形式ではありません")

    # 2. 論理的なチェック
    if start_date > end_date:
        raise ValueError("開始日は終了日より前である必要があります")

    # 3. 業務ルールのチェック
    if (end_date - start_date).days > 30:
        raise ValueError("30日を超える長期貸出はできません")

次のステップへの提案

バリデーションには、**「間違っていたときにユーザーにどう伝えるか(エラーメッセージ)」**のデザインも重要です。

もしよろしければ、**「実際にPythonでよく使われるバリデーション用ライブラリ(Pydanticなど)」**の使い方を紹介しましょうか? それとも、**セキュリティ対策としてのバリデーション**について詳しく知りたいですか?