Skip to content

ExcelテストデータのYAML代替スキーマ設計#75

Draft
kiyotis wants to merge 156 commits into
mainfrom
convert-testdata-excel-to-text
Draft

ExcelテストデータのYAML代替スキーマ設計#75
kiyotis wants to merge 156 commits into
mainfrom
convert-testdata-excel-to-text

Conversation

@kiyotis
Copy link
Copy Markdown

@kiyotis kiyotis commented May 15, 2026

概要

NTFのテストデータをExcelからテキストベース(YAML)に移行するための設計ドキュメントを追加します。

追加ファイル

ファイル 内容
docs/ntf-testdata-structure.md NTFテストデータ構造の調査報告(コード・Javadoc根拠付き)
docs/ntf-testdata-yaml-schema.json YAML表現のJSON Schema定義
docs/ntf-testdata-yaml-examples.yaml 全データ種別のYAML記述例
docs/ntf-testdata-yaml-design.md Excel↔YAML対応表・設計上のトレードオフ

調査範囲

  • DataType(13種別すべて)
  • TestDataParsingTemplate / GroupDataParsingTemplate / SingleDataParsingTemplate
  • TableDataParserListMapParserFixedLengthFileParserVariableLengthFileParserMessageParser
  • NullInterpreterQuotationTrimmerDateTimeInterpreter 等の変換ルール

