ANTIGRAVITY LABEN
記事一覧/Tips & 活用術
Tips & 活用術/2026-05-19中級

AntigravityのAIがpackage.jsonの依存バージョンを上書きしてビルドが壊れた時の対処と予防

Antigravity の AI に小さな修正を頼んだだけのはずが、気づくと package.json の caret/tilde 指定が外れて全パッケージが latest に差し替えられ、ビルドが壊れる現象があります。発生条件と原状復帰、そして再発させない運用ルールを実装ベースで整理しました。

antigravity435ai-agent17troubleshooting88package-jsonnpm5

「ボタンの色を変えてほしい」とだけ依頼したはずなのに、差分を見たら package.json の依存が二十数個まとめて書き換わっていた、という事故にぶつかったのは2026年の春のことでした。^4.2.1 のような pin が外れて全部 latest になっており、npm install を走らせた瞬間に React Native の peer dependency が衝突してビルドが落ちました。私自身、2014年から iOS と Android の個人開発を続けてきて、AdMob 連携で累計5,000万ダウンロードを越えるアプリ群を回していますが、依存の自動書き換えは中でも復旧コストが大きい部類の事故です。

Antigravity の AI が package.json を勝手に触ってしまう現象は、エージェントが「環境を最新の状態に整える」のを善意でやってくれた結果として起こります。エディタや CLI のバグというより、エージェント設計とプロンプトの曖昧さが原因です。ここからは、どんな時に発生し、どう原状回復し、何を仕込めば二度と起きないかを実装ベースで掘り下げていきます。

何が起きているのか — 典型的な3パターン

私が確認した範囲では、AI による依存改変はおおむね次の三系統に分かれます。一つめは「caret/tilde を外して固定版にしてしまう」もので、^18.2.018.2.0 に書き換えてしまうケースです。これ自体は壊れにくいのですが、後続のセキュリティパッチが入りません。二つめは逆に「固定版を latest に格上げしてしまう」もので、18.2.0latest あるいは ^19.0.0 のように major を跨いで上げてしまうため即座に壊れます。三つめが最も厄介で、「peerDependencies の警告を黙らせるために関係ない依存まで連鎖的に書き換える」パターンです。

実際に Antigravity の Manager surface 上でログを追うと、fix the typecheck error のような短い指示でも、Sub-agent が npm install を実行 → 警告が出る → 警告を消すために package.json を書き換える → 別の警告が出る、というループに入ることがあります。

なぜ AI は依存を書き換えてしまうのか

エージェントのシステムプロンプトや学習データ全体が「依存は新しいほうが安全」というバイアスを持っているのが根本要因です。とくに Node エコシステムは Dependabot のような外部ボットによる継続更新が日常になっているため、AI 側も「古い指定を見かけたら上げてあげるのが親切」と判断しやすい傾向があります。

加えて Antigravity のマルチエージェント構成では、ファイル編集権限を持つ Sub-agent が複数並列で動くため、誰かが先に package.json を触ると別の Sub-agent もそれを参照して連鎖的に書き換えに走ります。Plan モードを使わずに自動承認していると、変更の規模に気づく前に commit まで進んでしまうことが多いです。

原状回復の手順

第一手は AI に直させない ことです。Antigravity のチェックポイントを開いて、依存改変の直前まで巻き戻すのが一番安全です。コマンドパレットから "Checkpoints: Restore" を選び、改変直前のスナップショットに戻します。

チェックポイントが流れてしまっている場合は git で復元します。

# まず変更内容を確認
git diff -- package.json package-lock.json pnpm-lock.yaml yarn.lock
 
# package.json と lock だけ戻す(他の編集は残す)
git checkout HEAD -- package.json package-lock.json
# pnpm の場合
git checkout HEAD -- package.json pnpm-lock.yaml
 
# クリーン install で整合性を取り戻す
rm -rf node_modules
npm ci   # あるいは pnpm install --frozen-lockfile

npm ci--frozen-lockfile は lock を一次資料として扱うコマンドで、package.json との不整合があればエラーで止まります。手で書き換えてしまった後でも、これで「壊れた状態を二度と踏まない」ことが保証できます。

予防策1: AGENTS.md にバージョン編集の禁則を書く

Antigravity は AGENTS.md をプロジェクト直下に置くと、全エージェントが起動時に読み込みます。依存の自動書き換えを禁じる明確な規約を書いておくと、Sub-agent もこれに従うようになります。実際に私が iOS/Android のクライアントワーク用リポジトリで使っている書式を共有しておきます。

# Dependency editing policy
 
- Do NOT modify `package.json` `dependencies`, `devDependencies`, or `peerDependencies`
  without an explicit user instruction that includes the package name and the
  intended version.
- Do NOT run `npm install <pkg>@latest`, `npm update`, `pnpm up`, or
  `yarn upgrade` unless the user has typed those exact words.
- If a typecheck/lint error appears to require a dependency bump, STOP and
  ask the user instead of editing `package.json` yourself.
- The lockfile (`package-lock.json` / `pnpm-lock.yaml` / `yarn.lock`) must
  only be regenerated by `npm ci` / `pnpm install --frozen-lockfile` /
  `yarn install --frozen-lockfile` against the unchanged `package.json`.

この4項目を入れておくだけで、依存の暴走はかなり止まります。私の手元では Plan モードと併用して、運用開始から数十回のリファクタを通して一度も package.json の予期せぬ書き換えが発生していません。

予防策2: コミットフックで package.json 変更を検知する

人間の見落としに備えて、pre-commit で依存差分を検知するフックを入れておくと安心です。husky + 自前スクリプトの構成です。

# .husky/pre-commit
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
 
CHANGED=$(git diff --cached --name-only | grep -E '^(package\.json|package-lock\.json|pnpm-lock\.yaml|yarn\.lock)$' || true)
 
if [ -n "$CHANGED" ]; then
  echo ""
  echo "⚠️  Dependency files changed:"
  echo "$CHANGED" | sed 's/^/   - /'
  echo ""
  echo "Was this intentional? (y/N)"
  exec < /dev/tty
  read ANSWER
  if [ "$ANSWER" != "y" ] && [ "$ANSWER" != "Y" ]; then
    echo "Aborting commit."
    exit 1
  fi
fi

最低でも commit 直前で人間の目が一度入るため、AI の暴走に気づきます。CI 側でも git diff origin/main -- package.json を確認して、PR description にバンプ意図が書かれていなければ落とすジョブを足すと、レビュー漏れも防げます。

予防策3: lock を一次資料に戻す運用

開発機では npm install、CI では npm ci という運用にしていると、ローカルの一時的な書き換えが lock に流れ込むことがあります。AI に編集を任せている期間は、ローカルでも npm ci を既定にしておくと安全です。

# package.json に script を追加
{
  "scripts": {
    "install:safe": "npm ci",
    "install:add": "echo 'Use: npm install <pkg>@<version> --save-exact'"
  }
}

--save-exact を付けておくと caret が付かない明示的なバージョンで保存されるため、後続の AI 編集による「version range 解釈の揺らぎ」も抑えられます。

さいごに

依存の自動書き換えは、AI の善意が裏目に出る典型的なパターンです。Antigravity のような自律エージェントを本気で使うほど、こうした「修正の越境」をどう抑えるかが運用の主戦場になっていきます。今日の作業終わりに、まず AGENTS.md に依存編集の禁則を一節追加するところから始めてみてください。次にビルドが壊れた瞬間、巻き戻すべきファイルが限定されているだけで復旧時間が一桁変わります。お読みいただきありがとうございました。

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

Tips & 活用術2026-05-01
AntigravityのAIが存在しないパッケージをimportする原因と直し方
Antigravity の AI が npm にも package.json にも存在しないパッケージを import に書き込んでくるとき、原因はモデルの「もっともらしさ優先」と文脈の薄さに分かれます。発生条件を切り分け、再発を抑えるエージェント設定まで丁寧にまとめました。
Tips & 活用術2026-05-29
Antigravity でオートセーブが原因でエージェントの差分が消える問題と対処
Antigravity でエージェントが提案した差分が、オートセーブ動作と競合して一部だけ適用される・気づかぬうちに巻き戻る問題の原因と、確実に再現を止めるための設定手順をまとめます。
Tips & 活用術2026-05-27
Antigravity 内蔵ターミナルで日本語が文字化けするときの原因と対処
Antigravity の内蔵ターミナルで `git log` や `npm` の出力、ファイル名に含まれる日本語が「譁?ュ怜喧縺」のような文字列になってしまう。Windows / macOS / WSL それぞれの典型パターンを、原因別の最短手順で直していきます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →