セキュリティ:Rulesでロール制御(守りの中心)🛡️🔥 21章アウトライン教材
このパートのゴールはシンプルです👇 「うっかり公開😱」を“仕組み”で潰して、安心して開発できる状態にすることです✅✨
まず全体像(この21章でできるようになること)🗺️
- Firestore Security Rules を「APIの門番🚪」として理解する
- 一般ユーザー / 管理者をキレイに分離して守る👮♂️👩💻
- **最小権限(読める/書ける)**を設計できる🔐
- **入力検証(必須・型・文字数など)**をRulesでやれる🧠
- Emulatorで ルールをテストしてから安全に出す🧪🧯 (Firebase)
- AI(Gemini CLI / Antigravity など)で ルール&テスト作成を加速しつつ、人間レビューで堅くする🤖🧑⚖️ (Firebase)
20章構成(各章 10〜20分想定)📚⏱️
各章は「読む→手を動かす→ミニ課題→チェック」で進みます🙂✨ (章タイトルだけじゃなく、中身のアウトラインも入れてあります!)
第1章:なぜRulesが必要?「公開しちゃった😱」事故の構造を知る💥

- 読む📖:DBは“置き場”で、Rulesは“入口の審査”🚪
- 手を動かす🧑💻:わざと危ないルール例を見て「何がヤバいか」言語化
- ミニ課題🎯:「このルールだと誰が何できちゃう?」を3つ書く
- チェック✅:事故パターンを“説明できる”状態になった?
第2章:Firestoreのアクセス経路を整理(Rulesが効く/効かない)🧭

- 読む📖:Web/モバイルSDKのリクエストはRulesで判定される
- 注意⚠️:サーバー用ライブラリ(Admin/Server SDK等)はRulesをバイパスする(別でIAM等が必要) (Firebase)
- 手を動かす🧑💻:同じ“読む/書く”でも「クライアント」と「サーバー」で意味が違う図を作る
- ミニ課題🎯:自分のアプリで「サーバー側でやる処理」を1つ決める
- チェック✅:Rulesが守る範囲を間違えてない?
第3章:Rulesの管理とデプロイの基本(Console vs CLI)🧰

- 読む📖:Rulesは「ローカルで管理→デプロイ」が安全
- 超重要⚠️:CLIデプロイは Consoleの既存ルールを上書きする(運用事故ポイント) (Firebase)
- 手を動かす🧑💻:ルールをファイル管理する場所と流れを整理
- ミニ課題🎯:「編集はローカルが正」ルール運用メモを作る
- チェック✅:チームでも事故りにくい運用になってる?
第4章:Rules言語の基本①(match / allow の読み方)🧩
- 読む📖:matchが対象、allowが許可条件🙂
- 手を動かす🧑💻:最小のルールを書いて“拒否される感覚”を体験
- ミニ課題🎯:コレクション1つに「読みだけOK」を付ける
- チェック✅:allow の条件式が読める?
第5章:Rules言語の基本②(request / resource / 変更差分)🔍
- 読む📖:request(リクエスト内容)と resource(既存データ)
- 手を動かす🧑💻:「create / update / delete」で見える情報が変わるのを確認
- ミニ課題🎯:更新時だけ禁止するルールを1つ作る
- チェック✅:createとupdateを混ぜて事故らない?
第6章:認証チェックの基本(ログインしてない人を入れない)🔐
- 読む📖:「ログイン済み」の判定はここから
- 手を動かす🧑💻:特定コレクションを「ログイン必須」にする
- ミニ課題🎯:未ログイン時の画面UXも一言で決める🙂
- チェック✅:未ログインが1文字も読めない状態?
第7章:ユーザー別データ設計(uid基準の王道)👤📁

- 読む📖:王道は「users/{uid}/…」構造
- 手を動かす🧑💻:自分専用ドキュメントだけ読める/書けるルール
- ミニ課題🎯:プロフィールを「本人だけ更新OK」にする
- チェック✅:他人のuidを指定しても弾ける?
第8章:最小権限① “読む”の制御(get と list の感覚)📖🔒
- 読む📖:「1件取得(get)」と「一覧(list)」は別物
- 手を動かす🧑💻:getだけ許可 / listは禁止 を作って違いを体感
- ミニ課題🎯:公開記事はlist OK、下書きはNG みたいな設計を考える
- チェック✅:一覧が“全部ダダ漏れ”になってない?
第9章:最小権限② “書く”の制御(create/update/deleteを分ける)✍️🧯

- 読む📖:書き込みは危険度が高いので分解がコツ
- 手を動かす🧑💻:createだけOK / updateは禁止 などを作る
- ミニ課題🎯:「削除だけは管理者のみ」ルールにする
- チェック✅:一般ユーザーが消せない?
第10章:入力検証① 必須フィールドと型(まず事故を止める)🧠🧱
- 読む📖:Rulesでも「必須」「型っぽい検証」ができる
- 手を動かす🧑💻:必須項目が欠けたら拒否、を入れる
- ミニ課題🎯:タイトル必須+空文字NG
- チェック✅:変な形のデータを弾ける?
第11章:入力検証② 文字数・パターン(ユーザー入力の地雷💣)🔤

