CLAUDE LABEN
VERSION — 8月10日に v2.1.227 が出ていました。新機能はなく、プラン判定と CI まわりの不具合修正が中心ですAUTO — 8月14日の既定化まで残り2日です。Pro・Max・Team で Claude Code の auto モードが既定で有効になりますCI — claude-code-action で allowed_non_write_users を指定すると GitHub ホストランナー上の Bash が全て失敗していた問題が直りましたBILLING — 期限切れトークンで開始したセッションが加入プランを取り違え、Max 利用者に使用クレジットの有効化を促していた不具合も解消していますSUNSET — 旧 Workbench と実験的プロンプトツール API の廃止は8月17日で、残り5日ですPRICE — Sonnet 5 のプロモ価格 $2/$10 per Mtok は8月31日までで、9月1日から $3/$15 per Mtok になりますVERSION — 8月10日に v2.1.227 が出ていました。新機能はなく、プラン判定と CI まわりの不具合修正が中心ですAUTO — 8月14日の既定化まで残り2日です。Pro・Max・Team で Claude Code の auto モードが既定で有効になりますCI — claude-code-action で allowed_non_write_users を指定すると GitHub ホストランナー上の Bash が全て失敗していた問題が直りましたBILLING — 期限切れトークンで開始したセッションが加入プランを取り違え、Max 利用者に使用クレジットの有効化を促していた不具合も解消していますSUNSET — 旧 Workbench と実験的プロンプトツール API の廃止は8月17日で、残り5日ですPRICE — Sonnet 5 のプロモ価格 $2/$10 per Mtok は8月31日までで、9月1日から $3/$15 per Mtok になります
記事一覧/Claude Code
Claude Code/2026-08-12中級

課金ユーザーに広告が出る不具合を、判定の一元化で止めるまで

広告除去を購入した方に広告が出てしまう。原因はフラグの不足ではなく、判定が散っていることでした。Claude Code で広告呼び出しを棚卸しし、単一の判定関数へ畳むまでの実装記録です。

Claude Code217Android7アプリ内課金2広告状態管理

プレミアム記事

広告除去を購入してくださった方から「まだ広告が出ます」という連絡をいただく朝ほど、気の重いものはありません。

クラッシュなら「直しました」で済みます。けれど購入いただいた対価がその場で返っていないという不具合は、返金対応で数字が戻っても、その方の中に残った印象までは戻せません。個人開発で壁紙アプリを長く運用してきて、私がいちばん神経を使っているのはこの一点です。

そして原因を追いかけると、たいてい「フラグが足りなかった」のではありませんでした。フラグは足りていて、それを見に行かない場所が一つ残っていた、というのが実際のところです。

広告を消す入口は、性質の違うものが複数ある

私のアプリでは、広告が消える経路が最初から一本ではありませんでした。

経路状態の持ち主有効期間失われ方
広告除去の購入BillingManager(Google Play Billing)恒久返金・アカウント変更
リワード広告の視聴AdFreeManager(ローカル保存)一定時間時間経過
購入の復元BillingManager(起動時の照会)恒久照会が返るまで未確定

この三つは、寿命も、真偽が確定するタイミングも違います。購入は起動直後にはまだ分かりません。リワードは時計の話です。復元は非同期で後から真になります。

にもかかわらず、画面側のコードはどれも同じ顔をした条件式になります。

// 初期の実装。画面ごとに少しずつ違う条件式が生えていた
if (!billingManager.isAdFree) {
    interstitialAd.show(this)
}

リワードを足したときに、この行は次のように育ちます。

if (!billingManager.isAdFree && !adFreeManager.isRewardAdFree) {
    interstitialAd.show(this)
}

条件が一つ増えるだけなので、その場では正しい修正に見えます。問題は、この形の行がアプリ内に何箇所あるかを誰も把握していないことです。壁紙一覧、詳細、カテゴリ、設定からの戻り、そして戻るボタンの終了フロー。追加したときに一つ書き漏らせば、そこだけが古い判定のまま生き残ります。

探すべきものは、フラグ名ではなく広告 SDK の呼び出し口

