Go back

next-dev-loop はフロントの監視ではない

Posted on:

エージェント向け手順書のカタログ skills.shnext-dev-loop を見つけました。最初は、フロント実装を監視してエラーを拾ってくれる仕組みだと思いました。自分のブログ redamoon.net に入れるか調べて、入れないと判断しました。理由は単純です。これはアプリに入れるライブラリではありません。コーディングエージェント向けの手順書でした。

最初に思っていたこと

見た目の印象は、開発中の画面を見て、落ちたところを直してくれる道具でした。Playwright MCP(AIエージェントからブラウザ操作できる仕組み)で QA させる発想にも近いです。半分は当たっていました。外していたのは対象です。ユーザー向けアプリの例外処理でも、本番の監視 SaaS でもありません。動かす相手はコーディングエージェントです。

Vercel が Next.js 16.3 向けに出した公式スキルです。中身は「編集したあと、型が通ったか」ではなく「動いている画面で本当に動くか」を確認する手順です。ドキュメント知識を教えるスキルではありません。Next.js 16.3 では、その手の知識は AGENTS.md 経由でパッケージに同梱されます。残っているのは作業手順のほうです。

実際に何をするか

エージェントは、同じアプリを2つの視点で突き合わせます。

視点 何を見るか
/_next/mcp(Next.js 側) ルート、RSC(React Server Components)、Server Actions、サーバーログ、コンパイルエラー
agent-browser(ブラウザ側) 実 Chrome の DOM、console、network、React ツリー、Web Vitals

確認する失敗は4種類あります。

  1. コンパイルできるか(Turbopack の get_compilation_issues
  2. 実行時エラーがないか(サーバーとブラウザの両方)
  3. 意図どおり動くか(クリック、遷移、表示)
  4. React として正しいか(余分な再レンダー、server/client 境界、Suspense)

入れ方は次のとおりです。

npx skills add vercel/next.js --skill next-dev-loop
npm i -g agent-browser@latest

エージェントへの指示例はこうなります。

After every edit, verify the page still works at runtime using the next-dev-loop Skill.

セッションでは、実ブラウザを開きます。次に /_next/mcp の生存を確認し、ルート一覧を取ります。今の画面を描画しているファイルだけを探し、編集後に上記4観点で検証します。ログインが必要なら、人が操作してから続行します。

自動で例外を握って直してくれる仕組みではありません。エージェントに「編集したら必ず実行確認しろ」と教えるものです。

前提が硬い

スキル側が作業を止める条件があります。足りないとソースを grep して代替しません。

  • Next.js 16.3 以上
  • Turbopack(webpack は拒否)
  • agent-browser 0.31.1 以上
  • next dev が起動していること

Next.js 未満、Pages Router、webpack のまま、では動きません。フレームワーク非依存の「ブラウザで確認する道具」ではありません。

公式の置き場は AI coding agents ガイドNext.js 16.3 の AI 改善 にあります。スキル本体は vercel/next.js の SKILL.md です。

自分の置き場で判定した

入れるかどうかは、リポジトリのスタックで決まります。3箇所を見ました。

置き場 スタック 判定
Obsidian Vault Markdown と textlint 入れない。アプリではない
redamoon.net Astro 7 と Cloudflare Workers 入れない。/_next/mcp がない
Next.js のアプリ 16.3 以上なら候補 条件を満たせば入れる

家計簿アプリのような Next.js リポジトリなら、エージェントに UI を書かせる前提で候補になります。このブログには入れません。

ブログの中身を開けて確認した

package.jsonnext はありません。astro^7.0.0、アダプタは @astrojs/cloudflare です。中身は2プロダクトです。

  • サイト本体 redamoon-sitepnpm devhttp://127.0.0.1:4321
  • scrap-api。Hono、D1、R2。pnpm scrap-api:dev:8787

記事は src/content/log/ に128本あります。本文は Astro 標準 Markdown ではなく zenn-markdown-html で描画しています。配信は Cloudflare Workers です。ルートの netlify.toml は現行の本番経路ではありません。

静的ブログだけでは終わっていません。ページの一部だけをブラウザで動かす island と、SSR(サーバー側で HTML を出す方式)が混ざっています。

  • 検索は Search.tsxclient:load(あいまい検索の Fuse.js)
  • Scraps の一覧・編集・ログイン・画像アップロードは React
  • 詳細は prerender = false の SSR で、描画だけ client:only="react"
  • 管理は localStorage のトークン。本番は Cloudflare Access

ここは「ビルドが通った」だけでは足りません。画面とログイン状態と API 到達を見ないと壊れます。実行確認が欲しくなる場所ではあります。道具が next-dev-loop ではない、というだけです。

似たことをするなら agent-browser

Astro 側で同じ系統の確認をするなら、フレームワーク非依存の agent-browser になります。next-dev-loop の半分、ブラウザ視点だけを使う形です。検証するなら、検索、Scraps の詳細、ログインから管理画面、の順です。公開したあと、壊れが目立つ場所です。

今回は入れません。必要になったら、そのリポジトリで入れます。スキルは予備として置いておく対象ではありません。スタックと作業手順が噛み合った場所に置きます。

スキルは動詞、リポジトリは名詞

前回、フォルダ管理で決まる、Claude Codeのループ品質 に書いた判定基準があります。Claude が知っておくべきことは名詞なのでファイルに置きます。実行すべきことは動詞なのでスキルにします。

next-dev-loop は動詞です。「編集した画面が実行時に動くか確認する」。それを Astro のリポジトリに置くと、実行できない手順書になります。名詞と動詞が逆転する、と前回書いた話そのものでした。

フロントの監視だと思って開いたリンクが、エージェントの実行確認でした。自分のブログに入れる話ではありませんでした。入れる場所は、Next.js 16.3 で UI をエージェントに書かせているリポジトリです。

参考

https://www.skills.sh/vercel/next.js/next-dev-loop

https://nextjs.org/docs/app/guides/ai-agents

https://nextjs.org/blog/next-16-3-ai-improvements

https://github.com/vercel/next.js/blob/canary/skills/next-dev-loop/SKILL.md

https://www.skills.sh/vercel-labs/agent-browser/agent-browser