主な設計判断

  • テーブルデータはオブジェクト形式({COL: val})を採用し、AI・人間どちらにも読みやすくした
  • SETUP_FIXED / SETUP_VARIABLEsetup_files に統合(BasicTestDataParser#getSetupFile() の実装に合わせた)
  • マーカーカラムは [COLNAME] 形式のキーをそのまま使用

🤖 Generated with Claude Code

kiyotis and others added 30 commits May 15, 2026 15:32
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- P0: directives に固定長専用7キー・可変長専用6キーを追加
- P0: マーカーカラムの YAML 構文バグを修正("[COL]" とクォート必須)
- P1: null 表現を YAMLネイティブ null に統一・明記
- P2: message_data / group_message_data の records を required に追加
- P2: field_def.type を enum で制約、oneOf → anyOf に変更
- P2: group_message_data.id の description を改善(GroupData のフィルタ動作を明記)
- P3: design.md に変換ビフォーアフター例・段階的移行戦略・AI向けプロンプト補助情報を追加
- P3: examples.yaml に特殊値インライン例・NGアンチパターン例・record-separator 仕様コメントを追加
- docs/tasks.md を新規作成(作業中断・再開用タスクリスト)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- field_def.type を enum から pattern 制約に変更(カスタム型拡張対応)
- record_fragment.rows に minItems: 1 を追加
- group_message_data.group_id を required に追加
- record-separator description にシンボル形式(CRLF/LF/CR/NONE)を追記
- file-type description に「通常は記述不要」を追記
- examples.yaml: 固定長ファイル rows のパディング除去(自動付与される仕様)
- examples.yaml: 冒頭コメントにメッセージ系・expected_complete_tables を追記
- examples.yaml: quoting-delimiter を読みやすいシングルクォート形式に変更
- design.md: 変換ビフォーアフターにグループIDなし例を追加
- design.md: ExcelとYAMLの並存説明・数値セル注意・複数シート方針を追加
- design.md: AI向けプロンプト補助情報を大幅拡充
- tasks.md: 進捗を更新

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- design.md: 固定長ビフォーアフター例のパディングを除去(examples.yamlとの矛盾解消)
- design.md: 「ExcelとYAMLの並存」重複セクションを統合
- examples.yaml: 残存パディングを全て除去
- schema.json: field_def.type pattern を ^[A-Z][A-Z0-9_]*$ に緩和(TEST_プレフィクス型対応)
- schema.json: record_fragment.rows の minItems:1 を削除(空ファイル検証ユースケース対応)
- design.md §AI向け: expected_complete_tables 使い分け・quoting-delimiter 記述例を追記

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…amples uncommented

- schema.json: group_message_data の required から group_id を削除(MockMessagingContext/Client 経路では不要)
- schema.json: group_message_data の description に2つのアクセスパス(A: RequestTestingSendSyncSupport, B: MockMessagingContext/Client)を詳述
- schema.json: table_data.rows の description に rows:[] 全件削除セマンティクスを追記
- design.md: §9 を「2つのアクセスパス」として書き直し、経路A/Bの違いを表形式で明記
- examples.yaml: 特殊値インライン例をコメントアウトから有効な YAML に昇格(setup_tables の1エントリとして配置)
- examples.yaml: NG コメントの USER_ID: 001 説明に YAML 1.1/1.2 バージョン依存性を明記

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…cterGenerator tokens

- examples.yaml: expected_request_header_messages の例を追加(13 DataType 全網羅)
- examples.yaml: BasicJapaneseCharacterInterpreter の 14 文字種トークン一覧を追加
- examples.yaml: SendSyncMessageParser の errorMode(timeout/msgException)を説明・例示
- examples.yaml: "null" クォート付き NG 例の注記を特殊値一覧に追加
- design.md: §5 に field_def.type と BasicDataTypeMapping の関係(identity mapping 要件)を追記
- design.md: §11 に MessageParser が record_type を "default" に置換する仕様を記録
- design.md: null テーブルに "null"(クォート付き)NG 例の行を追加
- design.md: AI向けプロンプト補助情報に 14 文字種トークン、record_type 注意、errorMode を追記
- design.md: 変換ツール方針の setCellType(STRING) を DataFormatter API に訂正(POI 4.x 以降)
- design.md: dataName/resourceName のシート概念消滅に関する注意事項を追記
- schema.json: table_data / file_data / group_message_data の group_id に minLength: 1 を追加
- ntf-testdata-structure.md §3.3: FixedLengthDirective を 4 キーから 11 キー(共通3+固定長専用8)に拡充

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
「このリポジトリだけ見ればよい」という前提自体を検証するタスクを P4-1 の前置として追加。
pom.xml の外部依存(nablarch-core-dataformat 等)を含めた仕様範囲の確定が根拠の出発点となる。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 「現在の状態」セクションを追加(2026-05-15時点、P4-0 が次のタスク)
- P4 着手前の注意(P4-1/P4-2 の試行結果は未コミット、出力ファイル未作成)を明記
- 成果物ファイル一覧に ntf-coverage-*.md を「未作成」で追加
- 再開手順を P4-0 スタートに合わせて更新

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- P4-0: pom.xml と依存関係を調査し「このリポジトリだけでは仕様を完全に把握できない」を確認
  - nablarch-core-dataformat がフォーマッタ本体を担うことを明文化
  - このリポジトリ内で完結する仕様範囲と外部依存仕様の範囲を整理
- P4-1: src/main/java の全クラスを「直接影響/参照情報/対象外」に分類
  - 直接影響クラス29クラスを特定(reader/file/messaging/db/interpreter/generator)
  - 対象外パッケージ12件の除外理由を明記

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ntf-coverage-spec-mapping.md(新規):
  P4-2 の成果物。29クラスから抜き出した仕様と schema.json / design.md /
  examples.yaml の対応関係・反映状況をすべてマッピング

schema.json:
  - directives.record-length: 自動計算のため通常は記述不要を明記
  - directives.field-separator: "\\t"→タブ変換・1文字制約を追記
  - record_fragment.fields: フィールド名重複不可の制約を追記
  - field_def.length: "-" 指定時に改行・前後空白が除去される副作用を追記
  - table_data.rows: 省略カラムには DefaultValues でデフォルト補完される旨を追記

design.md:
  - §7: NullInterpreter 大文字小文字無視・QuotationTrimmer 全角対応・日付型短縮形/JDBC形式を追記
  - §4: BasicDefaultValues のデフォルト値一覧を表形式で追加
  - §11: Excel の FWヘッダ2列形式→YAML fields 統合・response 系 FWヘッダ非分離を追記
  - §12〜22: TestDataParsingTemplate 行処理・デフォルトディレクティブ DI・DataTypeMapping 優先順・
    TEST_ 昇格・TestDataConverter 拡張点・SendSyncSupport 配置規則・assertAsMapFileType・
    フォーマット定義命名規則・BinaryFileInterpreter パス基準・DateTimeInterpreter 完全一致・
    CompositeInterpreter DI 設定の新規セクション11件を追加
  - AI向けプロンプト: BasicJapaneseCharacterInterpreter「素通り」→「IllegalArgumentException」修正
    半角記号除外文字・field-separator \\t 用法を追記

examples.yaml:
  - コメント行・行内コメント・空行スキップの仕様説明を冒頭に追記
  - record-length コメント(通常は不要)を追記
  - 文字種トークン表: 半角記号の除外文字・「素通り」→「IllegalArgumentException」修正
  - タブ区切りファイル例・バイナリ型(type:B)例・JDBC日付形式例・通常データ行例を追加(コメント)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3リポジトリ(batch/web/rest-ntf-yaml)を調査し ntf-yaml-impl-evaluation.md を新規作成。

主な知見:
- 実装例はフラット変換方式(Excel 行構造をそのまま YAML キーに)、
  現行スキーマは構造化方式(setup_tables / records / fields)で設計思想が根本的に異なる
- 現行スキーマの優位点: JSON Schema 型安全性・AI 可読性・null 表現の明確さ・設計文書整備
- 実装例の優位点: パーサ実装が簡単(~150行)・Excel→YAML 機械変換が容易・1ファイル複数シート対応
- 現行スキーマへのフィードバック: 複数シート格納方針が未定義(要検討)、
  "?" プレフィックス記法(ワイルドカード)が未調査(P4-3 で確認推奨)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
E-1: 複数シート格納方針の決定(現行スキーマに未定義)
E-2: "?" プレフィックス記法の仕様確認(batch リポジトリで確認した記法)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 現在の状態: ローカル・リモートともにクリーンに更新
- 未完了タスクの着手順を明記(P4-3 → E-2 → E-1 → P4-4)
- 成果物ファイル一覧: ntf-coverage-class-list.md / spec-mapping.md / impl-evaluation.md を完成として追記
- 再開手順: P4-3 の具体的な進め方を追記

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ntf-coverage-spec-mapping.md: §8 P4-3 テストコード調査セクションを追加(13クラス分の知見)
  - E-2 調査結果: "?" プレフィックス記法は nablarch-testing に存在しないと確認。反映不要として完了
- ntf-testdata-yaml-design.md:
  - BasicDefaultValues の epoch デフォルト値を JST 正値(09:00:00)に訂正
  - QuotationTrimmer: 片側クォートスルー・二重クォート1層除去仕様を追記
  - 日付型カラム受付形式に "yyyyMMdd HHmmss"(14文字)と "yyyyMMddHHmmssS"(15文字)を追記
  - §4 に BasicDataTypeMapping「半角数字→X」の注意を追記
  - §9 に LIST_MAP 重複セクション先着一致・存在しない groupId は空リスト返却を追記
  - §11 を新設: messaging ステータスコードデフォルト "200"・ヘッダ/ボディ行数一致制約
  - AI向けプロンプト: ファイル系空行動作・BasicJapaneseCharacterInterpreter 書式不一致スルールール・${半角記号}除外文字・LIST_MAP重複・groupIdタイプミス不検出・messagingヘッダ/ボディ行数一致を追記

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
src/test/java を対象に含めず全行走査の証明もなかったため
P4-1(再)〜P4-3(再)として再実施タスクを定義する

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
src/main/java のみ対象だった旧P4-1を再実施。
src/test/java 全233クラスをパッケージ別に分類(参照情報26クラス・対象外207クラス)し、
P4-2の全行走査対象はsrc/main/javaの「直接影響」29クラスのみとする方針を§2に明記。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- §24: 1ファイルセクション内の複数レコードレイアウト(DataFileParser 状態機械の繰り返し)
- §25: "-" 長フィールドの最終サイズ決定ルール(全レコード中の最大バイト長)

S-1〜S-5(schema.json)、D-1〜D-13/D-15(design.md)、E-1〜E-4(examples.yaml)は
前回コミットまでに反映済み

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Excel の複数シートは FooTest.setUpDb.yaml / FooTest.testMethod1.yaml 等に分割する方針。
スキーマへの破壊的変更不要。先行実装例と整合。design.md §変換ツール方針 に明記。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…TypeMapping 22種)

