Skip to content

refactor: Pages ビューを責務ごとにパーシャル分割 - #188

Merged
128na merged 1 commit into
masterfrom
worktree-refactor-pages-split-responsibility
Aug 15, 2026
Merged

refactor: Pages ビューを責務ごとにパーシャル分割#188
128na merged 1 commit into
masterfrom
worktree-refactor-pages-split-responsibility

Conversation

@128na

@128na 128na commented Aug 15, 2026

Copy link
Copy Markdown
Owner

Summary

  • resources/views/livewire/pages.blade.php に「フィルタUI」「検索結果一覧」「ページネーション」の3つの責務が同居しており、ページネーションリンクのマークアップも一覧の上下2箇所に丸ごと重複していた。
  • resources/views/livewire/partials/ 配下に pages-filter.blade.php(フィルタUI)・pages-results.blade.php(検索結果一覧)・pages-pagination.blade.php(ページネーションリンク、上下で@includeし重複を解消)を切り出し、pages.blade.php はそれらを@includeするだけの構成に整理した。
  • Livewireのネストコンポーネント化・Islands化も検討した上で見送った:
    • ネストコンポーネント化: LengthAwarePaginatorを安全にpropとして渡す組み込みSynthesizerが無く(Eloquent Model/Collectionにはあるが、Paginatorには無いことをvendorソースで確認済み)、シリアライズ周りのリスクが増える割に、このページの規模では恩恵が薄い。
    • Islands化: このページは検索条件を変えると結果自体が必ず変わる(onConditionUpdateが実行されると常に一覧も更新される)ため、再描画範囲を絞る効果がほぼ無く、目的に合わない。
    • 上記の理由で、Pages.php(PHPクラス側の状態管理・#[Computed]・バリデーション等)は一切変更せず、Bladeテンプレートの整理のみに留めた。

E:\chore\best_practice\livewire.md のアンチパターンチェックリスト(3)に基づく対応。

Test plan

  • ./vendor/bin/pint --test
  • ./vendor/bin/phpstan analyse(level 9, 全体, エラーなし)
  • ./vendor/bin/rector process --dry-run(変更対象ファイルに提案なし)
  • php artisan test(65件全て通過。$this->pages@includeパーシャル内でも問題なく解決されることを含め、既存のPagesTest 8件がそのまま通ることを確認)

🤖 Generated with Claude Code

resources/views/livewire/pages.blade.php に「フィルタUI」「検索結果一覧」
「ページネーション」の3つの責務が同居しており、ページネーションリンクの
マークアップも2箇所(一覧の上下)に丸ごと重複していた。

- pages-filter.blade.php: キーワード入力・pak/siteチェックボックス・
  検索/リセットボタン
- pages-results.blade.php: 検索結果一覧
- pages-pagination.blade.php: ページネーションリンク(上下で@includeし
  重複を解消)

Livewireのネストコンポーネント化・Islands化も検討したが、
- ネストコンポーネント化: LengthAwarePaginatorをpropとして安全に渡す
  組み込みSynthesizerが無く、シリアライズ周りのリスクが増える割に、
  ページ規模的に恩恵が薄い
- Islands化: このページでは検索条件を変えると結果自体が必ず変わるため
  再描画範囲を絞る効果がほぼ無く、目的に合わない
と判断し、PHPクラス(Pages.php)の状態管理・#[Computed]等は一切変更せず、
Bladeテンプレートの整理のみに留めた。既存のPagesTest 8件を含む全テストが
そのまま通ることを確認済み($this->pagesが@includeパーシャル内でも
問題なく解決されることも実地確認)。
@128na

128na commented Aug 15, 2026

Copy link
Copy Markdown
Owner Author

セルフレビュー実施(前回同様、並列調査エージェントは月間API利用上限で使えなかったため自分で直接検証)。パーシャル分割前後でBladeマークアップが完全に一致していること、$this->pages@includeパーシャル内でも問題なく解決されること、クロスファイル参照(<livewire:pages />のマウント元、他ビューからの参照)に問題がないことを確認。指摘事項なし。

@128na
128na merged commit 3660f6c into master Aug 15, 2026
5 checks passed
@128na
128na deleted the worktree-refactor-pages-split-responsibility branch August 15, 2026 01:19
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