Skip to content

refactor(web): 終日パッキング純関数化 + レール統合(フェーズ3a)#27

Merged
sasagar merged 1 commit into
mainfrom
dev
Jul 25, 2026
Merged

refactor(web): 終日パッキング純関数化 + レール統合(フェーズ3a)#27
sasagar merged 1 commit into
mainfrom
dev

Conversation

@sasagar

@sasagar sasagar commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

表示層のテストで守れる範囲。差分 +66/-491、テスト 913 → 959。

  • 終日レーンの行割り当て/共有行数/+N を純関数化(テスト25件、WeekGrid が呼ぶ3段の通しテスト込み)
  • OooRailLine + WorkingLocationRailBand → RailBand に統合(2ファイル削除、CSS クラス名不変)
  • レール項目生成と activity/CI クラスタリングを generic 化
  • スワイプ/ズームには一切触れていない

⚠️ デモデータに終日予定・OOO・勤務場所が無いため、その2レーンは実データでの目視確認が必要です。

🤖 Generated with Claude Code

https://claude.ai/code/session_01HGESE2zBNzoW8MYvtEySBQ

表示層のうち「テストで守れる範囲」だけを先に実施。スワイプ/ズームの実 DOM 挙動には触っていない。
差分 +66/-491(新設除く)、テスト 913 → 959。

- layout/allDayPanels.ts を新設: 終日レーンの行割り当て・3パネル共有の最大行数・「+N」あふれを
  純関数化(WeekGrid の3連 useMemo 86行 → 3行の呼び出し)。**ズレると終日バーが消える/重なる**
  種類のロジックなのでテスト25件で厚く固定 ―― 複数日バーのクリップ、パネル境界ちょうど、
  重なり時の行分割と空き行再利用、共有行数の境界を両側から、+N の件数展開と titles 順、
  パネル間で配列を共有していないこと、そして **WeekGrid が呼ぶのと同じ3段の通しテスト**
- components/RailBand.tsx に OooRailLine(133行)と WorkingLocationRailBand(134行)を統合し
  variant で出し分け(両ファイルは削除)。CSS クラス名は不変。勤務場所の subject は型で Occurrence に
  限定されるため、共通化した分岐でも旧実装と同一結果になることを型で保証
- layout/railItems.ts に railItemsForDay<T> を新設(本体が完全一致だった2関数を generic 化、
  既存テストはラッパー経由で全通過 + 半開区間の境界を9件追加)
- layout/clusterByTopPx.ts に activity/CI のクラスタリングを generic 化(12件。**px 基準である
  ことの証明** ―― 同じ5分差が 48px/h ではまとまり 120px/h では分かれる)。畳み込みラベルの
  文字列生成も共通化。DOM 側は共通化しない判断(差分が props 注入コストを上回り、React 描画
  テストが無いため回帰の担保が取れない)
- 旧コンポーネント名を指すコメント参照を8ファイルで RailBand へ言い換え

web 959 tests, typecheck/build clean。lint 警告 9(ベースラインと同一)。
実ブラウザ(demo)で描画とコンソールエラー無しを確認。ただし**デモデータに終日予定・OOO・
勤務場所が無いため、その2レーンの見た目は実データでの確認が必要**。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HGESE2zBNzoW8MYvtEySBQ
@sasagar
sasagar merged commit 901b415 into main Jul 25, 2026
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