mottox2 blog

Firestoreの実践的知見を得られる『Firestore Mastery』を読んだ

book

Firebaseを使ってウェブサービス開発のお手伝いをする機会があった。その際に特に迷ったのが「NoSQLなFirestoreをどう使っていくか?」という点だ。データのモデリングや、データの読み書き権限を定義するセキュリティルール、クライアントとサーバー(Cloud Functions)のどちらでデータの書き込みをするのか等、考えることが非常に多い。
また、Firebaseは盛り上がっているがネット上にある記事には導入部分のものがほとんどで運用を意識したものや踏み込んだ解説のあるものは少ない。1

そこで今回読んだのがコミックマーケットで頒布された『Firestore Mastery』という同人誌だ。
Firebaseの中でも重要で難しいとされるFirestoreに絞って解説がされており、効果的にFirestoreを活用していく方法について書かれている。

thumbnail

対象読者は次のように書かれている。

Firebaseのチュートリアルをクリアし、ステップアップを目指している方
Firestoreの効果的な利用方法を学びたい方
業務レベルでFirestoreの利用を検討されている方(まえがきより)

チュートリアルレベルの内容は省かれており、過去にサーバーサイドでSQLを用いたプロダクト開発、JavaScriptがある程度読めることが前提になっているので、Firestore未経験の方にはマッチしないかもしれない。
ただ、一度でもFirestoreを触って、実務への導入に悩んでいる方にはピッタリの本だと思う。
商業誌にするには難易度が高く「これぞ同人誌!」いった内容だった。

目次

  • 第1章 Firestoreの基礎
    • 1.1 Firestoreを始める前に
    • 1.2 Firestoreのデータモデル
    • 1.3 ドキュメントの操作
    • 1.4 リアルタイムアップデート
    • 1.5 アトミックオペレーション
    • 1.6 Cloud Functionsの利用
  • 第2章 セキュリティルール
    • 2.1 セキュリティルールを書く際のルール
    • 2.2 ユーザ認証
    • 2.3 スキーマ検証
    • 2.4 データのバリデーション
    • 2.5 一括書き込みのセキュリティルール
    • 2.6 セキュリティルールのテスト
  • 第3章 Firestoreのデータモデリング
    • 3.1 ドキュメント設計の原則
    • 3.2 Firestoreでの1:1リレーション
    • 3.3 Firestoreでの1:nリレーション
  • 第4章 Firestoreでユーザを管理する
    • 4.1 ユーザ管理機能概要
    • 4.2 サインアップ
    • 4.3 会員情報を更新する
    • 4.4 ユーザの退会処理
  • 第5章 Firestoreでショッピングサイトを実装してみる
    • 5.1 アプリケーション要件概説
    • 5.2 買い物かご
    • 5.3 商品購入
    • 5.4 レビュー機能

Firestoreの基礎

ドキュメントやコレクション、サブコレクション、リファレンスといった概念を公式ドキュメントよりわかりやすい説明がある。その後は利用ケースごとにサンプルコードが記載されており、どちらとも「Firestoreを始める時に欲しい」と思う内容だった。
Webでのオフライン対応や、Cloud Functionsで作成されるドキュメントを監視する手法など知らないことも多く、Firestoreを使ったことのある人でも一度確認した方がいい内容だと感じた。

セキュリティルール

Firestoreで一番難しいのが、データの読み書き権限やバリデーションを定義するセキュリティルールだと思っている。公式ドキュメントや「Firebaseを使ってみた」系の記事を見ても薄いルールが多く実際にどういう定義をするのかが分からないと感じていた。
だが本章ではセキュリティルールを形作るユーザ認証、スキーマ検証、データバリデーションをそれぞれパターンごとに解説している。ユーザ認証だけでもユーザID、IDトークン、カスタムクレームのパターンについて解説しており、現時点でこれより詳しい日本語文献はないと思うほどの内容だった。

データモデリング

NoSQL、中でもドキュメント志向なFirestoreでのデータモデリングについての章では、基本的な考え方を抑えた上で1:1、1:nといったRDBでいうリレーションの例を出してデータモデリングを説明している。
データのリレーションだけでなく、正規化・非正規化、マップ/リスト・サブコレクションといった「どっちを使えばいいのか分かりづらい」系のトピックにも踏み込んでくれており、手元においておく本として非常に心強い。

ショッピングサイトの実装

実際のサービスを作る際にどういった考え方で実装するのか?という話を「RDBが得意としているECサイト」という題材でまとめてくれている。約20ページに渡って、実際の設計とその理由を説明してくれており非常に参考になる。今までの総まとめ的な内容にもなっていた。

まとめ

Firestoreには日本語のドキュメントも用意されているがここまで踏み込んで書かれた日本語文献は他にないと思う。
Firestoreのチュートリアルを行って、実務に導入するまでには大きな隔たりがあると感じていたが、この本がその溝を埋めてくれると思うので、Firestoreを検討している方は読むとよさそう。

最後にもう一度『Firestore Mastery』のBOOTHリンクをおいておく。

Firestore Mastery - shiodaifuku - BOOTH

感想

BOOTHで見たとき電子版がないため購入を躊躇していたが買ってよかったと思う。結果的に価格以上の価値を感じた。
「Firestoreは簡単なデータ構造のアプリだけなのでは?」と感じていたがそんなことはなく、Firestoreの可能性を感じさせてくれた。
テクニックだけでも「ドキュメント変更の検知を行ってCloud Functionsでのデータを受け取る」・「ChangeLogをサブコレクションで持つ」など目から鱗なトピックがたくさんあった。
今まで書いたコードでも直したい箇所が出てきたので、少しずつ直していこうと思う。

  1. あるにはあるが断片的で、全体像を掴むのは難しいと感じている。

B!
design

SketchからFigmaに乗り換えるにあたり考慮したこと

自分は2015年ぐらいからSketchというMac専用のデザインツールを利用してきました。しかし、最近はFigmaというツールをよく聞き、知人から(とくに@takanorip氏)も評判がいいので触って

figma
dev

TypeScriptで始めるNext.js 1: セットアップ

日本国内で、SPAをベースにしたフレームワークはVueベースのNuxt.jsが有名です。しかし、Nuxt.jsはNext.jsというReactをベースにしたフレームワークを参考に作られたものです。

dev

GitHub Actionsをスケジューラとして利用する

GitHubが提供しているGitHub Actions(beta)は「ソフトウェアワークフローを簡単に自動化できる」とあります。その中にcron形式でワークフローを実行することが出来る仕組みがあり、定