joi について
joi は、入力の検証とルールの組み立てに使う JavaScript のスキーマ検証スキルです。組み込み型、条件付きスキーマ、フィールド間参照、独自拡張、エラー処理を扱います。
主な機能
- 01validate() と attempt() によるスキーマ検証
- 02オブジェクト・配列・alternatives の合成
- 03.when() による条件ルール
- 04Joi.ref() によるフィールド間参照
- 05Joi.extend() による独自型の作成
- 06検証エラーメッセージのカスタマイズ
活用シーン
- 01アプリケーション境界でのデータ検証
- 02別フィールドの値に応じたフィールド検査
- 03確認用フィールドと元の値の照合
- 04ドメイン固有の検証型の追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ damusix/ skills --skill joiインストール後、Claude Code で/joiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.tessl-plugin/plugin.jsonreference/any.mdconditionals.mderrors.mdextensions.mdmetadata.mdreferences.mdtesting.mdtypes.mdvalidation.md詳細
Joi
クイックスタート
const Joi = require('joi');
const schema = Joi.object({
name: Joi.string().min(1).max(100).required(),
age: Joi.number().integer().min(0),
email: Joi.string().email()
});
const { error, value } = schema.validate(input);
重要なルール
- スキーマは不変です - すべてのメソッドは新しいスキーマインスタンスを返します。変更しないでください
- 境界で検証する - 入力境界では
validate()またはattempt()を使用してください。検証を参照してください - 型は基本型を拡張します - すべての型は
any()を継承します。型の概要を参照してください - フィールド間の参照には Refs を使う - フィールド間で動的な値を扱うには
Joi.ref()を使用してください。参照を参照してください - カスタム型は拡張して作成する - カスタム型の作成には
Joi.extend()を使用してください。拡張を参照してください
ワークフロー
- 型を選択する - 組み込み型はすべて型の概要を参照してください
- 制約を追加する -
.min()、.max()、.pattern()、.valid()などのルールを連結します - スキーマを組み合わせる -
Joi.object()、Joi.array()、Joi.alternatives()をネストします - 条件分岐を追加する - 動的なスキーマには
.when()を使用してください。条件分岐を参照してください - エラーをカスタマイズする -
.messages()または.error()でメッセージを上書きします。エラーを参照してください
よくあるパターン
.when() による条件付き検証
const schema = Joi.object({
type: Joi.string().valid('email', 'sms').required(),
address: Joi.when('type', {
is: 'email',
then: Joi.string().email().required(),
otherwise: Joi.string().pattern(/^\+?[1-9]\d{1,14}$/).required()
})
});
Joi.ref() によるフィールド間参照
const schema = Joi.object({
password: Joi.string().min(8).required(),
confirmPassword: Joi.string().valid(Joi.ref('password')).required()
.messages({ 'any.only': 'passwords must match' }),
startDate: Joi.date().required(),
endDate: Joi.date().greater(Joi.ref('startDate')).required()
});
主なパターン
| トピック | リファレンス |
|---|---|
| すべての組み込み型 | 型 |
| 検証とオプション | 検証 |
| 参照とテンプレート | 参照 |
| 条件付きスキーマ | 条件分岐 |
| エラー処理 | エラー |
| カスタム拡張 | 拡張 |
| メタデータとイントロスペクション | メタデータ |
| 共通メソッド(any) | any |
| テストパターン | テスト |
コメント
Markdown 対応