テストは確認ではなく、未完成を見つけるための地図である

John Smith

Hatched by John Smith

Jul 16, 2026

1 min read

67%

0

まず問い直したいこと

テストとは何でしょうか。多くの現場では、テストは「壊れていないことを確認する作業」として扱われます。しかし、本当に価値があるのはその先です。テストは、完成したつもりの画面やAPIが、実はどこまで未完成なのかを発見する装置でもあります。

この視点で見ると、APIのテストと画面のビジュアルテストは別物ではありません。どちらも、ソフトウェアの異なる層に潜む不安定さを可視化する方法です。片方は「この入力に対して何が返るか」を確かめ、もう片方は「その結果が人間にとってどう見えるか」を確かめる。つまり、同じ対象を違う角度から照らしているのです。

ここに面白い緊張があります。正しさは、データで証明されるだけでは足りない。見た目でも破綻しない必要がある。 逆に、見た目が美しくても、APIが壊れていれば画面は幻想にすぎません。テスト設計の本質は、この二つの正しさをどう分担し、どう接続するかにあります。


2種類の不安定さをどう扱うか

ソフトウェアのバグには、大きく分けて2つの顔があります。ひとつは機能の破綻です。たとえば、フォーム送信が失敗する、一覧APIが空配列を返す、認証が通らない、といったものです。これは構造化された入力と出力の世界であり、比較的テストしやすい領域です。

もうひとつは意味の破綻です。たとえば、APIは200を返しているのに、画面のボタンが崩れていてクリックできない。数字は合っているのに、文字がはみ出してレイアウトが壊れている。あるいは、データは正しいのに、視線誘導が悪くてユーザーが次に何をすべきか分からない。これは単純な値の比較では捕まえにくい。

ここで、APIテストとビジュアルリグレッションテストの役割分担が見えてきます。APIテストは「振る舞いの契約」を守るための網、ビジュアルテストは「見え方の契約」を守るための鏡です。どちらか一方だけでは、契約の半分しか見えません。

たとえば、ECサイトの商品詳細ページを考えてみてください。APIテストで価格、在庫、商品名が正しく返ることを確認できます。しかし、その結果を受けた画面がスマホ幅で崩れて「カートに入れる」ボタンが下に追いやられていたら、売上には直結しません。逆に、画面のレイアウトが完璧でも、在庫数が古いままならユーザー体験は破綻します。

正しいデータは、正しい体験の必要条件にすぎない。体験そのものは、表示された瞬間に初めて成立する。


なぜ両者を分けて考えると、むしろ設計が強くなるのか

一見すると、APIテストとビジュアルテストは似た目的を持つ重複作業に見えるかもしれません。ですが、実際にはこの分離こそが設計を強くします。なぜなら、テストは対象を混ぜると弱くなるからです。

APIテストに見た目の判断を混ぜると、失敗の原因が曖昧になります。たとえば、「この画面のHTMLが違うのは、データの問題なのか、CSSの問題なのか、コンポーネントの状態遷移の問題なのか」が分からなくなる。逆にビジュアルテストにロジックを詰め込みすぎると、本来はAPI側で検出すべき問題まで、画像差分のノイズとして扱ってしまいます。

ここで重要なのは、テストは検出器であって、万能の真実ではないということです。検出器は得意領域を絞った方が感度が上がります。火災報知器が温度変化を敏感に拾うから役立つのであって、煙、音、光、匂いを全部ひとつで判定しようとすると、誤報だらけになります。テストも同じです。

この観点から見ると、テスト戦略は「何を守るか」ではなく「どの層の失敗を、どの粒度で最も安く見つけるか」という設計問題になります。APIテストは、データ契約の変化を早く安く見つける。ビジュアルテストは、UIの崩れを視覚的に、再現可能に見つける。両者を別々に持つことで、失敗の場所が特定しやすくなり、修正も速くなるのです。

さらに言えば、分離は保守性のためだけでなく、学習速度のためにも必要です。テストが失敗したとき、チームが「どこを見ればよいか」をすぐ理解できる構造になっていることは、想像以上に重要です。失敗が理解しやすいテストは、ただの防波堤ではなく、設計のフィードバックループになります。


本当に守るべきなのは「画面」ではなく「変化に耐えること」

多くの人はビジュアルテストを「画面が変わっていないかをチェックする仕組み」と捉えます。しかし本質はそこではありません。守りたいのは、静的なスクリーンショットではなく、変更に対する耐性です。

Web画面は、本質的に変化するものです。データは増えるし、文言は変わるし、レスポンシブ対応も必要になる。フロントエンドの設計が難しいのは、表示が状態とデバイスとデータの交点にあるからです。だからこそ、単に「今の見た目」を保存するだけでは弱い。必要なのは、どの変化を許し、どの変化を異常と見なすかを明確にすることです。

