Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
GraphQL から Firestore の セキュリティルール を生成するライブラリの紹介
Search
YutaUra
August 31, 2022
Technology
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GraphQL から Firestore の セキュリティルール を生成するライブラリの紹介
YutaUra
August 31, 2022
Other Decks in Technology
See All in Technology
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
660
Kiro Crewで「みのるん式」仕事術やってみた
minorun365
PRO
3
650
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
5
1.2k
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
190
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
740
hackers_champloo_2026_tidb
makocchi
0
170
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
2
300
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
130
Browser Spec: Testing Hotwire with Ruby
takahashim
1
130
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
190
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
170
React改造してみた
tsukina_7mochi
0
120
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
570
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Scaling GitHub
holman
464
140k
Making the Leap to Tech Lead
cromwellryan
135
10k
Building Adaptive Systems
keathley
44
3.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Navigating Team Friction
lara
192
16k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Prompt Engineering for Job Search
mfonobong
0
520
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
Transcript
GraphQL から Firestore の セキュリティルール を生成するライブラリの紹介 @YutaUra 2022/8/31 GraphQL Tokyo
#18 Lightning talks
自己紹介 • YutaUra • 横浜市立大学 データサイエンス学部 4年 • TypeScript, GraphQL,
Prisma, React.js • Twitter: @3594914 • Zenn: yuta_ura
LTの目的 • 自作ライブラリの紹介と供養 ◦ @firebase-graphql/graphql-codegen-firestore-rules • 技術的な知識提供は少ないです
現在は開発はストップしていますが、ニーズ次第では再開しようと思っているので、良さそうと思ってもらえた ら、スターや #GraphQLTokyo でツイートしてください で https://github.com/YutaUra/firebase-graphql/tree/main/packages/graphql-codegen-firestore-rules
ライブラリのイメージ
特徴 • Firebase を Amplify っぽくしたようなライブラリ • Firestore の構造を GraphQL
スキーマで表現 • GraphQL Code Generator を使ってセキュリティルールを生成する どんなライブラリ?
簡単に Firestore について説明 • Cloud Firestore(Firestore) は Firebase・Google Cloud から提供されている
NoSQL データベース • スキーマレスで柔軟にデータを保存することができ、高いスケーラビリティを実現し ます • セキュリティルールを用いて、クライアントから直接アクセスできる設計になっている • リアルタイムアップデートの機能があり、ユーザー間でデータを同期することが可能 となっている
Firestore に対する課題感 1. セキュリティルールの記述が面倒臭い 2. スキーマレスなので、データ構造について明文化しておかないと扱いにくい 3. TypeScript との相性がよくない
本ライブラリが解決する課題 1. セキュリティルールの記述が面倒臭い 2. スキーマレスなので、データ構造について明文化しておかないと扱いにくい 3. TypeScript との相性がよくない
Firestore のセキュリティルール 認証とデータのバリデーションを組み合わせたルールは、煩雑で可読性が低くなりやす い。
ディレクティブを使ってスキーマ定義
データバリデーション用ルールの生成 • 予期しないプロパティの混入を抑制 • 予期しないデータ型での保存を抑制
データアクセス用ルールの生成 以下のルールを組み合わせることが可能 • 全てのユーザーに許可 • ログイン済みユーザーにのみ許可 • データ又はパスの値がユーザー自身と同 値な場合のみ許可
今のところどんなルールを指定できるか
まとめ
GraphQL 周辺のエコシステムはかなり整っている 本ライブラリを GraphQL Code Generator プラグインとして実装したが、 実装内容をファ イルの生成ロジックに集中させることできる 導入なども簡単なため、利用ユーザーに対しても低コストで利用をしてもらえる
展望 今回紹介したライブラリの他にも、GraphQLスキーマからFirestore の CRUD を生成する ライブラリが開発途中であるので、 TypeScript との相性問題も解決することができま す。 また、GraphQL
のリゾルバを生成し、Apollo Server 用のコードを自動生成する試みもし てます。GraphQL 経由で Firestore にアクセスすることで、キャッシュ機構など、既存の GraphQL 資産を Firebase にも適用できるようになる。
GraphQLの表現力を活かした ライブラリを作ってみた話でした