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

安心して変更できるWebフロントエンドの作り方

Avatar for Hiroyuki ANAI Hiroyuki ANAI
September 14, 2026

 安心して変更できるWebフロントエンドの作り方

フロントエンドカンファレンス福岡2026の登壇資料です。
https://frontend-conf.fukuoka.jp/2026/?hl=ja

Avatar for Hiroyuki ANAI

Hiroyuki ANAI

September 14, 2026

More Decks by Hiroyuki ANAI

Other Decks in Technology

Transcript

  1. 自己紹介 穴井宏幸(@pirosikick) 株式会社LayerX ソフトウェアエンジニア バクラク勤怠の開発をメインに、WebフロントエンドのEnablingを少々 経歴 2009 ~ 2018年 ヤフー株式会社

    2016~2018年? JavaScript黒帯 2018 ~ 2020年 サイボウズ株式会社 フロントエンドエキスパート 2020 ~ 2025年 スタートアップCTO 2025年8月 株式会社LayerX 執筆 © LayerX Inc. 2018年「React入門」(翔泳社、共著) Web + DB Press 「どんとこい!フロントエンド開発」(連載、共著)、 「フロントエンド脱レガシー」(特集記事、共著) 2
  2. 本編に入る前に用語の整理 本編に登場する「Integration Test」「Unit Test」は、Testing Trophyの定義です Unit Test アプリケーション内で最も小さく分離されたコード単位(関数、純粋なロジック、ユーティリティなど)が、 単体で正しく動作するかを評価するテスト Integration

    Test 複数のユニットやモジュール(UIコンポーネント、状態管理 ... etc)が 組み合わさって機能する一連の流れを評価するテスト 個人的には、Storybookの play 関数をよく使うが、 vitestのbrowser modeやtesting-library + jsdom/happy-domなどを使ったテストのイメージ (ヘッドレスでブラウザを使うテストは、Integration Testなのか、という話もあるが、そこは許して) © LayerX Inc. 4
  3. Testing Trophyの詳しい情報は、本家の記事をご覧ください The Testing Trophy and Testing Classifications(Kent C. Dodds)

    https://kentcdodds.com/blog/the-testing-trophy-and-testing-classifications Testing Trophyの図(穴井手書き) © LayerX Inc. 5
  4. なぜ? Why 2. なるべく上位に自動テストを追加する方が効果が高い 上位 = 依存側、下位 = 非依存側 AがBに依存している場合、Aが上位

    ※注意: この定義が一般的かは分からない 効果が高い = 安心して変更できる範囲が広い © LayerX Inc. 9
  5. Why 2. なるべく上位に自動テストを追加する方が効果が高い ただし、上位なほど、実行コストが高くなる E2E Test >>> Integration Test >>

    Unit Test 全てをE2E Test or Integration Testに書くと 共通処理(複数から依存されている処理)でテストケースが重複して無駄 Unit Testは、そのようなケース(共通処理)や Validationなどテストパターンが多い場合に書く、くらいでよい気がする © LayerX Inc. 13
  6. なぜ? Why 3. テスト自体が生きた仕様書になる 仕様が残ってないと、 意図した挙動なのか、たまたまそうなっているのかわからず、 変更に躊躇してしまう E2E TestやIntegration Testは、ユーザーのユースケースに近い形でテストを書くので、

    1つのテストケース=1つの仕様・振る舞いになりやすい テストを読めば、仕様がわかるという状態になる ドキュメントは、実装と距離があるので、乖離が起きやすい © LayerX Inc. 14
  7. なぜ? Why 4. E2E Testはコストが高い テストの効果を考えるとIntegration Testより、E2E Testに分がある カバーする範囲が広い 実装に完全非依存、テストケースがほぼユーザーの振る舞いと一致

    変更が安全かのフィードバックはすぐ欲しい 作成したPRやpushしたcommitに対して、CIでテストしたい E2E Testは、現実的ではない E2E Testは、実行時間が長い E2E Testは、環境構築コストが高い micro serviceだと、動的な環境構築・データの洗替が無理なケースも © LayerX Inc. 15
  8. 何が実践を阻んだか? 差異がない特性 実行円滑性 = 簡単に実行できるか テストが実行しやすいかはテスト対象に関係ない モノレポ、かつ、同僚が既に整備済みだったので◎ 観測容易性 = テスト対象の状態を簡単に観測できるか

    要は、AAAパターンのAssert部分 UIの変化、モックしたAPI等とのやり取りが観測対象 テスト対象によってそこまで変わらない 制御容易性 = テスト対象の動作を簡単に制御できるか 要は、AAAパターンのArrange/Act部分 モックAPI、コンポーネントのprops、clickなどの操作 ... etc テスト対象によってそこまで変わらない © LayerX Inc. 24
  9. 違いがある特性 単純性 = 実装がシンプルか Integration Testが書けなかったページは、実装が複雑 行数が多い、1ファイルに詰め込みがち GraphQLのQueryがでかい、複数叩いている 分岐が多い、分岐条件の要素が多い コンポーネントのpropsが多い

    ... etc 理解容易性 = 仕様がシンプルか Integration Testが書けなかったページは、仕様が複雑 歴史が長く、ドメインが詰まりがち UIが複雑で、表示パターンが多い ... etc © LayerX Inc. 25
  10. 現状を知るために調査 AIが書いたファイルがどれくらいあるか 種別 .test.tsx play有 .stories.tsx 合計 計 57 18

    75 AI(※ 1) 41 8 49 人間(※ 2) 16 10 26 AI比率 71.9% 44.4% 65.3% ※1 コミットやPR本文に「Generated with Claude Code」が含まれるか等で判定 ※2「人間」判定は、コミットログにAIと判定できるマーカーが無かっただけなので、 実際はもっとAI比率が高いはず © LayerX Inc. 36
  11. テストコードを読んで感じたこと AI、めっちゃモックする 複雑なUIコンポーネント、だいたいモックしてる ex) モーダルコンポーネントをただprops.childrenを返すだけにする ex) リッチなセレクトボックスをただの <select> に置き換える その発想はなかったので感心したが、

    同じコードがコピペしたかのように点在しちゃってるのはよくない テスト基盤として提供するのがよさそう テスト用のFakeコンポーネント react-select-event のような複雑なUIコンポーネントをテスト時に操作するヘルパー関数 ... etc © LayerX Inc. 39
  12. End