カテゴリ: TypeScript 更新日: 2026/08/03

TypeScriptでバリデーションルールを動的に組み立てる方法!初心者向けデータ検証完全ガイド

TypeScriptでバリデーションルールを動的に組み立てる方法
TypeScriptでバリデーションルールを動的に組み立てる方法

先生と生徒の会話形式で理解しよう

生徒

「TypeScriptで、画面の入力フォームによってチェックするルールを自動で切り替える方法ってありますか?」

先生

「データバリデーションですね。TypeScriptを使えば、状況に合わせて検証ルールを動的に組み立てることができますよ。」

生徒

「動的に組み立てるって、なんだか難しそうですね。パソコン初心者でも分かりますか?」

先生

「大丈夫です。基礎から順番に、簡単な仕組みを作っていきましょう。それでは具体的な使い方を見ていきましょう!」

1. データバリデーションとは?

1. データバリデーションとは?
1. データバリデーションとは?

データバリデーションとは、入力されたデータが正しい形式かどうかをチェックする仕組みのことです。身近な例でいうと、インターネットのウェブサイトで会員登録をするときに、メールアドレスの欄に文字が入っていなかったり、パスワードが短すぎたりしたときに画面に赤い文字で注意が出ることがあります。あの仕組みがデータバリデーションです。日本語ではデータ検証入力チェックとも呼ばれます。この検証を行うことで、プログラムが予期せぬ動きをして壊れてしまうのを防ぎ、安全にシステムを動かすことができるようになります。

2. 動的に組み立てるとはどういう意味?

2. 動的に組み立てるとはどういう意味?
2. 動的に組み立てるとはどういう意味?

動的に組み立てるとは、プログラムが動いている最中に、その場の状況に合わせて処理の内容を変化させるという意味です。反対の言葉は静的といいます。静的なチェックは、いつでも一律で同じルールを適用します。しかし、実際のシステムでは、ユーザーの種類や選択した項目によってチェックのルールを変えたい場面が多くあります。たとえば、アンケート画面で職業を会社員と選んだときだけ会社名を入力必須にする、というような処理です。このように、その時々の条件に応じてチェックするルールを自動で合体させたり切り替えたりすることを、動的に組み立てると表現します。

3. バリデーションルールの基本構造

3. バリデーションルールの基本構造
3. バリデーションルールの基本構造

まずは、チェックを行うための基本的なルールをプログラムで表現してみましょう。今回は最も単純な方法として、チェックを行う関数を組み合わせていく方法を使います。関数とは、何かデータを入れると、あらかじめ決められた計算や処理を行って結果を返してくれる仕組みのことです。文字が空っぽではないかを確認するルールと、文字の長さが足りているかを確認するルールを別々に作っておき、それらを必要に応じて組み合わせる土台を作ります。

4. 必須入力チェックの関数を作ってみよう

4. 必須入力チェックの関数を作ってみよう
4. 必須入力チェックの関数を作ってみよう

最初の実践として、文字がしっかりと入力されているかを確かめる必須入力のチェック機能を作ります。プログラミングの世界では、何も文字が入っていない状態のことを空文字と呼びます。データが空文字の場合はエラーメッセージを返し、文字が入っていれば問題なしとするプログラムを書きます。まずはこの単体のルールをしっかりと理解しましょう。


function checkRequired(value: string): string {
    if (value === "") {
        return "この項目は入力が必須です。";
    }
    return "";
}

let result1 = checkRequired("");
console.log(result1);

上記のプログラムを実行すると、以下の出力結果になります。何も入力されていないため、エラーメッセージが表示されます。


この項目は入力が必須です。

5. 文字数チェックの関数を作ってみよう

5. 文字数チェックの関数を作ってみよう
5. 文字数チェックの関数を作ってみよう

次に、入力された文字の長さを確認するルールを作ります。例えば、パスワードを設定するときに短すぎる文字列を禁止したい場合に使います。文字の長さを数えるには、文字列が持っている特別な仕組みを使用します。今回は、指定された長さより短い場合にエラーを出す仕組みにします。これにより、必須チェックとは別の独立したルールが誕生します。