ここで、APIテストとの接続が効いてきます。APIテストは変化の意味を定義します。たとえば、レスポンスに新しいフィールドが増えても既存契約を壊さないか、必須項目が欠けていないかを見ます。一方、ビジュアルテストは、その変化が画面上で受け入れ可能かを見ます。APIが許す変化と、UIが許す変化は同じではないのです。

この違いを理解していないと、チームはテストを増やしているのに安心できません。理由は簡単で、増やしたテストがすべて同じ層を見ているからです。層が偏ると、盲点は残り続けます。真のカバレッジとは、本数ではなく、異なる失敗モードをどれだけ分けて捉えているかで決まります。

たとえば、新着記事一覧コンポーネントを考えましょう。APIテストでは、記事タイトル、公開日、サムネイルURLが返ることを確認する。ビジュアルテストでは、タイトルが長すぎてもカードの高さが破綻しないか、画像が欠けていないか、日付が複数行になっても余白が保たれるかを確認する。どちらも重要ですが、見ている失敗の種類は明確に異なります。

テストの成熟度は、何本あるかではなく、失敗をどれだけ「分類」できているかで測るべきだ。


ひとつのメンタルモデル: テストを地図として設計する

ここで、テストを「地図」として考えると整理しやすくなります。地図は現実そのものではありません。目的に応じて、道路、地形、境界、危険区域を抽象化して描きます。テストも同じです。システム全体を完全に再現するのではなく、失敗しやすい地形を見える化するのが役割です。

APIテストは、地図の中でも「ルート」を描きます。入力から出力までの経路が正しいか、期待した状態遷移が保たれているかを確認する。ビジュアルテストは「地形」を描きます。画面上で高さ、幅、余白、折り返し、重なりがどう見えるかを確認する。ルートが正しくても、地形が崩れていれば通れませんし、地形がきれいでもルートが間違っていれば目的地に着けません。

このメンタルモデルの良い点は、テスト設計が感情論から離れることです。「どっちが大事か」ではなく、「どの地図を持てば迷子になりにくいか」と考えられるからです。大規模なフロントエンドでは、すべてをE2Eで見るのは高価すぎます。逆に、ユニットとAPIだけでは表示の事故を拾いきれません。だから、地図を分割する必要があります。

さらに、この考え方はチームのコミュニケーションにも効きます。失敗したテストを見たときに、「これはルートの問題か、地形の問題か」と切り分けられれば、修正担当も明確になります。データが壊れているのか、表示が壊れているのか、意図が壊れているのか。分類できる組織は、修正も速いのです。


Key Takeaways

  1. APIテストとビジュアルテストは競合しない。 前者は振る舞いの契約、後者は見え方の契約を守る。役割が違うからこそ、両方必要です。

  2. テストは「何を確認するか」より「どの失敗を最も安く見つけるか」で設計する。 失敗モードを分けて考えると、無駄な重複と盲点の両方を減らせます。

  3. ビジュアルテストの本質は、静的な見た目の保存ではなく、変化に耐えることの確認。 レイアウト崩れ、折り返し、レスポンシブの破綻など、UI特有の失敗を捕まえるために使います。

  4. 失敗を分類できるテストは、学習速度を上げる。 どこが壊れたか分かりやすいほど、修正と議論が速くなります。

  5. 理想的なテスト戦略は、ソフトウェアの地図を複数持つこと。 ルートを見る地図と、地形を見る地図を分けると、システム全体の見通しがよくなります。


結論: テストは安心のためではなく、誤解を減らすためにある

私たちはしばしば、テストを「安心材料」として扱います。確かにそれも大事です。しかし、より本質的には、テストは誤解を減らすための道具です。APIが正しければ画面も正しいはずだ、見た目が崩れていなければ機能も大丈夫だ、そうした思い込みを一つずつ外していく。その積み重ねが、開発の速度と品質を同時に支えます。

だからこそ、APIテストとビジュアルテストを別々に考えることは、分断ではありません。むしろ、ソフトウェアをより正確に理解するための知的な分業です。正しさはひとつではない。データの正しさと、見た目の正しさと、ユーザーにとっての正しさは、同じ方向を向きながらも別々に守る必要がある。

テストの目的は、完成を証明することではありません。未完成を早く見つけ、どこが未完成なのかを言語化し、修正可能な形で差し出すことです。そう考えると、優れたテストとはチェックリストではなく、プロダクトが変化し続けることを前提にした羅針盤なのです。

Sources

← Back to Library

Hatch New Ideas with Glasp AI 🐣

Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)

Start Hatching 🐣