第01章:なぜApp Checkが必要?“正規アプリ以外から叩かれる”を体感😱🧿
この章は「実装」より前に、“何が怖いのか”をハッキリさせて、守る優先順位を決める回だよ〜🧠✨ (ここがフワッとしてると、あとで設定がブレて事故りやすい…!)
1) まず結論:App Check は「正規アプリの身分証」🎫✨

App Checkは、Firebaseの各サービス(や自前バックエンド)へのリクエストに “有効なApp Checkトークン” が付いているかをチェックして、正規アプリっぽい通信だけ通すための仕組みだよ🧿 「ユーザーが誰か」じゃなくて「このリクエスト、正規アプリから来てる?」を見てくれる感じ! (Firebase)
ざっくり図解すると👇

- ✅ 正規アプリ(App Checkトークン付き) → Firebase「OKどうぞ」😎
- ❌ それ以外(トークン無し/変なトークン) → Firebase「拒否!」🚫(※強制ONしたら) (Firebase)
2) “何が起きるの?”:正規アプリ以外から叩かれるとツラいこと3つ😱💸

この教材のミニアプリ(メモ+画像+AI整形)で特にヤバいのはここ👇
(A) AIが連打されて請求が伸びる🤖💸
生成AIのAPIは、モロにコストが出やすいんだよね…。 しかもモバイル/Webアプリから直接呼ぶと「無関係なクライアントからの乱用」に弱くなりがちで、だからこそ Firebase AI Logic は App Check導入を早期から強く推奨してるよ。 (Firebase) さらに、AI Logic側には **“1ユーザーあたりRPMのレート制限”**があって、デフォルトは高め(100 RPM)だから、アプリに合わせて下げるのが推奨されてる。 (Firebase)
(B) 画像アップロード連打・巨大ファイルで地獄📷🔥
Cloud Storage は「アップロード」がある時点で狙われやすい😇 大量アップロードや巨大ファイルで、通信・保存コスト・運用負荷がズドン…💥
(C) Firestoreが雑に読まれて・書かれて・燃える🗃️🔥
Cloud Firestore はクエリが便利=悪用されると痛い😭 (もちろん、ここは Security Rulesが主役なんだけど、App Checkがあると “そもそも正規アプリ以外の入口” を狭められるイメージ)
3) App Checkは「Auth」や「Rules」と役割が違う🧩

ここ、超大事だからキャラ分けするね🙂✨
- Firebase Authentication:ユーザーが誰か(ログイン)👤
- Firebase Security Rules:そのユーザーが何をできるか(権限)🛡️ (Firebase)
- App Check:その通信が正規アプリからか(アプリの身分証)🧿 (Firebase)
つまり、App Checkは「Rulesの代わり」じゃなくて、別レイヤーで入口を守る担当って感じだよ〜🔒✨
4) 段階導入が基本:「まずは“測る” → それから“拒否る”】【超重要】📈🎛️

App Checkは、いきなり強制すると「正規ユーザーなのに弾かれる」事故が起きることがある😱 だから公式ははっきりこう言ってる:
- SDKを入れる(トークンが付くようにする)
- 強制する前に、メトリクスを見て“壊れないか”確認する (Firebase)
- いけそうなら、サービスごとに Enforce(強制) をONにする(ONにしたら未検証リクエストは拒否) (Firebase)
メトリクスでは、リクエストがこう分類されるよ👇 (Firebase)
- Verified:✅ 正常(強制後も通る)
- Outdated client:🧓 古いSDKなどでトークン無し
- Unknown origin:👻 SDKっぽくない(盗まれたキー/偽造っぽい等)
- Invalid:💀 無効トークン
この画面を見て「今Enforceして平気?」を判断するのが王道! (Firebase)
5) (雰囲気だけ先見せ)App Checkは “Firebase触る前に初期化” が鉄則🧿⚛️