- design.md §7: QuotationTrimmer 全角クォートの判定説明を修正
  (「同じ文字のペア」→「U+201C と U+201D という異なる文字のペア」が正確)
- design.md §4: BasicDefaultValues の DATE デフォルト値を JVM タイムゾーン依存と明記
  (`new Timestamp(0L)` は UTC epoch。JST 環境では "1970-01-01 09:00:00.0"、UTC では "1970-01-01 00:00:00.0")
- design.md AI向けプロンプト: NullInterpreter 大文字小文字非区別をプロンプト内に追記
- design.md AI向けプロンプト: "-" 長フィールドの最大バイト長決定ルールを追記
- class-list.md: BasicDataTypeMapping の「17種」を「22種」に訂正
- spec-mapping.md: D-2/D-4 の記述を同様に修正

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- schema.json: file_data.records を minItems: 0 に変更(Doc-10: 空ファイル表現)
- design.md: Doc-1〜9/12〜17 を各セクションに追記
  (主キー省略不可・Timestamp末尾.0・データタイプ混在禁止・default groupId・
   yyyyMMddHHmmss12桁形式・QuotationTrimmerスペース/"\"\"\"記法・空ファイル §25・
   X9/SX9記述方法 §26・マルチレコードヘッダ繰り返し・no列複数回送信・
   HTTP行長制約・testShots予約ID・文字種14種vs解説書11種の差異注記)
