-
-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Open
Copy link
Labels
developer update開発者向けの更新開発者向けの更新
Description
概要
MigrationExportHtmlPageTrait と MigrationExportNc3PageTrait の取り込み処理を、サービスクラスへ段階移行します。
目的は、テスト容易性の改善(自作テストダブル削減)と責務分離です。
本 issue では、PR1(Service 新設 + Trait 互換ラッパー化)と PR2(呼び出し元の切り替え)までを対象にします。
背景と目的
- Html / Nc3 の trait は、HTTP / Storage / DOM / ファイルI/O をまとめて持っており、責務が大きいです。
- テスト時に trait ホスト用の自作テストダブルが必要になっており、保守コストが高くなっています。
- 将来的な HTTP 抽象化や Mock 利用の前段として、まず Service 化で構造を整理したいです。
- 既存機能を壊さないため、段階移行で進めます。
対象範囲(この issue の範囲)
- MigrationExportHtmlPageTrait
- MigrationExportNc3PageTrait
- PR1 と PR2 まで
- UI/画面仕様の変更なし
- 出力ファイル形式(frame_.html, frame_.ini)の変更なし
実装計画
PR1: Service 新設 + Trait 互換ラッパー化(挙動同等)
- app/Services/Migration/MigrationExportHtmlPageService.php を新規作成します。
- app/Services/Migration/MigrationExportNc3PageService.php を新規作成します。
- MigrationExportHtmlPageTrait の処理本体を Html Service に移します(コピーベースで挙動同等を優先します)。
- MigrationExportNc3PageTrait の処理本体を Nc3 Service に移します(コピーベースで挙動同等を優先します)。
- MigrationExportHtmlPageTrait::migrationHtmlPage() を Service 委譲の薄いラッパーに変更します。
- MigrationExportNc3PageTrait::migrationNC3Page() を Service 委譲の薄いラッパーに変更します。
- 各 trait に Service 取得用メソッド(例: migrationExportHtmlPageService(), migrationExportNc3PageService())を追加します。
- 挙動テストの主軸を Service 側へ移し始めます。
- Trait 側のテストは「Service 委譲確認」中心へ縮小します。
PR2: 呼び出し元を Service 直呼びへ切り替え
- PageManage の HTML 取り込み呼び出しを Trait 呼び出しから Html Service 直呼びに変更します。
- PageManage の NC3 取り込み呼び出しを Trait 呼び出しから Nc3 Service 直呼びに変更します。
- ExportNc3PageFromHttp コマンドの呼び出しを Trait 呼び出しから Nc3 Service 直呼びに変更します。
- PageManage から MigrationExportHtmlPageTrait / MigrationExportNc3PageTrait の use を外します。
- ExportNc3PageFromHttp から MigrationExportNc3PageTrait の use を外します。
- 呼び出し元変更後も挙動が変わらないことを確認します。
- Trait 自体はこの PR では削除しません(後続で扱います)。
この issue でやらないこと(PR2までの非対象)
- MigrationExportHtmlPageTrait / MigrationExportNc3PageTrait の削除
- HTTP 依存のインターフェース化(Gateway 化)
- Html / Nc3 の内部ロジック統合や大規模再設計
- 未使用コードの整理(古いコールバックや残存プロパティの掃除)
- 挙動変更を伴うリファクタリング
補足(HTTP 依存のインターフェース化 / Gateway 化)
HTTP処理をServiceから直接呼ばず、Gatewayインターフェース経由で注入し、実装詳細を隠して差し替え可能にすることで、テストのモック化と変更影響の局所化をしやすくする設計です。
- 本 issue では非対象です(PR3 以降の別PRで実施想定です)。
テスト方針
PR1
- Service 側に既存の主要挙動テストを移します(Html / Nc3 ともに)。
- Trait 側テストは「Service を呼ぶこと」の確認に絞ります。
- Storage::fake() は継続利用します。
- 既存テストの意図は維持します。
PR2
- PageManage 経由の Html / Nc3 取り込みが従来通り動作することを確認します。
- ExportNc3PageFromHttp コマンド経由の NC3 取り込みが従来通り動作することを確認します。
- 呼び出し元切り替えによる回帰がないことを確認します。
受け入れ条件
- PR1/PR2 ともに Html / Nc3 の取り込み挙動が変わらないこと
- PR1 時点で既存呼び出し元を壊さないこと(Trait 互換を維持すること)
- PR2 時点で PageManage と ExportNc3PageFromHttp が Service 直呼びへ切り替わっていること
- 出力ファイルの保存先・ファイル名・内容フォーマットが同等であること
- テストコードの可読性が改善されること
- php -l が通ること
- PHPUnit 対象テストが通ること
想定リスク
- コピーベース移設時に挙動差分が混入する可能性があります。
- PR1 と PR2 の間で一時的に実装が二重化して見える可能性があります。
- テスト移行途中はテストコードが一時的に重複する可能性があります。
- Nc3 側は Html より処理が重く、移設差分が大きくなる可能性があります。
備考
- 本 issue は PR2 までを対象とし、trait 削除や HTTP 抽象化は別 issue / 別 PR で扱います。
- PR1/PR2 は挙動変更を避け、構造整理を優先します。
- 実装順は Html を先行し、その後 Nc3 を同じ方針で適用する想定です。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
developer update開発者向けの更新開発者向けの更新