Web(reCAPTCHA v3)の公式例はこんな感じ👇 「Firebaseサービスにアクセスする前に初期化しようね」って明記されてるよ。 (Firebase)
import { initializeApp } from "firebase/app";
import { initializeAppCheck, ReCaptchaV3Provider } from "firebase/app-check";
const app = initializeApp({
// firebaseConfig(これは“公開される前提”でOKなやつ)
});
initializeAppCheck(app, {
provider: new ReCaptchaV3Provider("YOUR_RECAPTCHA_SITE_KEY"),
isTokenAutoRefreshEnabled: true,
});
(Firebase)
※この章では「実装で詰まらない」ために、**“置き場所はFirebase初期化直後”**ってことだけ覚えればOK🙂✨ (実装は第5章でガッツリやるよ!)
ここから本編:読む → 手を動かす → ミニ課題 → チェック 📚🔥
✅ 読む(この章で覚えるコアだけ)🧠🧿
- App Checkは **“正規アプリの証明(トークン)”**で、Firebaseや自前バックエンドへのアクセスを守る。 (Firebase)
- 強制ONの前に メトリクスで影響を確認し、段階的に進める。 (Firebase)
- Firebase AI Logic は App Checkの早期導入を強く推奨、AIはさらに **レート制限(デフォルト100 RPM)**も見直し推奨。 (Firebase)
✅ 手を動かす:あなたのアプリで「守る対象」を棚卸し📝🧾
やることはシンプル!この章の成果物は “守る対象リスト” だよ✨
手順💡
-
ミニアプリの機能を紙(or メモ)に書く📝
- メモ:Firestore
- 画像:Storage
- AI整形:AI Logic
- 管理者だけ:Functions / 管理画面
-
次に「入口」を書く🚪
- ブラウザ画面から直接叩く?
- ボタン1つで何回でも叩ける?
- 失敗した時にリトライ連打しそう?😇
-
docs/app-check-targets.mdを作って、下のテンプレを埋める🧱✨
テンプレ(コピペOK)👇
-
守る対象①:Firestore(メモ読み書き)
- 乱用されたら:読み取り連打 / 書き込み荒らし / コスト増
- まず守る手段:Rules(必須)+ App Check(入口を狭める)
- 強制ONの優先度:中(まずメトリクス見て判断)
-
守る対象②:Storage(画像アップロード)
- 乱用されたら:巨大ファイル / 連打 / 不正画像
- まず守る手段:Rules(必須)+ App Check
- 強制ONの優先度:高(狙われやすい)
-
守る対象③:AI Logic(AI整形ボタン)
- 乱用されたら:連打で請求💸 / モデル枠圧迫
- まず守る手段:App Check(推奨)+ レート制限(見直す)
- 強制ONの優先度:最優先(お財布を守る🫶)
- レート制限メモ:デフォルト100 RPM → アプリに合わせて下げる検討 (Firebase)
✅ ここでAI活用:棚卸しを爆速にする🚀🤖
「人間が全部読む」のはしんどいので、AIに下準備をやらせよう😆✨
Google Antigravity でやる(おすすめ)🛰️
Antigravityは「ミッション管理+自律エージェント」で、計画→実装→検証まで回しやすい思想だよ。 (Google Codelabs) ミッション例👇
- 「このリポジトリ内でFirebaseを使っている箇所を列挙して、Firestore/Storage/Functions/AIに分類して」
- 「ユーザー操作起点の“連打されやすいボタン”を特定して」
Gemini CLI でやる(軽くて速い)⌨️⚡
Gemini CLIはターミナルに統合できるオープンソースAIエージェントで、コーディングだけじゃなく 詳細リサーチやタスク管理にも使えるよ。 (Google Cloud) お願いの仕方例👇
- 「Firebase SDKのimportを探して、どの機能を使ってるか一覧にして」
- 「“守る対象の棚卸し”テンプレを埋めるのを手伝って」
(ついでに)Firebase Studio は .idx/dev.nix で環境を揃えられて、再現性が上がるのが強み! (Firebase)
✅ ミニ課題:攻撃者目線で「狙われそう」を3つ書く👿📝
棚卸しができたら、次は“狙われ方”を想像するよ!
次の型で3つ👇(短くてOK)
-
狙われ方①:AI整形ボタンの連打
- 被害:請求💸 / モデル枠圧迫
- 入口:UIのボタン(連打できる)
- 対策:App Check+レート制限+UI側のクールダウン
-
狙われ方②:画像アップロード連打
- 被害:容量・転送・運用負荷🔥
- 入口:アップロードフォーム
- 対策:Rules+App Check+サイズ制限(後の章でやる)
-
狙われ方③:メモ読み取り連打
- 被害:読み取り課金 / データ覗き見リスク
- 入口:一覧画面(自動更新)
- 対策:Rules+App Check+取得設計見直し
✅ チェック(この章のゴール達成判定)✅🙂

次の3つ、口で説明できたら勝ち🎉
- App Checkは「Rulesの代わり」ではなく、“正規アプリの証明”のレイヤーだと言える。 (Firebase)
- メトリクス確認 → 段階的にEnforce が基本だと言える。 (Firebase)
- AI機能は App Check推奨+レート制限(デフォルト100 RPM)を見直す発想が出てくる。 (Firebase)
次章予告👀✨
第2章では、App Checkの中身(トークン・TTL・自動更新・段階導入の考え方)を、もう一段だけ具体にして「どこで詰まりやすいか」まで潰すよ⌛🧠
必要なら、この第1章の成果物(docs/app-check-targets.md)を、あなたのミニアプリ仕様に合わせて「完成版テンプレ」に整形して渡すところまで一気にやるよ〜🧩🔥