← ブログ一覧

Astro 7、AIエージェントを検知しJSON化

Astro 7.0とCloudflareアダプタ14系のpeerDependenciesを実際に調べたら、うちの構成(Astro 6.3.7)を上げる条件が判明。devサーバーのAIエージェント検知機能も実機で検証した。


この記事の結論: Astro 7.0のdevサーバーはAIコーディングエージェントを自動検知してJSON出力に切り替える。うちのブログの依存(@astrojs/cloudflare 13.5.4)を最新の14系に上げるにはAstro 7が必須(peerDependencies実測)と分かったので、次のメンテナンス計画に組み込む。

リナ社長(高校生社長のやり手ギャル)× タクヤ(入社3年目)— 今回は、2026年6月22日公開のAstro 7.0を実機で触って、うちの構成への影響まで調べた回。(登場人物について


タクヤ「社長、Astro 7.0のリリースノート読んでたんですけど、devサーバーが『AIエージェントが実行してるかどうか自動判定して出力形式を変える』って書いてあって、最初は何言ってるのか分からなかったんです。なので実際に自分の手元で動かしてみました」

リナ社長「え、それエンジンかコンパイラの話じゃなくて出力形式の話なの?そっちの方が地味に気になる」

タクヤ「はい。今回は仕様を眺めるだけじゃなくて、実際にコマンドを叩いた結果と、うちのブログの依存関係を照らし合わせたところまで持ってきました」


Astro 7.0で何が変わったか

Astro 7.0は2026年6月22日に公開されたメジャーアップデートで、公式ブログ(astro.build/blog/astro-7)によると大きな変更点は3つある。

  • コンパイラのRust化: これまで一部JavaScriptで動いていたコンパイル処理をRustに置き換え
  • Vite 8 / Rolldownへの統合: バンドラ基盤がVite 8ベースになり、Rust製バンドラのRolldownと統合
  • ビルド高速化: 公式ブログによると、上記の変更でビルドが15〜61%高速化したとされる

実際にサンドボックスでnpm viewコマンドを叩いて確認したところ、現時点のバージョンは以下の通りだった。

$ npm view astro version
7.0.6

$ npm view vite version
8.1.3

$ npm view @astrojs/cloudflare version
14.1.1

ビルド速度の「15〜61%」という数値は公式ブログ側の発表値であり、こちらで実測した数値ではない。この記事では出典を明示した上で参考情報として扱う。

タクヤ「Rust化とVite8統合は分かるんですけど、ビルド速度の数字、社内のCI/CDに当てはめていいものか迷いますね。プロジェクトの規模やキャッシュ状況で変わるはずなので」

リナ社長「そこは正直でいいと思う。でも方向性としては速くなる話でしょ?もし本当に効くなら、デプロイ待ち時間が減る=CI/CDのコスト削減に直結する話だから、ビジネス的にはかなり嬉しいニュースなんだよね」

タクヤ「僕はそこ、まだ楽観しすぎるのは早いと思ってます。公式の数値は公式のベンチマーク環境での話なので、うちのブログみたいな中小規模のAstroプロジェクトでどこまで再現するかは、実際にビルドしてみるまで分からないです」

リナ社長「あー、たしかに。数字だけ見て『はい解決』って言うのは早計か。じゃあ実測はまた今度の宿題ってことで」


一番刺さった機能:devサーバーがAIエージェントを検知してJSON化する

今回の変更の中で一番実務に効くと感じたのが、astro dev実行時のAIエージェント検知機能だ。Astroのソースを確認すると、am-i-vibingという外部パッケージを使って、今の実行環境がAIコーディングエージェント経由かどうかを判定している。

node_modules/astro/dist/cli/dev/index.js の該当箇所を抜粋すると、こうなっていた。

import { detectAgenticEnvironment } from "am-i-vibing";
function isRunByAgent() {
  try {
    return detectAgenticEnvironment().type === "agent";
  } catch {
    return false;
  }
}
...
const agentDetected = !process.env.ASTRO_DEV_BACKGROUND && isRunByAgent();
if (agentDetected) {
  flags.json = true;
}

isRunByAgent()がtrueになるとflags.json = trueが自動でセットされ、通常の色付きバナー表示の代わりにJSON1行だけが出力される仕組みだ。ASTRO_DEV_BACKGROUNDという環境変数で挙動を上書きできる余地も残されている。

実はこの記事自体、Claude Code(AIコーディングエージェント)経由で書かれているセッションの中で、実際にこの機能を検証した。

$ npx astro dev --port 4321
{"message":"Dev server running at http://localhost:4321 (pid 11250)\n  Stop:   astro dev stop\n  Status: astro dev status\n  Logs:   astro dev logs","label":"SKIP_FORMAT","level":"info"}

$ npx astro dev status
{"message":"Dev server running at http://localhost:4321 (pid 11250, uptime 7s, background)","label":"SKIP_FORMAT","level":"info"}

$ npx astro dev stop
{"message":"Stopped dev server (pid 11250).","label":"SKIP_FORMAT","level":"info"}

想定していた通常のカラフルなバナーは出ず、JSON1行だけが返ってきた。しかも単に出力形式が変わっただけでなく、devサーバー自体がバックグラウンドのデーモンプロセスとして起動する挙動になっており、astro dev statusで状態確認、astro dev stopで停止という、新しいライフサイクル管理コマンドが増えていた。

タクヤ「これ、地味な機能に見えて実装は結構考えられてるなと思いました。AIエージェントがdevサーバーを立ち上げると、対話式のターミナルUIを人間が見る前提のツールだと、色付きバナーやカーソル制御のエスケープシーケンスがログに混ざって、エージェント側のパース処理が崩れることがあるんです。それをam-i-vibingで自動検知してJSON化するのは、地味だけど実務で効く設計だと思います」

リナ社長「へー、でもぶっちゃけそんな盛り上がる話?『出力がJSONになりました』だけでしょ」

タクヤ「そこだけ見るとそうなんですが、devサーバーが自分でバックグラウンド化してstatus/stopのコマンドまで生えたのが本質です。今までAIエージェントに『devサーバー立ち上げて動作確認して』と頼むと、フォアグラウンドで動き続けるプロセスをどう扱うかが地味に面倒でした。バックグラウンドデーモン化とライフサイクルコマンドがセットになったことで、エージェント側の運用が素直になります」

リナ社長「なるほど、単発の見た目の変化じゃなくて、AIに開発を任せる前提でツール自体の設計を変えてきたってことね。それは分かった」


jinbei-labのAstro 6.3.7 / Cloudflareアダプタ13.5.4はどうなる

ここからが実利の話だ。うちのブログのpackage.jsonを確認すると、現在の依存は次の通り。

"astro": "^6.3.7",
"@astrojs/cloudflare": "^13.5.4",

最新の@astrojs/cloudflareのpeerDependenciesを実際に調べたところ、次の結果になった。

$ npm view @astrojs/cloudflare peerDependencies
{ astro: '^7.0.0', wrangler: '^4.83.0' }

つまり@astrojs/cloudflareを14系に上げるには、Astro本体も7系である必要がある。今のAstro 6.3.7のままアダプタだけ14系へ上げると、peerDependenciesの不一致でインストール時に警告、あるいはビルド時に想定外の挙動を招くおそれがある。

リナ社長「で、それウチら(読者含めて)の何が変わるの?CloudflareアダプタってPages側の設定みたいなもんでしょ、影響範囲を教えて」

タクヤ「はい。実利の話で言うと、うちのブログが次に@astrojs/cloudflareをアップデートするタイミングでは、アダプタ単体のマイナーアップデートでは済まず、Astro本体を6系から7系へ上げる作業とセットで計画する必要がある、ということです。アダプタだけ気軽に上げると壊れる可能性があるので、次のメンテナンス作業の見積もりに『Astro 7同時アップグレード』を最初から入れておくべきです」

リナ社長「あー、それは実務的にありがたい情報。うちの場合、今すぐ上げる緊急性はないけど、次回メンテするときに『あれ、アダプタ上げたら壊れた』ってならずに済むのはでかい。読者的にも、AstroとCloudflare Pagesの組み合わせを使ってる人は、アダプタとAstro本体のバージョンをセットで見る癖をつけといた方がいいってことだね」

タクヤ「そうですね。あと、devサーバーのAIエージェント検知の話も含めて、AIコーディングエージェント経由でAstroプロジェクトを触る機会が増えている人ほど、Astro 7の変化を体感しやすいと思います」


まとめ

Astro 7.0は、公式発表ベースで見るとRustコンパイラ化・Vite 8/Rolldown統合によるビルド高速化が主眼のリリースだが、実際に手を動かして一番印象に残ったのはam-i-vibingによるAIエージェント検知とJSON出力自動切替、そしてdevサーバーのバックグラウンドデーモン化・ライフサイクルコマンド追加だった。ビルド高速化の数値(15〜61%)は公式ブログの発表値であり、こちらで実測したものではない点は明記しておく。

持ち帰り: @astrojs/cloudflareを14系に上げるにはAstro 7への同時アップグレードが必須(peerDependencies実測)。アダプタだけを気軽に上げるとハマるので、次のメンテナンス時期を計画的に判断する材料にする。

リナ社長「読んでる人も、Astro+Cloudflareで動かしてるプロジェクトあったら、アダプタとAstro本体のバージョンの組み合わせ、今すぐ確認して大丈夫なやつになってる?」


参考

  • Astro 7 — Astro公式ブログ、Astro 7.0発表。Rustコンパイラ化・Vite 8/Rolldown統合・ビルド高速化・AIエージェント検知機能に言及
  • withastro/astro Releases — GitHub Releases、バージョン詳細

コメント