- 読む📖:長すぎ・短すぎ・怪しい文字列への備え
- 手を動かす🧑💻:文字数上限をRulesで固定
- ミニ課題🎯:表示名「1〜20文字」にする
- チェック✅:想定外の長文を弾ける?
第12章:入力検証③ “書いていい項目だけ許す”(権限昇格を防ぐ)🛡️
- 読む📖:いちばん大事!「role」みたいな危険フィールドは書かせない
- 手を動かす🧑💻:許可キー以外が来たら拒否する
- ミニ課題🎯:「isAdmin」的な項目を一般ユーザーが書けないように
- チェック✅:クライアント改造されても大丈夫?
第13章:Rules関数化(読みやすさ=安全性)🧩✨
- 読む📖:同じ条件のコピペは事故のもと😵
- 手を動かす🧑💻:共通関数(isSignedIn / isOwner など)を作る
- ミニ課題🎯:owner判定を関数にして3箇所で使う
- チェック✅:あとで読んでも怖くない?
第14章:ロール設計の基本(管理者/一般ユーザーをどう分ける?)👮♂️👩💻
- 読む📖:ロールは「増やしすぎない」「意味を固定」
- 手を動かす🧑💻:role設計表(admin/editor/user)を作る
- ミニ課題🎯:管理画面の操作を「3分類」してみる
- チェック✅:ロールの責務が説明できる?
第15章:Custom Claims入門(ロールを“トークンに埋める”)🎫🔐
- 読む📖:カスタムクレームは IDトークン経由で扱う (Firebase)
- 手を動かす🧑💻:管理者にだけ「admin=true」を付ける流れを理解
- ミニ課題🎯:付与後に「トークン更新が必要」な点をメモ📝
- チェック✅:「UIで隠す」だけに頼らない意識になってる?
第16章:Custom Claims × RulesでRBAC(王道パターン)👑🛡️
- 読む📖:Rules内で「request.auth.token」の情報を使って分岐
- 手を動かす🧑💻:adminだけ読めるコレクションを作る
- ミニ課題🎯:一般ユーザーは「自分の分だけ」、adminは「全部」
- チェック✅:ロールで読める世界がちゃんと分かれてる?
第17章:Firestore内ロール管理パターン(やるなら注意点もセット)⚠️📦
- 読む📖:rolesドキュメント参照は便利だけど、設計ミスると危ない
- 手を動かす🧑💻:「role docはadminのみ書ける」制約を入れる
- ミニ課題🎯:roleの保存場所を「どこが一番安全か」比較
- チェック✅:権限データをユーザーが書けない?
第18章:よくある事故パターン集(教材で先に踏む😂💥)
-
事故例💥
- allow read, write を雑に許可
- list を許して丸見え
- ルール関数のコピペ地獄
- 「サーバー側はRules関係ない」誤解 (Firebase)
-
手を動かす🧑💻:事故ルールを“安全ルールに直す”
-
ミニ課題🎯:事故を1個選んで「再発防止メモ」作る
-
チェック✅:事故を見つけたら即ツッコめる?
第19章:テストが本体!EmulatorでRules単体テスト🧪🧯

-
読む📖:Emulator SuiteでRulesをローカル検証できる (Firebase)
-
手を動かす🧑💻:
- 「通るべきテスト✅」と「弾くべきテスト❌」を作る
- v9のテストライブラリ推奨の流れを確認 (Firebase)
-
ミニ課題🎯:admin/user/未ログインの3者テストを作る
-
チェック✅:デプロイ前に“自信”が持てる?
第20章:AIでRules作成を加速(でも必ず人間レビュー)🤖✅
-
読む📖:
- Gemini CLI のFirebase拡張で Rules+テストの叩き台を作れる(自動更新ではない) (Firebase)
- GitHubの拡張(生成+テスト)もあるが、AI生成は信用せず必ずレビュー (GitHub)
- Antigravity+Firebase MCPで、プロジェクト状態を見ながら設計・修正の相談がしやすい (The Firebase Blog)
-
手を動かす🧑💻:AIに「やらせる範囲」と「人が決める範囲」を線引き
-
ミニ課題🎯:AIが作ったRulesに「レビュー観点チェックリスト」を当てる📝
-
チェック✅:AIを使っても安全性が下がらない運用になった?
第21章:ミニ総合課題(このカテゴリの完成品)🧑💼✨
「管理画面だけ見えるコレクション」を作る(例:adminOnlyLogs / adminNotes など)
- 一般ユーザー:存在すら見えない🙈
- 管理者:読み書きOK👑
- Emulatorテスト:3者(admin/user/未ログイン)で全部確認🧪
- デプロイ:ローカル管理→CLIで反映(上書き注意)🧯 (Firebase)
2026年2月時点の“バージョン目安”メモ(アウトライン内で使う)🧾✨
-
Functions(Node.jsランタイム)
- Node.js 20 / 22 がサポート、18はdeprecated扱い (Firebase)
-
Admin SDK(カスタムクレーム付与など、サーバー側で使う想定)