mcpField
J
joi

joi

github.com/damusix開発6235 回インストール1 週間前に更新
リポジトリ

joi について

joi は、入力の検証とルールの組み立てに使う JavaScript のスキーマ検証スキルです。組み込み型、条件付きスキーマ、フィールド間参照、独自拡張、エラー処理を扱います。

主な機能

  1. 01validate() と attempt() によるスキーマ検証
  2. 02オブジェクト・配列・alternatives の合成
  3. 03.when() による条件ルール
  4. 04Joi.ref() によるフィールド間参照
  5. 05Joi.extend() による独自型の作成
  6. 06検証エラーメッセージのカスタマイズ

活用シーン

  1. 01アプリケーション境界でのデータ検証
  2. 02別フィールドの値に応じたフィールド検査
  3. 03確認用フィールドと元の値の照合
  4. 04ドメイン固有の検証型の追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/damusix/skills --skill joi

インストール後、Claude Code で/joiを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.tessl-plugin/
plugin.json
reference/
any.md
conditionals.md
errors.md
extensions.md
metadata.md
references.md
testing.md
types.md
validation.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);

重要なルール

  1. スキーマは不変です - すべてのメソッドは新しいスキーマインスタンスを返します。変更しないでください
  2. 境界で検証する - 入力境界では validate() または attempt() を使用してください。検証を参照してください
  3. 型は基本型を拡張します - すべての型は any() を継承します。型の概要を参照してください
  4. フィールド間の参照には Refs を使う - フィールド間で動的な値を扱うには Joi.ref() を使用してください。参照を参照してください
  5. カスタム型は拡張して作成する - カスタム型の作成には Joi.extend() を使用してください。拡張を参照してください

ワークフロー

  1. 型を選択する - 組み込み型はすべて型の概要を参照してください
  2. 制約を追加する - .min()、.max()、.pattern()、.valid() などのルールを連結します
  3. スキーマを組み合わせる - Joi.object()、Joi.array()、Joi.alternatives() をネストします
  4. 条件分岐を追加する - 動的なスキーマには .when() を使用してください。条件分岐を参照してください
  5. エラーをカスタマイズする - .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
テストパターンテスト

コメント