Upgrade to Pro — share decks privately, control downloads, hide ads and more …

複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ

複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ

2026/10/12開催「フロントエンドカンファレンス関西2026」の登壇資料です。「マスタ選択UI」を題材に、複雑な共通UIコンポーネントと長く付き合うための考え方を話しました。作りは複雑なままで、テストで品質を担保してくための取り組みとして「状態遷移テスト」「プロパティベーステスト」で守り、安全な再設計への指針を紹介しています。

Avatar for masahiko.asai

masahiko.asai

October 12, 2026

More Decks by masahiko.asai

Other Decks in Programming

Transcript

  1. ⾃⼰紹介 あさマック / 浅井 雅彦 Masahiko Asai X: @mixplace 株式会社ログラス

    技術本部 フロントエンド基盤チーム エンジニア フロントエンドエンジニアとしてWeb制作会社、ベンチャー企業2社を経て、 2021年10⽉にログラスに⼊社。UIデザインを含む、フロントエンド開発全般 を主に担当。 2024年夏からは「フロントエンド基盤チーム」を⽴ち上げ、複数の プロダクト‧機能開発チームをフロントエンド領域から⽀援する役割と、 フロントエンド基盤領域やデザインシステムといった共通資産部分の開発を 担っている。 2
  2. 3

  3. 4

  4. 5

  5. 複雑なUIコンポーネント: マスタ選択UI きっかけ: 対象のアイテムを選ぶ「マスタ選択UI」の作り直すことにした ‧管理会計の要である分析業務では、数字を⾒たい「部署」「科⽬」 「商品」を選ぶユースケースが多くある 営業本部, 東日本営業部, 西日本営業部, 製品…

    ‧プロダクトローンチ後、機能追加と改善を繰り返す中で、 類似のSelectコンポーネントが数種類乱⽴していた ‧メンテナンスコストも上がる中で、2024年秋から作り直すことに ‧既存UIではパフォーマンス限界が⾒えており、 当時1年後には顕在化が予想されていた ‧ユーザーにパフォーマンス劣化が顕在化する前に 先⼿を打って対応しようとした 16
  6. 複雑なUIコンポーネント : マスタ選択UI 品質を保ち続けることが難化していく • 既存利⽤箇所の置き換えを進めていた中で、細かな不具合が発⾒される • 不具合発⽣時は、修正とポストモーテムを実施 • 機能開発では都度、テスト設計分析を経てテストの拡充を進めていた

    操作はインテグレーションテスト、純ロジックはユニットテスト • それでもUIの複雑度が⾼いがゆえ、テストを拡充してもカバーできているのか⼿応えがない状況に コンポーネント品質を向上しないと 全プロダクトに波及する ⼤規模障害が起きる未来が来るのでは? 20
  7. 網羅性をどう上げていくか 状態遷移図 選択状態:なし 選択状態:⻄⽇本営業部 選択 西日本営業部 ポップアップ 1 閉じている 4

    表⽰:なし 開く 適⽤ ポップアップ 2 ポップアップ 表⽰:⻄⽇本営業部 適⽤ 選択 開いている チェック:なし 閉じている ポップアップ 3 クリア 開いている チェック:⻄⽇本営業部 ⼀例: 「開く → ⻄⽇本営業部を選ぶ/クリア → 適⽤」という遷移シナリオ 31
  8. 網羅性をどう上げていくか 状態遷移表 今の状態 \ 操作 ポップアップ: 1 閉じている 表⽰:なし ポップアップ:

    2 開いている チェック:なし ポップアップ: 3 4 開いている チェック:⻄⽇本営業部 ポップアップ: 閉じている 表⽰:⻄⽇本営業部 開く 2 ⻄⽇本営業部を ⻄⽇本営業部を クリア 適⽤ — — — 選択 ⻘枠 部分 状態遷移図の⽮印通りに — 3 — 1 — — 2 4 動くか 灰⾊枠「—」 部分 起きないはずのことが 3 — — — 起きないか 32
  9. 網羅性をどう上げていくか 状態遷移図 選択状態:なし 選択状態:⻄⽇本営業部 選択 西日本営業部 ポップアップ 1 閉じている 4

    表⽰:なし 開く 適⽤ ポップアップ 2 ポップアップ 表⽰:⻄⽇本営業部 適⽤ 選択 開いている チェック:なし 閉じている ポップアップ 3 クリア 開いている チェック:⻄⽇本営業部 ⼀例: 「開く → ⻄⽇本営業部を選ぶ/クリア → 適⽤」という遷移シナリオ 34
  10. 複雑なUIコンポーネント: マスタ選択UI 営業本部, 東日本営業部 , 西日本営業部 , 製品… UI上でできる操作が多い •

    メニューを開く / 閉じる • アイテムの選択 / クリア ◦ 末端アイテムの選択 / クリア ◦ 親アイテムの選択 / クリア • ▼ トグルを開く / 閉じる • すべて選択 / すべてクリア • 検索による絞り込み / 絞り込み解除 • 適⽤ / キャンセル ボタン 35
  11. どのような品質改善に取り組んできたか プロパティベーステスト 例1 トグルの開閉操作を加えても 値は変わらないこと 操作をランダムに複数回操作 例2 何もせず適⽤をクリック しても値は変わらないこと アイテム

    選択 適⽤ アイテム 選択 適⽤ 操作をランダムに複数回操作 選択値A ▸ 開閉 ▸ 開閉 選択値B 選択値 A ポップアップ 開き直す 何もせず適⽤ 選択値 B 選択値A と 選択値B は 同じかどうかをテストできる 37
  12. どのような品質改善に取り組んできたか やってみてどうだったか • 0スイッチ‧1スイッチ(2回操作)は全パターン実施 ‐ ポップオーバー内でできる操作が多いため。2回操作が正しく動作することは担保 • Nスイッチは7スイッチ(8つの操作)まで担保 ‐ 3スイッチ⽬から未発⾒の不具合を数件⾒つけることができた

    ‐ どのプロダクトでも使われていないが、将来顕在化し得るものもあった ‐ → 隠れた因⼦、隠れた⽔準が⾒つかった • どのスイッチでテストが失敗するかわかることで、不具合の原因特定もしやすくなった ‐ 問題箇所がわかることで、影響範囲と解決の道筋がつきやすくなった 39
  13. まとめ • プロダクト価値の中⼼となるUIならば、⻑く付き合う覚悟を持つ • “UIのプロダクト価値はなにか” “なにを守りたいのか”を明確する • 最適なテスト設計技法を選ぶ ◦ 隠れ因⼦‧隠れ⽔準があるか探索してみる

    ◦ UIの状態変化を調べるために「状態遷移テスト」「プロパティベーステスト」は有⽤だった ◦ テスト網羅性が上げて、⻑く付き合っていける状態に持っていく • 将来の再設計に向けて計画する ◦ 多くのステークホルダーとの対話が必要であり、戦略と計画を描く必要がある 50
  14. 57