function checkMinLength(value: string, min: number): string {
    if (value.length < min) {
        return min + "文字以上で入力してください。";
    }
    return "";
}

let result2 = checkMinLength("abc", 5);
console.log(result2);

上記のプログラムを実行すると、以下の出力結果になります。3文字しか入力されていないため、5文字以上必要であるというエラーが出ます。


5文字以上で入力してください。

6. 複数のルールを配列で管理する

6. 複数のルールを配列で管理する
6. 複数のルールを配列で管理する

ここからがいよいよ動的な組み立ての本番です。別々に作ったチェックのルールを、配列という仕組みを使って一つにまとめます。配列とは、複数のデータを順番に並べて保管できる、仕切りのついた箱のようなものです。この箱の中に、その時々に必要なルールを自由に出し入れすることで、チェックの内容を動的に変更できるようになります。箱に入れたルールを順番に実行していき、エラーが見つかった時点でそのメッセージを画面に表示します。


type CheckRule = (v: string) => string;

let activeRules: CheckRule[] = [];

activeRules.push((v) => checkRequired(v));
activeRules.push((v) => checkMinLength(v, 8));

let inputData = "pass";
let errorMessage = "";

for (let rule of activeRules) {
    let result = rule(inputData);
    if (result !== "") {
        errorMessage = result;
        break;
    }
}

console.log(errorMessage);

上記のプログラムを実行すると、以下の出力結果になります。必須チェックは合格しますが、次の8文字以上のチェックで引っかかるため、文字数に関するエラーメッセージが表示されます。


8文字以上で入力してください。

7. 条件に応じてルールを動的に切り替える実践

7. 条件に応じてルールを動的に切り替える実践
7. 条件に応じてルールを動的に切り替える実践

最後に、実際のウェブサイトの仕組みを想定して、ユーザーの選択によってチェックするルールが自動的に増える仕組みを完成させましょう。例として、メルマガ配信を希望するにチェックを入れた人だけに、メールアドレスの形式チェックを追加するプログラムを作成します。希望しない人の場合は、無駄なチェックを行わないように動的にルールを制御します。


function checkEmailFormat(value: string): string {
    if (value.indexOf("@") === -1) {
        return "正しいメールアドレスの形式ではありません。";
    }
    return "";
}

let rules: ((v: string) => string)[] = [];
rules.push((v) => checkRequired(v));

let wantsNewsletter = true;

if (wantsNewsletter === true) {
    rules.push((v) => checkEmailFormat(v));
}

let emailInput = "sample-at-mark";
let finalError = "";

for (let currentRule of rules) {
    let checkResult = currentRule(emailInput);
    if (checkResult !== "") {
        finalError = checkResult;
        break;
    }
}

console.log(finalError);

上記のプログラムを実行すると、以下の出力結果になります。メルマガを希望しているためメールアドレスの形式チェックが動的に追加され、マークが含まれていないというエラーが正しく検出されます。


正しいメールアドレスの形式ではありません。
関連記事:
カテゴリの一覧へ
新着記事
New1
JavaScript
JavaScriptでURLを正規化(canonical)する方法を徹底解説!初心者向けにわかりやすく解説
New2
TypeScript
TypeScriptの型まとめ!安全で保守性の高いコードを書く方法
New3
TypeScript
TypeScriptのプロジェクトをtscでビルドする基本操作を解説!初心者にもわかるステップバイステップ
New4
Claude Code
Claude Codeの基本的な使い方!起動から終了まで初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptの文字列を分割する方法(splitメソッド)
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptで要素の表示・非表示を切り替える方法(display・visibility)を完全解説
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptでフォームの値を取得する方法を徹底解説!valueプロパティの使い道
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptのライブラリとは?標準ライブラリと外部ライブラリの違いと使い方
No.7
Java&Spring記事人気No7
TypeScript
TypeScriptでクライアントとサーバーのバリデーションを共通化する方法!初心者向けデータ検証入門
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptでHello Worldを表示するには?最初の1行を実行してみよう