ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-06-18上級

Antigravity 2.0 の並列エージェントに視覚回帰テストを任せる設計

Antigravity 2.0 の並列オーケストレーションで、メインの実装エージェントとは別にヘッドレスの視覚回帰エージェントを走らせる設計を、動くハーネスと運用上の落とし穴とともにまとめました。

antigravity374agents71visual-regression2testing10playwright3

プレミアム記事

新しい iPhone の解像度を 1 つ足すたびに、どこかの画面でレイアウトが半ピクセルずれていないか不安になります。私が個人開発で運営している壁紙アプリ群は、対応端末が増えるほどスクリーンショットの枚数が増え、最後は目視で一枚ずつ見比べることになっていました。iPhone Air の 420×912、iPhone 17 Pro の 402×874 を追加したとき、グリッドの余白が一箇所だけ狂っているのを公開直前まで見落としていたのです。

本日 6/18、Gemini CLI が Antigravity CLI へ統合され、Antigravity 2.0 の並列オーケストレーションが実運用の前提になりました。公式が挙げる並列実行の例の 3 つ目が「別のエージェントがヘッドレスブラウザで視覚回帰テストを走らせる」というものです。これは、私のように見た目のずれを最後まで目視に頼っていた人間にとって、地味ですが効く話だと感じています。以下では、その視覚回帰エージェントを実際に組むための最小ハーネスと、本番で踏んだ落とし穴を、順を追ってお見せしていきます。

なぜ視覚回帰を「別エージェント」に切り出すのか

視覚回帰テスト(撮ったスクリーンショットを基準画像と比べ、差分が出たら止める)は、実装そのものとは時間軸がずれた作業です。コードを書いている最中に走らせると待ち時間が生まれ、後でまとめて走らせると「どの変更が崩したか」が曖昧になります。

Antigravity 2.0 がもたらした変化は、この検査をメインの実装エージェントから物理的に切り離せることです。あるエージェントがコンポーネントを書き換えている裏で、別のエージェントが前のコミットのベースラインと差分を取り続ける。実装と検査が同じ会話の中で奪い合っていた時間が、並列に流れるようになります。

私はこの分離を、4 つのサイトを並行運用する中で覚えた発想と同じだと考えています。生成を回すエージェントとゲート検証をかけるエージェントを分けておくと、片方が詰まってももう片方が止まりません。視覚回帰も同じで、「見た目の番人」を独立したプロセスに任せておくと、実装の速度を落とさずに安全網だけが常時動きます。

最小構成: ヘッドレスで撮って、基準画像と差分する

まずは並列もエージェントも抜きにして、純粋な視覚回帰の芯だけを作ります。Playwright で複数のビューポートを撮り、pixelmatch で差分ピクセル数を数えるだけの小さなハーネスです。

// vr/capture.mjs — 指定 URL を複数ビューポートで撮影する
import { chromium } from "playwright";
import { mkdir } from "node:fs/promises";
 
// 私のアプリのプロモ用 LP を例に、実機に近い解像度を並べています
const VIEWPORTS = [
  { name: "iphone-air",      width: 420, height: 912 },
  { name: "iphone-17-pro",   width: 402, height: 874 },
  { name: "iphone-16-promax", width: 440, height: 956 },
  { name: "desktop",         width: 1280, height: 800 },
];
 
export async function capture(url, outDir) {
  await mkdir(outDir, { recursive: true });
  const browser = await chromium.launch(); // ヘッドレスがデフォルト
  try {
    for (const vp of VIEWPORTS) {
      const page = await browser.newPage({
        viewport: { width: vp.width, height: vp.height },
        deviceScaleFactor: 2, // Retina 相当で撮る
      });
      await page.goto(url, { waitUntil: "networkidle" });
      await page.screenshot({
        path: `${outDir}/${vp.name}.png`,
        fullPage: true,
      });
      await page.close();
    }
  } finally {
    await browser.close();
  }
}

差分側は、基準画像と新しい画像を同じサイズに揃えてからピクセル比較します。pixelmatch は差分ピクセル数を返すので、全体に対する割合をしきい値で判定します。

// vr/diff.mjs — 基準画像と新画像の差分割合を返す
import { PNG } from "pngjs";
import pixelmatch from "pixelmatch";
import { readFileSync, writeFileSync } from "node:fs";
 
export function diff(baselinePath, currentPath, diffOutPath) {
  const base = PNG.sync.read(readFileSync(baselinePath));
  const cur = PNG.sync.read(readFileSync(currentPath));
 
  // サイズが違う時点で「崩れ」とみなして即失敗させます
  if (base.width !== cur.width || base.height !== cur.height) {
    return { changed: 1.0, reason: "dimension-mismatch" };
  }
 
  const { width, height } = base;
  const out = new PNG({ width, height });
  const mismatched = pixelmatch(
    base.data, cur.data, out.data, width, height,
    { threshold: 0.1, includeAA: false } // includeAA:false がフレーキー対策の肝
  );
  writeFileSync(diffOutPath, PNG.sync.write(out));
 
  const ratio = mismatched / (width * height);
  return { changed: ratio, reason: ratio > 0 ? "pixel-diff" : "identical" };
}

この 2 つを繋ぐだけで、「撮る → 比べる → 差分画像を残す」という回帰検査の最小ループが回ります。ここまでは特別な仕組みは要りません。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
UI の見た目の崩れを目視で見逃していた人が、スクリーンショット差分を自動で止める仕組みを今日から組める
ヘッドレス撮影・ベースライン管理・しきい値調整という視覚回帰の三点を、コピーして動かせるコードで習得できる
Antigravity 2.0 の並列パイプラインに回帰検査エージェントを組み込み、実装の速度を落とさずに見た目の安全網を持てる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Agents & Manager2026-04-16
Antigravity エージェントでテストパイプラインを自動構築する:品質保証を AI に任せる実践設計
Antigravity の AI エージェントを活用して、単体テスト・統合テスト・E2E テストを自動生成・自動実行するパイプラインを本番品質で構築する方法を、実装コードとともに解説します。
Agents & Manager2026-03-17
Antigravity Browser Sub-Agent による E2E テスト自動化
Antigravity の Browser Sub-Agent を活用した E2E テスト・ビジュアルリグレッションテスト・CI/CD 統合の完全実践ガイド。Gemini の視覚能力でブラウザ自動化を次のレベルへ引き上げる。
Agents & Manager2026-06-18
Antigravity 2.0 のエージェントに任せる前に引く、3本の境界線
バックグラウンドエージェントに何を任せ、何を手元に残すか。個人開発の並行運用で実際に引いた3本の境界線と、それをコードに落とすための具体的なパターンをまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →