◉ANTIGRAVITY LABEN
記事一覧/Agents & Manager
◈ Agents & Manager/2026-05-17中級

AntigravityのAgents機能をAndroidリリースフローに組み込んだ話——どこまで任せられて、どこで手を戻すか

壁紙アプリをAndroid v2.1.0へ上げる際、Antigravity Agentsをリリースフローに組み込んだ3ヶ月の実体験。クラッシュ診断の当たり外れ、段階公開のGo/No-Go判定、文脈設計のチェックリストまで、委譲の境界線を実コードとともに整理します。

antigravity464agents100android29indie-developerapp-dev52

✦ プレミアム記事

壁紙アプリのリリース作業は、地味に時間がかかります。

個人開発で長く壁紙アプリを運営してきた今でも、この実感は変わりません。バージョン番号を上げてPlay Consoleに申請するだけなら数分で済みますが、その前後にある「クラッシュログを読む」「修正の優先度を判断する」「段階公開中の指標を監視する」という一連の作業は、コードを書くのとは別の種類の集中力を消費します。

2026年春、Beautiful HD WallpapersのAndroid版をv2.0.0からv2.1.0に上げるタイミングで、AntigravityのAgents機能をこのリリースフローに本格的に組み込んでみました。3ヶ月の試みで得た「ここは任せられる」「ここは自分で判断しないと危ない」という感覚を、実際のコードと指標とともに、できるだけ具体的に書いておきます。

クラッシュ診断:Agentが正確に当てた場合

v2.0.0リリース直後から、Firebase CrashlyticsにRecyclerViewのIndexOutOfBoundsExceptionが積み上がり始めました。28日間で50ユーザー以上に影響が出ていました。

この診断をAntigravityのAgentに最初に任せたのは、ある種の実験でした。スタックトレースとAdapterの実装コード、そしてnotifyDataSetChangedの呼び出し箇所をすべてAgentに渡し「何が起きているか教えてほしい」と伝えました。

返ってきた診断は正確でした。非同期でリストを更新していた箇所で、UIスレッドからの操作とバックグラウンドの更新が競合していることを、コールスタックの流れから特定してくれました。さらに「防御的コピーを使えばよい」という修正方針まで提示してくれました。

// Before: 共有参照をそのまま渡していた
fun updateList(newItems: List<WallpaperItem>) {
    items = newItems  // 呼び出し元のリストを直接保持
    notifyDataSetChanged()
}
 
// After: 防御的コピーで参照を切る
fun updateList(newItems: List<WallpaperItem>) {
    items = ArrayList(newItems)  // コピーを作って参照を分離
    notifyDataSetChanged()
}

この1行の変更でv2.1.0では該当クラッシュがゼロになりました。スタックトレースを読み解いてパターンマッチする作業は、Agentが得意とする領域だと感じました。既知の落とし穴——RecyclerViewの更新競合のような——は、学習データのどこかに必ず類例があります。だからこそ、こちらが十分な材料を渡せば診断は速く、正確になります。

なぜここでAgentが当たったのか。後から振り返ると、渡した3点セット(スタックトレース・Adapter実装・更新呼び出し箇所)が、この不具合を再構成するのに必要な情報を過不足なく含んでいたからでした。問題が「一つのクラスの内部」で完結していたことも大きい。文脈が閉じているほど、Agentの推論は安定します。

クラッシュ診断:Agentが見落とした場合

一方で、最初の診断をAgentが外したケースもありました。

Android 6.0.1端末(API 23)でアプリが起動しない、という報告が数件来ていました。ログにはjava.lang.NoClassDefFoundError: Failed resolution of: Ljava/util/function/Supplierと出ていました。

Agentに相談すると「Glide 5.0.5との互換性問題の可能性がある」という方向に答えを出そうとしました。半分正しいのですが、根本原因はAGP 9.xとJava 8ストリームAPIのdesugaring設定が有効になっていないことでした。

// app/build.gradle — この設定が抜けていた
compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    isCoreLibraryDesugaringEnabled = true  // ← これ
}
 
dependencies {
    coreLibraryDesugaring("com.android.tools.desugar_jdk_libs:2.1.4")
}

この設定を追加してからAPI 23端末のクラッシュも消えました。Agentが正確に診断できなかった理由を後から考えると、「build.gradleの全体構成」「使用しているAGPバージョン」「ターゲットとする最低APIレベル」という3つの文脈が同時に必要だったのに、私がスタックトレースだけを渡していたからでした。

先ほどのRecyclerViewのケースと違い、この不具合は「ビルド設定」「依存ライブラリ」「実行端末のAPIレベル」という複数のレイヤーにまたがっていました。原因が一箇所に閉じていない問題では、Agentは手元の材料の範囲でもっともらしい仮説を立てます。その仮説がGlideに向いたのは、渡された情報だけを見れば自然な推論だったのです。

Agentに渡す文脈をどう設計するかは、こちら側の責任です。

✦

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

この記事の続きを読む

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

この記事で得られること
✦クラッシュ診断でAgentが当てる場面と外す場面を、実際のスタックトレースと修正コードで対比
✦段階公開のGo/No-GoをCrash-free 99.7%などの閾値で判定させる対話設計と、工程ごとの委譲マトリクス
✦Agentに渡す文脈の設計チェックリスト——診断精度は問いの組み立てで決まる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◈ Agents & Manager2026-10-13
「いつもの感覚」で決めている判断を、エージェントに渡せる文章に直す手順
頭の中だけにある判断基準を、Antigravity のエージェントが同じように使える文章へ直す手順です。過去の事例で試し、ずれた箇所だけ直す小さな検証つきです。
◈ Agents & Manager2026-09-04
エージェントの実効スコープを書き出しておくと、既定が変わった日に気づけます
Antigravity 1.1.25 で、Markdown 定義のカスタムエージェントが既定で周囲のスキル・ルール・サブエージェントを継承するようになりました。絞ったつもりのエージェントが更新後に広がっていないかを、実効スコープの JSON スナップショットと差分で確かめる手順を書き残します。
◈ Agents & Manager2026-08-21
Antigravity CLI の継承設定は description の重なりを見てから決めています
CLI 1.1.14 で markdown 定義エージェントの継承が inheritCustomizations 一本にまとまりました。手元の 47 本のスキルを実際に棚卸しして、継承を有効にするかどうかをコンテキスト量ではなく description の重なりで決めるまでの記録です。