Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
29ad4ae
chore: start session — ntf-yaml-support
kiyotis Jun 26, 2026
937c7a7
docs: Excelテストデータの対象を全件と明記
kiyotis Jun 26, 2026
f994334
docs: YAML変換後の差異は修正せずユーザー報告・停止とするルールを追加
kiyotis Jun 26, 2026
d3276cb
feat: complete task #1 — 事前確認・テスト全パス確認
kiyotis Jun 26, 2026
420530c
feat: pom.xmlとunit-test.xmlにYAML対応の設定を追加
kiyotis Jun 26, 2026
3353de1
fix: pom.xmlのdependency間に空行を追加(スタイル修正)
kiyotis Jun 26, 2026
443866b
feat: complete task #2 — pom.xmlとunit-test.xmlにYAML対応の設定を追加
kiyotis Jun 26, 2026
e9d698c
feat: ExcelテストデータをYAML形式に変換
kiyotis Jun 26, 2026
51afb12
feat: complete task #3 — ExcelテストデータをYAML形式に変換(差異なし)
kiyotis Jun 26, 2026
abac623
feat: ExcelテストデータをYAML移行完了後に削除
kiyotis Jun 26, 2026
5ca8ee3
feat: complete task #4 — Excelファイル削除・YAMLのみで全テストパス確認
kiyotis Jun 26, 2026
71d5127
chore: suspend session — ntf-yaml-support
kiyotis Jun 26, 2026
2dd2695
chore: reconcile steering.md — all tasks confirmed complete, reset State
kiyotis Jun 26, 2026
2c0088e
chore: suspend session — ntf-yaml-support
kiyotis Jun 26, 2026
854db58
feat: nablarch-testing-converterをdependencyからpluginに移行
kiyotis Jul 15, 2026
6981157
chore: suspend session — ntf-yaml-support
kiyotis Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .rn/ntf-yaml-support/checks/task-1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# task-1 Completion Check

## Completion Criteria

| Criterion | Self-check | Evidence | QA | QA Evidence |
|---|---|---|---|---|
| ntf-yaml-support ブランチが develop から作成されている | OK | `git merge-base ntf-yaml-support origin/develop` の結果が `f3b3275` で、これは `origin/develop` の最新コミットと一致する | OK | merge-base が origin/develop のtipと一致することを git rev-parse で独立検証済み |
| mvn test が全テストパス(BUILD SUCCESS) | OK | `Tests run: 12, Failures: 0, Errors: 0, Skipped: 0` / `BUILD SUCCESS` (2026-06-26T09:34:08) | OK | surefire レポート(09:33-09:34)で独立確認。@Disabled/@Ignore 等の抑制アノテーションなし |

## QA Expert Review

| Aspect | Verdict | Evidence / Improvement |
|---|---|---|
| Meaningful tests/verification | OK | surefire レポートで12テスト・0失敗を独立確認。ブランチ起点も git rev-parse で検証済み |
| Edge case coverage | NG(既存の制限) | テストスイートが5クラス12件と小規模。ただしこれは develop からの変更ゼロの既存状態であり、このタスクの問題ではない。YAMLへの移行後にデグレを検出できない可能性あり(リスクとして記録) |

## Expert Reviews (code changes only)

N/A

## Overall Verdict

- Self-check: OK
- QA: OK(エッジケースカバレッジは既存の制限のため NG だが、タスク自体はPASS)
- Language expert: N/A
- Software-engineering expert: N/A
- Ready for user review: Yes
43 changes: 43 additions & 0 deletions .rn/ntf-yaml-support/checks/task-2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# task-2 Completion Check

## Completion Criteria

| Criterion | Self-check | Evidence | QA | QA Evidence |
|---|---|---|---|---|
| pom.xml に nablarch-testing-yaml:1.0.0-SNAPSHOT が test スコープで追加 | OK | pom.xml L135-142: `<artifactId>nablarch-testing-yaml</artifactId>` `<version>1.0.0-SNAPSHOT</version>` `<scope>test</scope>` | OK | diff確認済み。BOM管理外のため明示バージョン必須、正しく対応 |
| pom.xml に nablarch-testing-converter:1.0.0-SNAPSHOT が test スコープで追加 | OK | pom.xml L143-149: `<artifactId>nablarch-testing-converter</artifactId>` `<version>1.0.0-SNAPSHOT</version>` `<scope>test</scope>` | OK | diff確認済み |
| unit-test.xml に yamlInterpreters と YamlTestDataParser が追加 | OK | unit-test.xml L19-33: `<list name="yamlInterpreters">` と `<component name="testDataParser" class="nablarch.test.core.reader.YamlTestDataParser">` が追加済み | OK | component-refの名前が test-data.xml 由来のものと一致、property名も検証済み |
| mvn dependency:resolve が成功 | OK | `mvn dependency:resolve -Dclassifier=test` BUILD SUCCESS。nablarch-testing-yaml:1.0.0-SNAPSHOT および nablarch-testing-converter:1.0.0-SNAPSHOT が test スコープで解決された | OK | ローカル.m2から解決確認済み |

## QA Expert Review

| Aspect | Verdict | Evidence / Improvement |
|---|---|---|
| Meaningful tests/verification | OK | dependency:resolve成功を独立確認。component-ref名・property名の存在を検証 |
| Edge case coverage | OK | quotationTrimmer除外・testDataParser上書きは参照PR #211と同一設計。YAMLファイル未存在時の失敗はタスク#3で解消予定の想定内挙動 |

## Expert Reviews (code changes only)

### Language Expert

| Aspect | Verdict | Evidence / Improvement |
|---|---|---|
| Best practices | OK | BOM管理外のため明示バージョン必須、正しく対応 |
| Codebase style consistency | OK | dependency間の空行を修正済み(3353de1)。インデント・コメントスタイルも一致 |
| GWT test format | N/A | config-only change |

### Software-engineering Expert

| Aspect | Verdict | Evidence / Improvement |
|---|---|---|
| Separation of concerns | OK | 両依存ともtest scope、本番クラスパスへの混入なし |
| System integrity | OK | SNAPSHOT版は参照PR #211と同一。testDataParserの上書きはNablarch DIの通常パターン、コメントで明示 |
| Maintainability | OK | スコープ内変更として許容。参照PRとの一致により意図が明確 |

## Overall Verdict

- Self-check: OK
- QA: OK
- Language expert: OK(空行修正済み)
- Software-engineering expert: OK
- Ready for user review: Yes
64 changes: 64 additions & 0 deletions .rn/ntf-yaml-support/checks/task-3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# task-3 Completion Check

## Completion Criteria

| Criterion | Self-check | Evidence | QA | QA Evidence |
|---|---|---|---|---|
| 3件の .xls ファイルに対応するYAMLファイルが生成されている | OK | `ImportZipCodeFileActionRequestTest/` → setUpDb.yaml, testNormalEnd.yaml, testAbNormalEnd.yaml; `ZipCodeDataFormatFormTest/` → testCharsetAndLength.yaml, testSingleValidation.yaml; `ZipCodeFormTest/` → testCharsetAndLength.yaml, testSingleValidation.yaml (合計7ファイル) | OK | 7ファイル全て存在確認。git show e9d698c で YAML のみコミット確認。 |
| サンプリング比較でExcelとYAMLの内容が一致 | OK | 各ファイル3件以上のデータをサンプリング確認。詳細は下記参照。差異なし。 | OK | 全シートのデータ行数一致確認。QuotationTrimmer後の値と一致。空rows・多バイト文字・半角カタカナも正確に変換されている。 |
| 変換後YAMLがコミット・プッシュされている | OK | commit SHA: e9d698c, branch: ntf-yaml-support | OK | コミットに .xls や pom.xml の変更が含まれていないことを確認。 |

### サンプリング比較詳細

**ImportZipCodeFileActionRequestTest.xls**

- `setUpDb` sheet → `setUpDb.yaml`:
- BUSINESS_DATE: SEGMENT_ID=`01`, BIZ_DATE=`2015-04-15 00:00:00` → YAML一致 ✓
- ZIP_CODE_DATA: データ行なし → `rows: []` 一致 ✓

- `testNormalEnd` sheet → `testNormalEnd.yaml`:
- testShots[1]: no=`1`, description=`データレコードが正しくデータベースに登録されること。`, expectedStatusCode=`0`, diConfig=`classpath:import-zip-code-file.xml` → YAML一致 ✓
- expectedLog_1: logLevel=`INFO`, message1=`TOTAL COMMIT COUNT = [1]` → YAML一致 ✓
- setup_files data row: `01101`, `060 `, `0600000`, `ホッカイドウ`, `サッポロシチュウオウク`, `イカニケイサイガナイバアイ`, `北海道`, `札幌市中央区`, `以下に掲載がない場合`, `0`, `0`, `0`, `0`, `0`, `0` → YAML一致 ✓
- expected_tables ZIP_CODE_DATA: LOCAL_GOVERNMENT_CODE=`01101`, ZIP_CODE_7DIGIT=`0600000`, PREFECTURE_KANJI=`北海道` → YAML一致 ✓

