CLAUDE LABEN
2.1.273 — 接続まわりがまとめて整理されました。LLM ゲートウェイ向けの 5 ヘッダが opt-in で追加され、MCP が再接続を諦めたときにも通知が出ます09/29 — 廃止予定表にある claude-sonnet-4-5 の日付は残り 12 日ですが、これは「最も早い場合」の暫定日です。現在も Active で、公開モデルの廃止は最低 60 日前に告知されますMCP — セッションを畳まずに繋ぎ直したい、という要望が続いています。切断の通知は出るようになりましたが、再接続そのものはまだ手元の操作に委ねられていますNEW — 定期タスクが動く日と動かない日があったのは、フォルダを1つしか指定していなかったからでしたWINDOWS — Cowork が最初のタスクから失敗するときは、原因を探す前に開発者モードとセットアップの状態を確認しますHANDOFF — 会話が重くなった原稿を次のチャットへ渡すとき、要約に必ず残しておく項目を先に 3 つ決めておきます2.1.273 — 接続まわりがまとめて整理されました。LLM ゲートウェイ向けの 5 ヘッダが opt-in で追加され、MCP が再接続を諦めたときにも通知が出ます09/29 — 廃止予定表にある claude-sonnet-4-5 の日付は残り 12 日ですが、これは「最も早い場合」の暫定日です。現在も Active で、公開モデルの廃止は最低 60 日前に告知されますMCP — セッションを畳まずに繋ぎ直したい、という要望が続いています。切断の通知は出るようになりましたが、再接続そのものはまだ手元の操作に委ねられていますNEW — 定期タスクが動く日と動かない日があったのは、フォルダを1つしか指定していなかったからでしたWINDOWS — Cowork が最初のタスクから失敗するときは、原因を探す前に開発者モードとセットアップの状態を確認しますHANDOFF — 会話が重くなった原稿を次のチャットへ渡すとき、要約に必ず残しておく項目を先に 3 つ決めておきます
記事一覧/Claude Code
Claude Code/2026-08-12中級

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

広告除去を購入した方に広告が出てしまう不具合の原因は、フラグの不足ではなく判定の分散でした。Claude Codeで広告SDKの呼び出し口を棚卸しし、単一の純粋な判定関数へ畳み込むまでの実装記録です。期限判定を端末時計に預けない工夫や、消し忘れを構造で防ぐ設計も紹介します。

Claude Code254Android7アプリ内課金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/月 または ¥2,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駆動開発
※ アフィリエイトリンクを含みます