Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

スキップ処理

path-binder は不正なデータに遭遇してもエラーをスローしません。代わりに、処理できなかったエントリを skipped 配列に収集して返します。これにより、1行の不正データがバッチ全体を停止させることを防ぎます。

スキップされたエントリの確認

import { generate } from 'path-binder'

const { result, skipped } = generate(input, { schema })

skipped.forEach((entry) => {
  console.log(entry.name)    // シート名
  console.log(entry.index)   // 行インデックス
  console.log(entry.path)    // 問題のあったパス文字列
  console.log(entry.value)   // そのセルの値(文字列化)
  console.log(entry.reason)  // スキップ理由コード
})

skipScope オプション

スキップの粒度を制御します。

skipScope動作推奨シーン
'cell'(デフォルト)無効なセルだけスキップし、同じ行の他のセルは処理するユーザー入力データ(多少の欠損は許容)
'row'行内のいずれかのセルが無効なら、行全体をスキップ厳密なデータ変換(不完全なエンティティを防止)
// セルレベル: 無効なセルのみスキップ
const cellResult = generate(input, { skipScope: 'cell' })

// 行レベル: 1つでも無効なセルがあれば行全体をスキップ
const rowResult = generate(input, { skipScope: 'row' })

よくあるスキップと対処法

empty — パスセグメントが空

発生する入力: "user..name"(ドットが2つ)、"user."(末尾ドット)

対処: パス行を確認し、余分なドットを削除してください。

reference_not_found — 参照先が見つからない

発生する入力: Sheet2 で user.$id = 3 と書いたが、Sheet1 に id = 3 のユーザーがいない

対処: 参照先のシートにマッチするプライマリデータが存在するか確認してください。

cast — キャスト関数が例外をスロー

発生する入力: asNumber() を指定したフィールドに "abc" が入力された

対処: 入力データの内容を確認するか、asCustom() でエラーハンドリングを追加してください。


スキップ理由 一覧

パス構文エラー

コード説明発生する入力例
emptyパスセグメントが空"user..name"
bracket閉じ括弧 ] がない"items[0"
index配列インデックスが数値でない"items[abc]"
unnamed[] の前にプロパティ名がない"[]"
escape$$ の後に名前がない"config.$$"
key$ の後に名前がない"user.$"

参照キー関連エラー

コード説明発生する入力例
reference_not_found一致するプライマリ行がない$id=3 だがプライマリに id=3 がない
no_primary_data全行が参照行でプライマリがないすべてのパスに $ が付いている
conflicting_key_prop同行に $key と非 $key の同名プロパティuser.$iduser.id が同じ行にある
nested_key配列パス内に $key があるinfo[].$type
invalid_key_valueキー値がプリミティブでない$id の値がオブジェクト
mixed_key_root同行の $key が異なるルートパスに属するuser.$idorder.$id が同行

データ競合・キャストエラー

コード説明発生する入力例
property_conflict参照データがプライマリと競合両方が同じプロパティに異なる値を持つ
castキャスト関数が例外をスローasNumber()"abc"

スキップログの活用パターン

本番環境でスキップを監視する例です。

const { result, skipped } = generate(input, { schema })

// スキップが発生した場合のログ出力
if (skipped.length > 0) {
  console.warn(`${skipped.length} 件のエントリがスキップされました`)
  skipped.forEach((s) => {
    console.warn(`  シート: ${s.name}, 行: ${s.index + 1}, パス: ${s.path}, 理由: ${s.reason}`)
  })
}

// ユーザーへのフィードバック用レポート生成
const errorReport = skipped.map((s) =>
  `行 ${s.index + 1}: "${s.path}" — ${s.reason}`
)

次のステップ: API リファレンスで全ての型とオプションを確認する