- `testAbNormalEnd` sheet → `testAbNormalEnd.yaml`:
- testShots[1]: setUpTable=`` (空), expectedTable=`1` → YAML一致 ✓
- expectedLog_1 3行: WARN + 各バリデーションエラーメッセージ → YAML一致 ✓
- expected_tables ZIP_CODE_DATA: データ行なし → `rows: []` 一致 ✓

**ZipCodeDataFormatFormTest.xls**

- `testCharsetAndLength` sheet → `testCharsetAndLength.yaml`:
- Row1(localGovernmentCode): propertyName=`localGovernmentCode`, allowEmpty=`x`, min=`5`, max=`5`, interpolateKey_1=`min`, interpolateValue_1=`5`, messageIdWhenNotApplicable=`{nablarch.core.validation.ee.SystemChar.message}`, 数字=`o`, スペース=`x` → YAML一致 ✓
- Row2(zipCode5digit): スペース=`o`, 数字=`o`, interpolateValue_2=`数字とスペース` → YAML一致 ✓
- Row6(addressKana): messageIdWhenNotApplicable=`` (空), interpolateKey_2=`` (空), 全文字種=`o` → YAML一致 ✓

- `testSingleValidation` sheet → `testSingleValidation.yaml`:
- Row1(multipleZipCodes, empty): messageId=`{nablarch.core.validation.ee.Required.message}`, input1=`` → YAML一致 ✓
- Row2(multipleZipCodes, "0"): input1=`0` (Excel上は`"0"`だが変換後YAML値は`"0"` = 文字列`0`) → YAML一致 ✓
- Row4(multipleZipCodes, "00"): messageId=`{nablarch.core.validation.ee.Length.fixed.message}`, interpolateKey_1=`min` → YAML一致 ✓

**ZipCodeFormTest.xls** (ZipCodeDataFormatFormTestと同構造)

- `testCharsetAndLength` sheet → `testCharsetAndLength.yaml`: ZipCodeDataFormatFormTestと同内容 → YAML一致 ✓
- `testSingleValidation` sheet → `testSingleValidation.yaml`: ZipCodeDataFormatFormTestと同内容 → YAML一致 ✓

## QA Expert Review

| Aspect | Verdict | Evidence / Improvement |
|---|---|---|
| Meaningful tests/verification | OK | プログラマティックに行単位で比較。YAML構文バリデーション実施。データ行数一致確認。 |
| Edge case coverage | OK | 空rows・多バイト・半角カタカナ・QuotationTrimmerセマンティクスを検証。"0"→0変換が正しいことを確認(defectではない)。 |

## Expert Reviews (code changes only)

N/A

## Overall Verdict

- Self-check: OK
- QA: OK
- Language expert: N/A
- Software-engineering expert: N/A
- Ready for user review: Yes
27 changes: 27 additions & 0 deletions .rn/ntf-yaml-support/checks/task-4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# task-4 Completion Check

## Completion Criteria

| Criterion | Self-check | Evidence | QA | QA Evidence |
|---|---|---|---|---|
| NTFのExcelテストデータが全て削除されている | OK | `git rm` で3件削除済み: ImportZipCodeFileActionRequestTest.xls, ZipCodeDataFormatFormTest.xls, ZipCodeFormTest.xls (commit abac623) | OK | find で src/test/ 配下に .xls/.xlsx が0件であることを確認。コミットに削除3件のみ含まれることを確認。 |
| Excelなし状態で mvn test BUILD SUCCESS | OK | Tests run: 12, Failures: 0, Errors: 0, Skipped: 0 — BUILD SUCCESS | OK | surefire レポート(10:16タイムスタンプ)で5クラス12テスト全パスを独立確認。スキップなし。 |

## QA Expert Review

| Aspect | Verdict | Evidence / Improvement |
|---|---|---|
| Meaningful tests/verification | OK | Excel使用の3クラス全てが YAML データでパス。スキップなし。 |
| Edge case coverage | OK | 5クラス全数12テストがパス。サイレントなテスト抑制なし。 |

## Expert Reviews (code changes only)

N/A

## Overall Verdict

- Self-check: OK
- QA: OK
- Language expert: N/A
- Software-engineering expert: N/A
- Ready for user review: Yes
144 changes: 144 additions & 0 deletions .rn/ntf-yaml-support/steering.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
# Goal

NTF(Nablarch Testing Framework)のAI対応として、AIが読み書きできないバイナリ形式のExcelテストデータ(`.xls`)をYAML形式に移行する。
参照: https://github.com/Fintan-contents/nablarch-system-development-guide/pull/211

対象は `nablarch-example-batch` リポジトリに存在するNTFのExcelテストデータ全件(現時点で3件、いずれも `.xls`):
- `src/test/java/com/nablarch/example/app/batch/action/ImportZipCodeFileActionRequestTest.xls`
- `src/test/java/com/nablarch/example/app/batch/form/ZipCodeDataFormatFormTest.xls`
- `src/test/java/com/nablarch/example/app/batch/form/ZipCodeFormTest.xls`

# Acceptance criteria

- `develop` ブランチから作成したブランチで全作業が行われ、`develop` ブランチへのPRが存在する
- 作業前に既存の全テストがパスすることを確認済みである
- `pom.xml` に `nablarch-testing-yaml:1.0.0-SNAPSHOT` と `nablarch-testing-converter:1.0.0-SNAPSHOT` の依存関係が追加されている(スコープ: test)
- `src/test/resources/unit-test.xml` に `YamlTestDataParser` コンポーネントと `yamlInterpreters` リストが追加されている
- 3件の `.xls` ファイルがそれぞれ対応するYAMLファイルに変換されている(サンプリングでExcelとYAMLの内容が一致することを確認済み)
- 変換後、元の `.xls` ファイルが全て削除されている
- YAMLテストデータを使った状態で全テストがパスしている
- Excelファイルなしで全テストがパスしていることを確認済みであり、間違えてExcelでパスしていない

# Assumptions

- `nablarch-testing-yaml:1.0.0-SNAPSHOT` と `nablarch-testing-converter:1.0.0-SNAPSHOT` はローカルMavenリポジトリ(`~/.m2`)に存在する(確認済み)
- 参照PRと同様の設定変更(pom.xml、unit-test.xml)でこのリポジトリでも動作する
- テスト実行にはH2インメモリDBを使用し、DBセットアップ済みである
- `nablarch-testing-converter` を使ってXLS→YAML変換が可能である

# Rules

- commit and push every change; one completion marker per task
- 全作業は `develop` ブランチから作成したブランチ上で行う
- PRは `develop` ブランチへ向ける
- テストはExcelファイルが存在しない状態で最終パスを確認する
- git add は明示的なパス指定のみ(`git add -A` / `git add .` 禁止)
- YAML変換後はサンプリングでExcelとYAMLの内容を比較してから削除する
- サンプリング比較で差異が見つかった場合は修正せずユーザーに報告して停止する

# Tasks

### #1: 事前確認 — developブランチチェックアウト・テスト全パス確認

**Purpose**: `develop` ブランチから作業ブランチを作成し、変更前の状態で全テストがパスすることを確認する。

**Prerequisites**: none

**Steps**:

- [x] `develop` ブランチの最新をfetchし、`ntf-yaml-support` ブランチを作成してチェックアウトする
- [x] `mvn test` を実行し、全テストがパスすることを確認する
- [x] 結果を `checks/task-1.md` に記録する(self-check列のみ)
- [x] テスト結果をコミット・プッシュする(steering.mdを除くcheckファイルのみ)
- [x] self-check (OK/NG per completion criterion, record in checks/task-1.md)
- [x] QA expert review (subagent)
- [x] user review

**Completion criteria**:

- `ntf-yaml-support` ブランチが `develop` ブランチから作成されている
- `mvn test` が全テストパスで終了している(BUILD SUCCESS)

### #2: 設定変更 — pom.xml と unit-test.xml にYAML対応を追加

**Purpose**: `pom.xml` に2つの依存関係を追加し、`unit-test.xml` に `YamlTestDataParser` の設定を追加する。

**Prerequisites**: #1

**Steps**:

- [x] `pom.xml` に `nablarch-testing-yaml:1.0.0-SNAPSHOT`(test scope)を追加する
- [x] `pom.xml` に `nablarch-testing-converter:1.0.0-SNAPSHOT`(test scope)を追加する
- [x] `unit-test.xml` に `yamlInterpreters` リストと `YamlTestDataParser` コンポーネントを追加する(参照PR #211の `proman-batch/src/test/resources/unit-test.xml` パッチと同内容)
- [x] `mvn test -Dsurefire.failIfNoSpecifiedTests=false` などで依存関係が解決できることを確認する
- [x] self-check (OK/NG per completion criterion, record in checks/task-2.md)
- [x] QA expert review (subagent)
- [x] language expert review (subagent)
- [x] software-engineering expert review (subagent)
- [x] user review

**Completion criteria**:

- `pom.xml` に `nablarch-testing-yaml:1.0.0-SNAPSHOT` と `nablarch-testing-converter:1.0.0-SNAPSHOT` が test スコープで追加されている
- `unit-test.xml` に `yamlInterpreters` リストと `testDataParser` コンポーネント(`YamlTestDataParser`)が追加されている
- `mvn dependency:resolve -Dclassifier=test` が成功する(依存関係解決エラーなし)

### #3: YAML変換 — xlsファイル3件をYAMLに変換

**Purpose**: `nablarch-testing-converter` を使って `.xls` テストデータをYAML形式に変換し、変換内容をサンプリングで確認する。

**Prerequisites**: #2

**Steps**:

- [x] `nablarch-testing-converter` を使って3件の `.xls` ファイルをYAML変換する
- `ImportZipCodeFileActionRequestTest.xls`
- `ZipCodeDataFormatFormTest.xls`
- `ZipCodeFormTest.xls`
- [x] 変換後、各YAMLファイルについてExcelの内容と数件サンプリングで比較し、一致を確認する
- [x] サンプリング比較結果を `checks/task-3.md` に記録する(差異があればユーザーに報告し、修正せずに止める)
- [x] 変換したYAMLファイルをコミット・プッシュする(Excelはまだ削除しない)
- [x] self-check (OK/NG per completion criterion, record in checks/task-3.md)
- [x] QA expert review (subagent)
- [x] user review

**Completion criteria**:

- 3件の `.xls` ファイルに対応するYAMLファイルが生成されている(参照PRの生成パターンに従ったパス)
- サンプリング比較(各ファイル最低3件のデータ)でExcelとYAMLの内容が一致している(差異があればユーザーに報告してタスク停止、修正は行わない)
- 変換後のYAMLファイルがコミット・プッシュされている

### #4: Excel削除・テスト確認 — xlsファイルを削除してテスト全パス

**Purpose**: `.xls` ファイルを削除し、YAMLテストデータのみの状態で全テストがパスすることを確認する。

**Prerequisites**: #3

**Steps**:

- [x] 3件の `.xls` ファイルを削除する
- [x] `mvn test` を実行し、Excelなしの状態で全テストがパスすることを確認する
- [x] テスト結果(BUILD SUCCESS)を `checks/task-4.md` に記録する
- [x] xlsファイル削除をコミット・プッシュする
- [x] self-check (OK/NG per completion criterion, record in checks/task-4.md)
- [x] QA expert review (subagent)
- [x] user review

**Completion criteria**:

- NTFのExcelテストデータ(`.xls` / `.xlsx`)が全て削除されている
- Excelファイルが存在しない状態で `mvn test` が全テストパス(BUILD SUCCESS)で完了している

# Decisions

# State

(written by /rn:dn, read and reset to this placeholder by /rn:up. `Status` is `paused` while a
session is suspended — the signal /rn:up and /rn:dn search for — and resets to `not suspended` here,
so only a genuinely suspended session reads `paused`.)

- **Status**: paused
- **Date**: 2026-07-15
- **Last completed**: #4 Excel削除・テスト確認 — xlsなしで全テストパス(追加: converterをMavenプラグインとしてpom.xmlに組み込み、全テストパス確認済み)
- **Next**: なし(全タスク完了)— PRマージのみ残り
- **Notes**: nablarch-testing-converterをtest依存からbuildプラグインに変更済み(854db58)。mvn nablarch-testing-converter:convert でXLS→YAML変換可能。PR #59 (ntf-yaml-support → develop) にてレビュー待ち。
20 changes: 20 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,13 @@
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-testing-yaml</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
Expand Down Expand Up @@ -245,6 +252,19 @@
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>com.nablarch.framework</groupId>
<artifactId>nablarch-testing-converter</artifactId>
<version>1.0.0-SNAPSHOT</version>
<configuration>
<from>xls</from>
<to>yaml</to>
<input>${project.basedir}/src/test/java</input>
<output>${project.basedir}/src/test/java</output>
<overwrite>true</overwrite>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
setup_tables:
- table: "BUSINESS_DATE"
rows:
- SEGMENT_ID: "01"
BIZ_DATE: "2015-04-15 00:00:00"
- table: "ZIP_CODE_DATA"
rows: []
Loading