棚卸しを始めたとき、私は最初 isAdFree を grep しました。これは半分しか当たりません。書き漏らした箇所には、そもそも isAdFree が書かれていないからです。探すべきは条件式ではなく、広告を出す側の呼び出しでした。

Claude Code にはこの棚卸しをそのまま任せられます。私が使っているのは、探索対象を広告 SDK 側に固定した指示です。

claude -p '広告の表示につながる呼び出しを全て列挙してください。
探索の起点は条件式ではなく、以下の呼び出し側とします。
 
- InterstitialAd.show / RewardedAd.show / RewardedInterstitialAd.show
- AdView.loadAd / AdLoader.loadAd
- AdView をレイアウトXMLに直接置いている箇所
 
各ヒットについて次の3列で表にしてください。
1) ファイルと行番号
2) その呼び出しの手前にある広告非表示の判定(無ければ「なし」と明記)
3) 判定が参照している状態(billing / reward / 両方 / なし)
 
推測は書かず、コード上に存在するものだけを挙げてください。'

ここで効くのは3列目です。「判定あり」で終わらせると、片方の状態しか見ていない箇所が合格してしまいます。私の場合、抜けていたのは条件式が無い箇所ではなく、購入だけを見てリワードを見ていない箇所と、レイアウト XML に直接置かれたバナーでした。XML のバナーはコードを grep しても永遠に出てきません。

判定が「なし」と「片方だけ」の二種類に分かれて出てくると、直す順番も決まります。私は次の順で片づけました。

  1. 判定が「なし」の行を塞ぐ。購入いただいた方に広告が出ている箇所なので、ここが最優先です
  2. 判定が「片方だけ」の行を直す。リワードを視聴した方に広告が出ている箇所で、優先度は次点になります
  3. レイアウト XML のバナーを目視で拾う。コードの grep には載らないため、最後に人の目で確認します

なお私のアプリは AdMob を使っており、バナーとインタースティシャル、リワードが同じ画面に混在します。AdMob のように読み込みと表示が分かれている SDK では、loadAd の側も対象に含めないと、広告は出ないのにリクエストだけ飛び続ける状態が残ります。本番運用ではこれが通信量として静かに積み上がるので、表示側と読み込み側の両方を同じ判定に載せることを推奨します。

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

この記事の続きを読む

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

この記事で得られること
購入とリワード視聴で別々に持っていた広告非表示の状態を、1つの判定関数へ統合できるようになる
課金いただいた方に広告が出るという、最も信頼を損なう種類の不具合を、実装の段階で予防できるようになる
広告表示の分岐が複数画面に散らばったコードから、消し忘れの箇所を体系的に洗い出せるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Claude Code2026-05-24
Claude Code で「死蔵 SDK」を計画的に剥がす — 個人開発12年で堆積した非アクティブ依存を安全に棚卸しする運用設計
個人開発12年で iOS/Android の壁紙アプリ4本に堆積した、もう誰も使っていないのに依存だけ残り続けている SDK — それを Claude Code で安全に棚卸しして剥離するパイプラインを、実コードと数値付きで共有します。
Claude Code2026-05-23
壁紙アプリ 4 本の月次コンテンツ更新を Claude Code に任せた 3 ヶ月の所感
Beautiful HD Wallpapers をはじめとする壁紙アプリ 4 本の月次コンテンツ更新を、2026 年 2 月から Claude Code に任せ始めました。新しい壁紙の追加・カテゴリ分類・メタデータ更新を 3 ヶ月続けてみて気づいた、AI に任せられる範囲と、自分の手を残しておきたい範囲の境界について書きます。
Claude Code2026-05-18
Play Store 段階公開を Claude Code で自動監視する — v2.1.0 クラッシュ対応から学んだリリース戦略
Android アプリの段階公開(5%→100%)を Claude Code で自動監視するシステムの実装記録。Beautiful HD Wallpapers v2.1.0 での RecyclerView クラッシュ対応を例に、Crash-free Users 99.7% 基準の自動判定・ロールバック判断ロジックを詳解します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →