2014年から個人でiOS/Androidアプリを開発してきた中で、AIコーディングツールが普及してから「生成されたコードがビルドエラーになる」というケースが増えました。
原因を調べると、大半が Deprecated API の提案 でした。
AdMobの収益化コードをAntigravityに生成させたとき、すでに廃止された古いクラスがさらっと提案されたことがあります。当時は気づかずに実装してしまい、審査前のビルドで初めてエラーが出ました。そのデバッグに費やした時間が、この記事を書くきっかけになっています。
Antigravityは膨大なコードベースを学習していますが、そのトレーニングデータには古いバージョンのコードも含まれています。最新のSDKや言語仕様に追いついていない提案をしてくることは、今でも起こります。この対処法を4ステップで整理しました。
なぜDeprecated APIが提案されるのか
Antigravityが古いAPIを提案する主な理由は3つあります。
学習データのラグ
AIモデルの学習データには時間的な遅れがあります。SwiftやKotlinのSDKは年数回のペースで更新されますが、モデルがそれを完全に反映するには一定の期間が必要です。特にiOS SDKはWWDCのたびに大きな変更が入るため、直後の数ヶ月間は注意が必要です。
プロジェクトコンテキストの欠如
Antigravityが現在のプロジェクトで使用しているSDKバージョンを把握していない場合、汎用的なコードを提案します。Package.swiftやPodfile、build.gradleを読み込ませていないと、「このプロジェクトはどのバージョンを対象にしているか」が伝わりません。
古いサンプルコードの参照
Stack Overflowや古いブログ記事を参考にしたコードが、そのままモデルに取り込まれているケースもあります。承認数が多い古い回答でも、当然deprecated扱いになっていることがあります。
Step 1 — エラーログで「deprecated」を特定する
まずビルドログを確認します。Xcodeであれば「Issues Navigator」にdeprecation warningが一覧表示されます。Android Studioであれば、Gradle出力の中に This API has been deprecated というメッセージが出ます。
// ❌ Antigravityが提案してきた古いコード(例)
// GADInterstitial は iOS 14.0 で廃止済み
let interstitial = GADInterstitial(adUnitID: "ca-app-pub-xxxx")
interstitial.load(GADRequest())
// ✅ 現在の正しい実装(GADInterstitialAdを使う)
GADInterstitialAd.load(
withAdUnitID: "ca-app-pub-xxxx",
request: GADRequest()
) { ad, error in
if let error = error {
print("広告の読み込みに失敗しました: \(error)")
return
}
self.interstitialAd = ad
}エラーメッセージに含まれる廃止されたクラス名・メソッド名をメモしておきます。これがStep 2でAntigravityに質問するときに使います。
Step 2 — AntigravityのチャットでDeprecation情報を確認する
Antigravityのチャット欄に、次のような形式で質問します。
以下のエラーが出ています:
'GADInterstitial' was deprecated in iOS 14.0
iOS 17以降で動作する最新の代替実装を、Swift Concurrencyを使って書いてください。
このプロジェクトのMinimum Deploymentは iOS 16 です。
ポイントは「廃止されたAPIの名前」「使用中のOSバージョン」「現在のターゲットバージョン」を明示することです。この3点が揃っていれば、Antigravityは公式ドキュメントに近い最新の実装を返してくれます。
特定のバージョン以降に追加されたAPIが必要な場合は、@available(iOS 16, *) などのavailabilityチェックも含めた形で依頼すると、安全なコードが得られます。
Step 3 — INSTRUCTIONS.mdで「禁止API」をプロジェクトに記録する
個別対応だけでは同じ問題が繰り返されます。プロジェクトルートに INSTRUCTIONS.md(または .antigravity/instructions.md)を作成し、以下のようなルールを追記します。
# コーディングルール
## SDK バージョン指定
- iOS minimum target: 16.0
- Android minimum SDK: 26 (Android 8.0)
- Swift: 5.10 以上
## 禁止 API(Deprecated のため使用しないこと)
- `GADInterstitial` → `GADInterstitialAd` を使用
- `UIWebView` → `WKWebView` を使用
- `NSUserNotificationCenter` → `UNUserNotificationCenter` を使用
## 推奨パターン
- 非同期処理は async/await を優先(completion handler 非推奨)
- AdMob の初期化は `GADMobileAds.sharedInstance().start()` を使用このファイルをコンテキストに読み込ませておくことで、同じカテゴリの廃止APIを提案されにくくなります。プロンプトの組み立て方についてはAntigravity プロンプトエンジニアリング入門も参考になります。
Step 4 — 定期的なDeprecationチェックをビルドタスクに組み込む
Xcodeでは -warnings-as-errors フラグを設定してdeprecation warningをエラーに昇格させられます。ただしいきなり全プロジェクトに適用すると大量のエラーが出るため、段階的な導入が現実的です。
# Xcodeプロジェクトでdeprecation warningを一覧化する(CI環境などで使用)
xcodebuild -scheme MyApp -configuration Debug build \
2>&1 | grep "deprecated" | sort | uniqAndroid Gradleの場合は build.gradle に以下を追記することで、lint警告として記録できます。
android {
lintOptions {
// deprecated API の使用を警告として記録
warning 'Deprecation'
// CI 環境でエラーとして扱う場合は以下をアンコメント
// error 'Deprecation'
}
}Antigravityのタスク機能を使って、週次でビルドログのdeprecation警告をチェックする仕組みを入れておくと、問題が積み重なる前に気づけます。タスクの自動化についてはAntigravity の tasks.json と launch.json でワンキー開発環境を仕上げるで詳しく紹介しています。
予防が最も効果的
Antigravityが古いAPIを提案してきても、焦ってコードをそのまま使わないことが大切です。
10年以上個人開発を続けてきた感覚として、「問題が起きてから直す」より「起きにくくする仕組みを作る」方が明確に楽です。INSTRUCTIONS.mdへのNG API明記は、一度やっておくと同じ問題がほぼ再発しなくなります。
まず、プロジェクトの INSTRUCTIONS.md に現在使用禁止のAPIを1行追記するところから始めてみてください。