Skip to main content

あらゆるデバイスでのレスポンシブテスト:効率的なアプローチ

レスポンシブレイアウトの手動テストは勝ち目のない戦いです。ユーザーにとって重要なすべてのビューポートでビジュアルテストを自動化する方法を紹介します。

レスポンシブレイアウトを表示する3つのデバイスシルエット

ビューポートの爆発的増加

2015年にはデスクトップとモバイルでテストしていました。2020年にはタブレットが加わりました。2026年、ユーザーは折りたたみスマートフォン、カーダッシュボード、スマート冷蔵庫、VRヘッドセットを使用しています。考慮すべきビューポートの組み合わせは爆発的に増えています。

これらすべてのビューポートでの手動テストは不可能です。リリースごとに数十台の物理デバイスと数時間の時間が必要になります。答えは自動レスポンシブビジュアルテストです。

ビューポートマトリクスの定義

実際のトラフィックデータの分析から始めましょう。ほとんどのアプリには、ユーザーの95%以上をカバーする5〜8のビューポート範囲があります:

export const viewports = {
  mobileSm: { width: 320, height: 568 },   // iPhone SE
  mobileMd: { width: 375, height: 812 },   // iPhone 13
  mobileLg: { width: 428, height: 926 },   // iPhone 14 Pro Max
  tablet:   { width: 768, height: 1024 },  // iPad
  laptop:   { width: 1366, height: 768 },  // 一般的なノートPC
  desktop:  { width: 1536, height: 864 },  // Full HDスケーリング
  wide:     { width: 1920, height: 1080 }, // Full HD
}

すべてのピクセル幅をテストする必要はありません。レイアウトが実際に変化するブレークポイントと、トラフィックの大部分を占めるデバイスサイズに焦点を当てましょう。

マルチビューポートキャプチャの自動化

Playwrightを使えば、複数のビューポートでスクリーンショットをキャプチャすることが容易です:

import { test, expect } from '@playwright/test'

const criticalViewports = [
  { name: 'mobile', width: 375, height: 812 },
  { name: 'tablet', width: 768, height: 1024 },
  { name: 'desktop', width: 1440, height: 900 },
]

for (const vp of criticalViewports) {
  test(`pricing page at ${vp.name}`, async ({ page }) => {
    await page.setViewportSize(vp)
    await page.goto('/pricing')
    await page.waitForLoadState('networkidle')
    await expect(page).toHaveScreenshot(
      `pricing-${vp.name}.png`,
      { fullPage: true }
    )
  })
}

ビューポートサイズ以上のテスト

ビューポート幅はレスポンシブテストの一つの側面にすぎません。以下も考慮してください:

オリエンテーション

モバイルとタブレットのビューポートで、ポートレートとランドスケープの両方をテストしましょう。ポートレートで完璧に動作するレイアウトが、ランドスケープでは完全に壊れる可能性があります。

ピクセル密度

Retinaディスプレイ(2x、3x)は、1xでは見えないレンダリングの問題を露呈する可能性があります。ユーザーが実際に使用しているデバイスピクセル比でスクリーンショットをキャプチャしましょう。

動的テキストサイズ

ブラウザのフォントサイズを拡大したり、システムのアクセシビリティ設定を使用するユーザーは、固定テキストサイズを前提としたレイアウトを壊す可能性があります。スケーリングされたフォントサイズでテストしましょう。

ダークモード

ダークモードは単なる色の入れ替えではありません。コントラストの問題、見えないボーダー、暗い背景で間違って見える画像を露呈する可能性があります。

レスポンシブ障害への対応

レスポンシブテストが失敗した場合、差分画像はどのビューポートで何が壊れたかを正確に示します。一般的なパターン:

コンテンツのオーバーフロー

デスクトップ幅で収まるテキストが、モバイル幅ではコンテナからオーバーフローする。修正方法は通常、overflow-hiddentext-ellipsisの追加、またはフォントサイズの調整です。

スタッキング順序

デスクトップでは横に並ぶ要素が、モバイルでは垂直にスタックされる際、順序が間違っている場合があります。CSSのorderを使用するか、論理的なモバイルフローのためにHTMLを再構造化しましょう。

非表示要素

display: nonehiddenクラスで特定のブレークポイントで非表示にされる要素。表示/非表示のブレークポイントがデザイン仕様に一致していることを確認してください。

タッチターゲットサイズ

マウス操作に適切なサイズのボタンやリンクが、タッチ操作には小さすぎる場合があります。レスポンシブビジュアルテストは、推奨される44x44pxのタッチターゲット以下に縮小する要素をフラグできます。

レスポンシブテストのROI

レスポンシブビジュアルテストを自動化したチームは通常、以下を報告しています:

  • 本番に到達するレスポンシブレイアウトバグの60〜80%削減
  • レスポンシブデザインレビューのQAサイクルが50%高速化
  • 双方が同じスクリーンショットを見るためデザイナーと開発者の連携が向上

自動化への投資は最初の四半期内に元が取れます。特に多様なデバイスからアプリにアクセスするグローバルなオーディエンスがいる場合はなおさらです。

ScanUで始める

これらのテクニックを本番環境で適用するには、注力するページセットから始めて、意味のあるUI変更のたびにベースラインスクリーンショット比較を実行しましょう。プランは料金、実装の詳細はFAQ、プロダクトの機能は機能で確認できます。