- examples.yaml: \\n→LF・QuotationTrimmer記法・0xバイナリ直接記述・
  no列複数回送信例を特殊値一覧および各コメントセクションに追記

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
コード全行走査・公式解説書照合・専門家レビューの3層から成る
根拠を1ファイルに整理したドキュメントを作成。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
公式解説書 13ファイルと YAML スキーマの照合結果。
Doc-1〜Doc-17 の未反映仕様を記録。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
16件の差分を特定。12件は本スキーマに合わせるべき重大差分。
nablarch-test-data-converter は間に合わせ実装であり、
本スキーマ形式に合わせて修正することを推奨する結論を記録。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
kiyotis and others added 30 commits May 22, 2026 15:25
- 「フィールド名定義」→「レコード種別とフィールド名称」
- 「データ型定義」→「データ型」、「長さリスト」→「フィールド長」
- 「セル」→「要素」(Excel 固有制約の注記)
- 「no 列」→「no カラム」、「ステータスコード列」→「ステータスコードカラム」
- 「列番号」→「カラム番号」
- 付録索引も同様に統一

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 「予約シート名」→「予約 ID」(TS-05・3.4節)
- 「フィールド名定義」→「レコード種別/フィールド名称」(5.5節・5.8節・SS-28)
- 「リクエストユーザー」→「ユーザー ID」(1.1節)
- `group_id: "default"` の YAML 記法を形式非依存な表現に修正(2.4節)
- requestParams 参照の「参照」を除去(3.2節)
- TS-19 に「テストデータ識別名」の補足を追加

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
「HTTP テスト」→「リクエスト単体テスト(HTTP)」
「バッチテスト」「バッチ/スタンドアロンテスト」→「リクエスト単体テスト(バッチ)」

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
「リクエスト単体テスト(HTTP)」→「リクエスト単体テスト(ウェブアプリケーション)」
「リクエスト単体テスト(バッチ)」→「リクエスト単体テスト(バッチ処理)」

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 「ユーザー ID」→「ユーザ ID」(解説書表記に統一)
- 「グループID」→「グループ ID」(スペース統一)
- context カラムの説明を解説書に合わせて修正
- 3.2節 ウェブアプリケーション testShots オプションカラムに不足列を追加
  (expectedSearch / expectedMessage / responseMessage /
   expectedMessageByClient / responseMessageByClient)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- #overview: 3種類のデータ共存例を追加
- #test-shots: testShots / context LIST_MAP の対比例を追加
- ntf-spec.md 1.1節に #overview へのリンクを追加

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…合わせて全面修正

テーブルデータ・LIST_MAPの先頭空セルを除去。
先頭セルが空になるのはファイルデータのデータ行のみ(Excel固有)。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- テーブル名から TABLE サフィックスを除去(USER_TABLE→USER など)
- #overview の EXPECTED_TABLE をセットアップと同一値に修正
- #expected-complete-table の EXPECTED_TABLE をセットアップと同一値・全列に修正
- 各テーブルの末尾空列を除去

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ntf-impl-spec-list.md の全141仕様IDに `ntf-spec.md 節番号` 列を追加
  - 対応する節がない仕様ID(RS-xx / 一部 TS-xx 等)は `—` を記載
  - 節番号未記載の仕様IDが記載漏れを示すインジケーターとして機能する
- ntf-spec.md の「10. 付録: 仕様ID索引」章を削除(内容は ntf-impl-spec-list.md に統合)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
仕様IDの管理は ntf-impl-spec-list.md の節番号列で行うため、
ntf-spec.md 本文中の(DT-02)等の括弧付き仕様ID参照とヘッダの
対応仕様ID行をすべて削除した。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ntf-spec-examples.md: {#id} 形式(GitHub非サポート)を
  <a name="id"></a> に変換(13箇所)
- ntf-impl-spec-list.md: SS-19→3.1、TS-06→3.2 に修正

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 次タスクを「1〜3章 + ntf-spec-examples-overview.md 作成・レビュー」に更新
- Example ファイルを章ごとに分割する方針と構成を記載
- 仕様書の書き方・Example の書き方の原則を明記
- 2.1節の課題(Excel書式のみ記載)を現状課題として記録

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Example を推測で作成しないよう、nablarch-example-web/batch の
実物Excelテストデータを WebFetch で確認してから Example を書く
手順を明記した。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 現在の状態を最新化(調査済み事項・未修正箇所を明記)
- ntf-spec-examples.md(旧)は廃止予定と明記
- Exampleリポジトリ調査済みであることを記録

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ntf-spec.md 2.1節: Excel/YAML 両形式の書式を並記(DataType→YAMLキー対照表を追加)
- ntf-spec-examples-overview.md: 1〜3章(概要・セクション識別・テストケース定義)
- ntf-spec-examples-table.md: 4章(SETUP_TABLE / EXPECTED_TABLE / EXPECTED_COMPLETE_TABLE / LIST_MAP)
- ntf-spec-examples-file.md: 5章(固定長・可変長・複数レコード・空ファイル)
- ntf-spec-examples-messaging.md: 6章(MESSAGE / SendSync / EXPECTED_REQUEST_*_MESSAGES)
- ntf-spec-examples-special.md: 7〜9章(特殊値・ディレクティブ・コメント)
- ntf-spec.md の全 Example リンクを新ファイルに向け直し

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant