AIコーディングエージェントはコードを書けるが、生成したUIが実際に正しく表示されているかを「見る」ことができない。ProofShotは、この「目の見えないエージェント」問題を解決するオープンソースCLIツールだ。ブラウザテストを動画で記録し、スクリーンショットとエラーログをバンドルして、人間が数秒でレビューできる証跡を自動生成する。

ProofShot Viewer -- video playback with interactive timeline

この記事ではUIデザインに特化して解説します。デザインシステム・UI生成全般は デザインシステムとは?仕組み・構成要素・有名事例をエンジニア向けに完全解説 をご覧ください。

AIエージェントの「盲目」問題とProofShotの立ち位置

AIコーディングエージェントの最大の弱点は、UIの視覚的な検証ができないことだ。エージェントがログインフォームを実装しても、ボタンの位置がずれていたり、CSSが崩れていたり、コンソールにエラーが出ていたりしても気づけない。生成されたコードがコンパイルを通ってテストもグリーンなのに、画面を開くと真っ白——そんな経験をした開発者は多いはずだ。

従来、この検証は人間が手動でブラウザを開いて目視確認するしかなかった。レビュー工程ごとにローカルでサーバーを立ち上げ、ブラウザで数回クリックし、問題があればエージェントに戻して再度確認する。この往復が重くなるほどAIエージェントの価値は相対的に下がる。

ProofShotはこの工程を自動化する「検証レイヤー」だ。ブラウザを制御するのではなく、ブラウザ制御ツールの上に立ち、動画記録・エラー検出・GitHub PR連携までを1本のCLIに束ねる。

「AIエージェントは目が見えない。だから人間がレビューで目になる。その目になる工程を、もう自動化してしまおう」——ProofShotのREADMEはこの思想を明確に打ち出している。

主要な機能を整理するとこうなる。

  • 動画記録: セッション全体をWebM形式で録画
  • スクリーンショット: 重要な操作ステップごとにキャプチャ
  • エラー検出: コンソールエラーとサーバーログを10以上の言語で自動検出(JavaScript、Python、Ruby、Go、Java、Rust、PHP、C#など)
  • インタラクティブビューア: タイムライン付きのHTMLビューアで動画とログを同期再生
  • PRアップロード: proofshot pr コマンドでGitHub PRにインラインコメントとして証跡を投稿

Claude Codeの全機能まとめで紹介されているようなAIコーディングエージェントと組み合わせることで、コード生成から検証までのループを閉じることができる。

この章のポイント
AIエージェントは「書ける」が「見えない」——UI崩れやエラーに気づけない
ProofShotはブラウザ制御ではなく「検証レイヤー」として機能する
動画・スクショ・エラーログ・PRアップロードを1本のCLIに統合

ProofShotのインストール手順とセットアップ

ProofShotはNode.jsベースのCLIツールで、npmでグローバルインストールする。導入コマンドは2行で完結する。

npm install -g proofshot
proofshot install

最初のコマンドでCLIとagent-browser(ヘッドレスChromium含む)がインストールされる。2番目のコマンドで使用中のAIコーディングツールを自動検出し、ユーザーレベルでスキルをインストールする。

スキルはユーザーレベル(~/.claude/skills/ など)にインストールされるため、プロジェクトごとの設定は不要だ。一度インストールすれば全プロジェクトで利用できる。

proofshot install は以下のエージェントに対応している。

エージェント インストール先
Claude Code ~/.claude/skills/proofshot/SKILL.md
Cursor ~/.cursor/rules/proofshot.mdc
Codex (OpenAI) ~/.codex/skills/proofshot/SKILL.md
OpenCode ~/.config/opencode/skills/proofshot/SKILL.md
Gemini CLI ~/.gemini/GEMINI.md に追記
Windsurf ~/.codeium/windsurf/memories/global_rules.md に追記

インストールオプションも柔軟に指定できる。CIで特定エージェントのみ有効化したい場合や、既存スキルを上書き更新したい場合に役立つ。

proofshot install --only claude    # Claude Codeのみにインストール
proofshot install --skip cursor    # Cursorをスキップ
proofshot install --force          # 既存のインストールを上書き

導入時のチェックリスト

  1. Node.js 18以上がインストールされているか確認する
  2. proofshot install 後に ~/.claude/skills/proofshot/SKILL.md が生成されているか確認する
  3. 初回実行で npx playwright install chromium 相当のバイナリが落ちてくるため、CIでは事前キャッシュを検討する
この章のポイント
npm 1行でインストール、proofshot install でスキル自動配布
Claude Code / Cursor / Codex / Gemini / Windsurf に対応
スキルはユーザーレベルで共有、プロジェクト設定不要

3ステップの検証ワークフロー:start / test / stop

ProofShotの検証は startteststop の3段階で動作する。この分離が重要で、録画と操作と終了処理を明確に切り離すことで、AIエージェントがどのフェーズにいるかを迷わず判断できるようになっている。

# 1. start -- ブラウザを起動し、録画とサーバーログのキャプチャを開始
proofshot start --run "npm run dev" --port 3000 --description "Login form verification"

# 2. test -- AIエージェントがブラウザを操作
agent-browser snapshot -i                                    # インタラクティブ要素を確認
agent-browser open http://localhost:3000/login               # ページに遷移
agent-browser fill @e2 "[email protected]"                    # フォームに入力
agent-browser click @e5                                      # ボタンをクリック
agent-browser screenshot ./proofshot-artifacts/step-login.png # スクリーンショットを撮影

# 3. stop -- 動画+スクリーンショット+エラーを証跡としてバンドル
proofshot stop

スキルファイルがこのワークフローをエージェントに教えるため、ユーザーは「proofshot でこの機能を検証して」と指示するだけでよい。エージェントが自動的に start → test → stop の流れを実行する。

graph LR A["proofshot start
ブラウザ起動
録画開始"] --> B["agent-browser
ページ遷移
フォーム操作
スクリーンショット"] B --> C["proofshot stop
録画停止
証跡バンドル"] C --> D["proofshot-artifacts/
動画 + 画像
+ エラーログ"] D --> E{"レビュー方法"} E -->|ローカル| F["viewer.html
インタラクティブ再生"] E -->|GitHub| G["proofshot pr
PRにコメント投稿"]

各セッションで生成されるアーティファクトは ./proofshot-artifacts/ にタイムスタンプ付きフォルダとして保存される。AIエージェントは録画そのものに触れず、ProofShotが裏でffmpeg相当の録画とログ集約を担う。

ファイル 内容
session.webm セッション全体の動画記録
viewer.html スクラブバー・タイムライン・ログタブ付きスタンドアロンビューア
SUMMARY.md エラー・スクリーンショット・動画のMarkdownレポート
step-*.png 重要なステップのスクリーンショット
session-log.json タイムスタンプ・要素データ付きアクションタイムライン
server.log 開発サーバーのstdout/stderr(--run 使用時)
console-output.log ブラウザコンソール出力

SUMMARY.md を読めば動画を再生しなくてもエラー有無が分かる」——これがProofShotのレビュー高速化の核心だ。人間は概要だけ見て、疑わしい箇所だけ動画のタイムスタンプに飛べばよい。

この章のポイント
start / test / stop の3フェーズで録画・操作・バンドルを分離
エージェントはスキル経由でワークフローを自動実行
SUMMARY.md がレビュー高速化の入口になる

Playwright MCPとの比較:ProofShotの差別化ポイント

「Playwright MCPやChrome DevTools MCPがあるのに、なぜProofShotが必要なのか?」という疑問は当然だ。結論から言うと、それらはブラウザの制御ツールであり、ProofShotは検証ワークフローツールだ。役割が異なる。

ProofShotはagent-browserの上に位置する検証レイヤーだ。セッション管理、サーバーログキャプチャ、エラー検出、動画トリミング、タイムスタンプ同期、インタラクティブビューア、PRアップロードワークフローを追加する。ブラウザの基本操作はagent-browserが担当している。

機能 Playwright MCP DevTools MCP agent-browser ProofShot
ブラウザ制御 ○(agent-browser経由)
動画記録 -
スクリーンショット
コンソールエラー収集 -
サーバーログキャプチャ - - -
10以上の言語のエラー検出 - - -
タイムスタンプ付きアクションタイムライン - - -
インタラクティブHTMLビューア - - -
動画同期ログ再生 - - -
PRコメントアップロード - - -
ビジュアル差分(proofshot diff - - -
エージェント非依存のスキルインストール - - -

使い分けの指針はシンプルだ。

  • ライブデバッグやDOM検査 → Playwright MCPまたはDevTools MCP
  • 証跡のバンドルとPRレビュー → ProofShot
  • ブラウザ操作のみ(録画・検証を自分で組みたい) → agent-browser単体
graph TD A["AIエージェント"] --> B{"用途"} B -->|"操作・デバッグ"| C["Playwright MCP
DevTools MCP"] B -->|"素の操作API"| D["agent-browser"] B -->|"証跡バンドル
PRレビュー"| E["ProofShot"] E --> D E --> F["viewer.html
+ SUMMARY.md"] E --> G["GitHub PR
コメント"]

OpenHandsのようなAIコーディングエージェントと組み合わせれば、コード生成 → ブラウザ検証 → PRアップロードまでを自動化できる。Browser Useとも役割が補完的で、エージェント側のブラウザ操作ライブラリがProofShotの入力源になる構図だ。

この章のポイント
Playwright MCP / DevTools MCP は「制御」、ProofShotは「検証」
ProofShotはagent-browserの上に立つ証跡バンドル層
サーバーログキャプチャとPRコメント連携が大きな差分

主要コマンドリファレンスと実践的な使い方

ProofShotのCLIコマンドを用途別に整理する。よく使うのは start / stop / pr の3つだが、execdiff を知っておくと回帰テストやセッションログ連携で効く。

proofshot start – 検証セッションの開始

proofshot start                                        # サーバーが既に起動している場合
proofshot start --run "npm run dev" --port 3000         # サーバーを起動してログもキャプチャ
proofshot start --description "Verify checkout flow"    # レポートに説明を追加
proofshot start --url http://localhost:3000/login       # 特定のURLを開く
proofshot start --headed                                # ブラウザを表示(デバッグ用)
proofshot start --force                                 # 前回クラッシュの残りセッションを上書き

--run オプションが特に便利だ。開発サーバーの起動とログキャプチャを同時に行えるため、サーバー側のエラーも見逃さない。Next.jsのビルドエラーやRails側の500エラーもまとめて server.log に集約される。

proofshot stop / exec / diff / pr / clean

# セッション停止
proofshot stop              # セッション停止してブラウザを閉じる
proofshot stop --no-close   # セッション停止、ブラウザは開いたまま

# agent-browserへのパススルー(セッションログに自動記録)
proofshot exec click @e3
proofshot exec screenshot step-checkout.png

# ビジュアル差分(回帰テスト用)
proofshot diff --baseline ./previous-artifacts

# PRへのアップロード
proofshot pr              # 現在のブランチからPRを自動検出
proofshot pr 42           # 特定のPR番号を指定
proofshot pr --dry-run    # Markdownをプレビュー(投稿はしない)

# アーティファクトの削除
proofshot clean

proofshot pr は特筆すべき機能だ。現在のブランチで記録した全セッションを検出し、スクリーンショットと動画をアップロードし、フォーマット済みコメントをPRに投稿する。ffmpeg がインストールされていれば、WebM動画をMP4に自動変換するため、GitHubのコメント欄でそのまま再生できる。

コマンド 主な用途 副作用
start 録画とログ収集の開始 ブラウザ起動・サーバー起動
stop 証跡のバンドル WebM生成・SUMMARY.md生成
exec agent-browserコマンドをログ付きで実行 セッションログに追記
diff 前回との差分比較 画像差分レポート生成
pr PR本文にインライン投稿 GitHub APIコール
clean アーティファクト削除 ディスク容量の解放

ForgeCodeのようなターミナルベースのAIコーディングツールでも、シェルコマンドが実行できる環境であればProofShotを同様に利用できる。

CI組み込みのコツ
GitHub Actions で使う場合は --headed を外し、xvfb-run なしでヘッドレス録画が通る。
proofshot pr --dry-run をまず実行してコメント本文を確認し、問題なければ GITHUB_TOKEN を渡して投稿に切り替える運用が安全だ。
この章のポイント
最小セットは start / stop / pr
--run でサーバーエラーまでキャプチャ、exec でログ一元化
proofshot pr --dry-run でCIへの組み込みを段階的に進められる

サンプルアプリで試すProofShotの検証フロー

ProofShotのリポジトリには、実際に動作を確認できるサンプルアプリが3種類用意されている。ドキュメントを読むより、手元で1回動かしてみるのが最短ルートだ。

git clone https://github.com/AmElmo/proofshot.git
cd proofshot
npm install && npm run build && npm link

# サンプルアプリのセットアップ
cd test/fixtures/sample-app
npm install

サンプルアプリのディレクトリでAIエージェントを開き、以下のようにプロンプトを入力する。

Verify the sample app with proofshot. Start on the homepage, check the hero section, navigate to the Dashboard and check the metrics, then go to Settings and update the profile name. Screenshot each page.

エージェントはスキルの指示に従って自動的に start → test → stop を実行する。生成されたアーティファクトを viewer.html で開けば、動画とログが同期再生される。

エージェントなしで自動テストスクリプトを実行することも可能だ。ProofShot自体の挙動確認やCI検証には、こちらの方法が手早い。

bash test-proofshot.sh

test/fixtures/ には3種類のサンプルアプリが含まれている。

サンプルアプリ UIパターン 向いている検証
sample-app SaaSダッシュボード フォーム入力・ナビゲーション・動的メトリクス表示
todo-app カンバンボード ドラッグ&ドロップ・状態遷移
chat-app チャットインターフェース リアルタイム更新・スクロール

実行後、proofshot-artifacts/ ディレクトリに動画・スクリーンショット・レポートが生成される。READMEにはGIFでデモが貼られているため、期待される出力との比較も容易だ。

この章のポイント
公式リポジトリのサンプル3種で挙動をすぐ確認できる
エージェント経由と bash test-proofshot.sh の両方を試せる
カンバン・チャット・ダッシュボードの典型UIパターンで動作確認可能

導入前後のレビューフロー比較

ProofShotの導入により、AIエージェントが生成したUIの検証フローが根本的に変わる。特にリモートチームやオープンソースプロジェクトでは、PRレビュアーがローカル環境を構築せずに検証結果を確認できる点が大きい。

「手元で動かす前提」から「PRを開くだけで動画で確認できる」に変わる。この一歩が、AIエージェントによるPRを量産できるかどうかの分岐点になる。

観点 導入前 導入後(ProofShot)
サーバー起動 人間がローカルで起動 エージェントが --run で起動
ブラウザ確認 人間が目視クリック エージェントが自動操作
エラー検出 人間がコンソールを開く 10+言語のエラーを自動抽出
レビュー場所 ローカル環境 GitHub PRのコメント欄
再現性 手順を人間が記憶 session-log.json に全操作記録

導入前のレビューフロー:

  1. エージェントがコードを生成
  2. 人間がローカルでサーバーを起動
  3. ブラウザで手動操作して目視確認
  4. 問題があればエージェントに修正を依頼
  5. 再度手動で確認(繰り返し)

ProofShot導入後のレビューフロー:

  1. エージェントがコードを生成
  2. エージェントが proofshot start → テスト → proofshot stop を自動実行
  3. 人間は viewer.html または PRコメントで動画とログを確認
  4. 問題があればエージェントに修正を依頼(証跡付き)

手動でブラウザを開いて操作する必要がなくなり、レビュー時間が大幅に短縮される。特にリモートワークやCI/CD環境では、PRに証跡がインラインで付与されることで、レビュアーがローカル環境を構築せずに検証結果を確認できる点が大きなメリットだ。

「レビュアーがリポジトリをcloneしなくても、PRコメントの動画を再生するだけで検証が終わる」——この状態がProofShotの目指すゴールだ。

この章のポイント
ローカル起動前提のレビューから、PR上で完結するレビューに変わる
エラー検出とセッションログで「再現性のあるレビュー」を担保
AIエージェント製PRの流量を増やすための前提インフラになる

ライセンス・拡張性・今後の位置づけ

ProofShotはベンダーロックインやクラウド依存がない。すべてローカルで完結し、MITライセンスで提供されている。エラー検出パターンの追加も src/utils/error-patterns.ts を編集するだけで対応可能だ。

エラーパターンを拡張すると、Next.jsの特殊なビルドエラーや、Rails/Djangoの例外スタックトレースも自動検出対象にできる。以下はエラーパターン拡張のミニマルな例だ。

// src/utils/error-patterns.ts (抜粋)
export const ERROR_PATTERNS = [
  { name: "JavaScript",  pattern: /Uncaught (?:Type|Reference|Syntax)Error/ },
  { name: "Python",      pattern: /Traceback \(most recent call last\)/ },
  { name: "Ruby",        pattern: /\(.*Error\).*\n.*from/m },
  { name: "Next.js RSC", pattern: /Error: React .*? Server Components/ },
  // 独自のエラーパターンを追加
  { name: "MyApp",       pattern: /\[MyApp\] fatal:/ },
];
観点 ProofShotの方針
ライセンス MIT
データ保存先 すべてローカル(クラウド送信なし)
拡張性 エラーパターン・スキルファイルを編集可能
依存 Node.js / agent-browser / 任意のffmpeg
対応エージェント Claude Code / Cursor / Codex / Gemini CLI / OpenCode / Windsurf

AIコーディングエージェントの活用が広がるなか、生成されたコードの品質検証は今後さらに重要になる。単に「動くコード」を書くだけでなく、「動いている証拠」をPRに残すことが標準的な期待値になりつつある。ProofShotは、その検証プロセスを自動化・標準化する実用的な選択肢だ。

組織導入時の観点
MITライセンスのため社内配布の法的ハードルは低い。
機密プロジェクトでもクラウド送信がないため、オンプレ開発環境にもそのまま載る。
拡張が必要になればフォークして error-patterns.ts を上書きするのが現実的だ。
この章のポイント
MITライセンス・完全ローカル完結でオンプレや機密案件にも載せやすい
エラーパターンは TypeScript 1ファイルで拡張できる
「動いている証拠」をPRに残す運用が標準化しつつある

📌 まとめ

ProofShotは、AIコーディングエージェントの「目が見えない」という根本課題に、動画とログのバンドルで答えを出したCLIツールだ。Playwright MCPやDevTools MCPのような制御ツールの代替ではなく、その上に重ねる検証レイヤーとして設計されている点が重要で、既存のエージェント環境を壊さずに導入できる。

  • 1コマンドで導入npm install -g proofshotproofshot install だけ
  • 3ステップワークフロー:start / test / stop でエージェントが自動実行
  • PRレビューの革命proofshot pr で動画・ログ・エラーをPRコメントに投稿
  • ローカル完結:MITライセンス・クラウド送信なし・オンプレ可
  • 拡張しやすい:エラーパターンは TypeScript 1ファイルで編集可能

AIエージェントによるコード生成を本番運用に乗せたい開発者は、まずサンプルアプリで1回録画を回してみるとよい。viewer.html を開いた瞬間に、このツールが何を解決しているかが体感できる。

参照ソース