テストと互換性 2026

2026年前端避坑対照表:
リモート Mac 上 Vitest/jsdom と実 Safari/WebKit

2026年3月27日 Web テスト 約9分

Vitestjsdom が緑でも Safari が壊れるのはテスト不足ではなく、WebKit との互換契約が未整理なことが多いです。イベント・フォント・メディア・ストレージの対照、リモート Mac を使う三段階検証と CI の指針をまとめました。併読:Safari 互換テスト(Playwright)実機・シミュレータ・クラウド比較ブログ一覧

01 差異リスクの概要

jsdom はブラウザではなく Node 向け DOM 再現。Vitest はその限界(本物のレイアウト・合成なし)を引きずります。SafariWebKit は ITP や GPU 描画など Chromium と異なります。

単体緑は「必要だが十分ではない」。ロジックは jsdom で、スクロール・passive・メディアポリシー・localStorage パーティション・フォントの微差は WebKit 側で確認が要ります。リモート Mac で全員に実機を揃えずゲートできます。ヘルプ料金購入 はログイン不要で閲覧可能です。

02 対照表(重要 API/レンダリング)

設計・テスト計画用。既定 environment: 'jsdom' 想定(happy-dom は別評価)。

領域 jsdom/Vitest(一般的) Safari/WebKit(リモート Mac) テスト上の含意
ポインタ/タッチ 合成のみ。passive/ヒットテストは弱い ネイティブ+ iOS ジェスチャ Safari でホイール・preventDefault を手動確認
フォーカス/キーボード Tab 順など単純化 focus-visible、Shadow DOM 等 フォーム・モーダルをキーボードのみでスモーク
レイアウト/CSS 実ピクセルレイアウトなし flex/grid、100dvh、backdrop-filter ヒーロー・sticky は目視または VRT
フォント/テキスト メトリクスが macOS/iOS と不一致になりやすい Core Text、可変フォント 省略・改行・CJK を実 Safari で確認
メディア モック中心 HLS、自動再生、低電力モード ステージングで再生を1経路通す
ストレージ localStorage がメモリ寄り、クォータなし ITP パーティション、追い出し サイトデータ削除後のログイン/キャッシュを確認
タイマー rAF 近似 実フレーム、Visibility API フレークするアニメは WebKit E2E へ
fetch/Cookie MSW 等でモック CORS、SameSite、サードパーティ 本番オリジンまたは Playwright で結合
チケットに jsdom 可WebKit 必須 とラベルを付け、緑 CI と本番互換を分離する。

03 ローカル vs 実機検証フロー

リリース前3ステップ(実行可能な順序)を固定します。

  • 1. ローカル/Linux CI: vitest run+カバレッジ。レイアウト/メディア系はファイル分割や skip で jsdom 偽陽性を避ける。
  • 2. リモート Mac・Safari: ステージングで P0(認証・課金・メディア等)を手動。Web Inspector FAQWebKit デバッグ手順
  • 3. 自動化: 同一 Mac で Playwright webkit、トレース保存。ビルド〜Safari 検証の連続手順
リモート Mac ミニチェック

Safari メジャーを計測値に合わせる・拡張オフ・動画はウィンドウ/全画面の両方・サイトデータ削除で ITP 相当も一度試す。

04 CI パラメータの提案

PR は jsdom、main/夜間は リモート Mac で WebKit、と分割するのが扱いやすいです。

観点 推奨設定 理由
Vitest ワーカー --pool=threads、共有 Mac は maxWorkers を控えめ Playwright と CPU を奪い合わない
タイムアウト E2E だけ長め、単体は短め WebKit 起動・メディア待ちにばらつき
Playwright macOS のみ playwright install webkit Linux WebKit≠Safari と表示ラベル化
成果物 失敗時は trace+動画 E2E トリアージ と連携可

事前準備:Node/npm・Safari チェックリストテストフロー避坑リスト

05 FAQ

単体だけで Safari は不要? いいえ。jsdom はイベント・ストレージ・メディア・レイアウトを保証しません。単体→Mac 上 Safari/WebKit→P0 ステージングの三段が現実的です。

なぜリモート Mac? 本物の Safari は Apple 系 OS 限定。ユーザーに近い WebKit/GPU を Linux 単体では再現しにくいからです。

Playwright webkit=Safari? 近いが同一ではない。自動化+ Safari.app でクリティカル UX を補完。

最小コスト構成は? 毎 push jsdom、定期 WebKit(専用 Mac)、リリースは赤ジョブまたはチェックリスト未完ならブロック。

まとめ

対照表で機能を分類し、Vitest は速さ、リリースはリモート Mac の Safari/WebKit トレースで止める。ラベル化すれば「CI 緑=Safari 安心」と混同しません。

次の一手(ログイン不要):ヘルプ料金購入 で WebKit 用 Mac を確保。ブログ一覧 もご利用ください。

Safari 準拠の CI

Vitest と WebKit ゲート用にリモート Mac をレンタル

Apple Silicon で実 Safari/Playwright WebKit。購入料金ヘルプ は登録なしで閲覧可。関連:Safari 互換テストブログ一覧

Vitest WebKit リモート Mac
M4 を今すぐレンタル