SlideShare a Scribd company logo
FlutterとSupabaseでRDBを使った
サーバーレスアプリ開発
2023年1月28日 @FlutterGakkai
● オーストリア生まれの日米ハーフ
● SupabaseにてDevRelとFlutter SDK
のメインテイナーを担当
● Flutter・Next.js・Node.jsを使った開発
が主
● 猫が大好き 😻
タイラー
@dshukertjrjp
● Supabaseとは?
● ユースケース
● デモンストレーション
Supabase
Database
全てのプロジェクトに
PostgreSQLを提供。リアルタ
イム機能も対応でスケールす
るアプリ開発を支援。
Auth
メールアドレスやOAuthを使っ
た認証を簡単に実装。データ
ベースにもセキュアにアクセ
ス!
S3のストレージにクライアント
からセキュアにアクセスできる
仕組みを提供。
Storage
Denoを使ってEdge
Functionsを簡単にデプロイ。
Functions
オープンソースツールの集合体
Twitterクローンを通じて機能を見てみる
- シンプルな認証
- データの正規化
- アプリ側から柔軟にクエリー
- DBのセキュリティルール
- リアルタイムにデータの取得
- 【おまけ】Geoデータのクエリーも得意
これら全てがサーバーレスのSQLデータベースでできる感
動 😭
- supabase.comへ行きプロジェクト作成
- 設定画面にあるプロジェクトURLとプロ
ジェクトAnonKeyをmain()にコピペする
だけ
めっちゃシンプルなセットアップ
Future<void> main() async {
await Supabase.initialize(
url:
'https://ocirvypwbozqgpnzmlei.supabase.co',
anonKey: 'my_anon_key',
);
runApp(const ProviderScope(child: MyApp()));
}
- メールアドレスのみでのログイン(通称
マジックリンクログイン)
- 王道のメアド+パスワード
- OAuthを使ったログイン
- 多要素認証
シンプルな認証
await supabase.auth.signInWithOtp(
email: email,
emailRedirectTo: 'com.supabase://login',
);
- Row Level Security (行レベルセキュリ
ティ)を使ってアクセスを制限
- 型(スキーマ)はテーブルを定義したと
きに決まっているからルールはスッキリ
- クライアント側では全データを読み込も
うとしても自動的に閲覧権限のある
データのみ返される
フィルターにもなるセキュリティルール
await supabase
.from('notifications')
.select()
.order('created_at')
.limit(20);
- RDBで普通にテーブル設計
- select().from().order()のようにSQLラ
イクな記法
- GraphQL的な雰囲気で関連テーブル
の情報にアクセス
- countなどの情報も一発でクエリー
- Postgresにできることはなんでもできる
柔軟性
RDBなのでデータを正規化させスッキリ
final data = await supabase
.from('posts')
.select('''
*,
user:profiles(*),
like_count:likes(count),
my_like:likes(count)
''')
.eq('my_like.user_id', myUserId)
.order('created_at')
.limit(20);
- .stream()メソッドを使って簡単にリアル
タイムデータを取得
- 「プレゼンス」機能も標準装備
- Broadcast機能を使って遅延の少ない
クライアント間通信も
リアルタイムデータ
supabase
.from('messages')
.stream(primaryKey: ['id'])
.order('created_at')
.listen();
- ストレージもRow Level Securityでアク
セス制限
- 大きいサイズの画像だけ上げておいて
動的にサムネイルを取得
ストレージ
await supabase
.storage
.from('posts')
.upload(imagePath, imageFile);
- ストレージもRow Level Securityでアク
セス制限
- 大きいサイズの画像だけ上げておいて
動的にサムネイルを取得
ストレージ
await supabase
.storage
.from('posts')
.upload(imagePath, imageFile);
- 日本語にも対応した全文検索インデッ
クスエンジンpgroonga対応
- Database Functionを使って簡単に検
索
全文検索
create index pgroonga_content_index
on posts
using pgroonga (body)
with (tokenizer='TokenMecab');
final List data = await supabase
.rpc('search_posts', params: {
'query': query,
});
- 特定のテーブルでのイベントに対し
て発火
- 他のテーブルのデータを書き換えた
り、Webhookを発火したりできる
データベーストリガー
create or replace function public.handle_likes()
returns trigger
language plpgsql
security definer set search_path = public
as $$
declare
notifier_id uuid;
begin
select user_id
into notifier_id
from public.posts
where id = new.post_id
and user_id != new.user_id;
if found then
insert into public.notifications (type,
notifier_id, actor_id, entity_id)
values ('like', notifier_id, new.user_id,
new.post_id);
end if;
return new;
end;
$$;
- Postgisを使って地理データ管理・クエ
リー
- 距離が近い順に並べ替え
- 特定の長方形の中のデータをクエリー
PostgresだからGeoデータにも強い
その他メリット
● ビルドが速い!
○ ライブラリーが軽いから起動まであっという間。
● ビルドエラーになりにくい!
○ Platform channelsを使っていないので謎のバージョンコンフリクトが発生しに
くい
こんな人に使ってもらいたい
SQLをよく知っている人
- 生のPostgreSQLが提供されているので使い方は自在
- 既存のPostgreSQL上で動いているサービスの移行も楽
SQLをまだ知らない人
- GUIから操作ができる
- 使っていくうちにSQL・PostgreSQLに詳しくなる
【PostgreSQLだから効率的に開発できる】
Demo
Build in a weekend, scale to millions
Links
- Twitter Cloneレポジトリー
- Supabase Website
- Supabaseレポジトリー
- Twitter @dshukertjrjp
- Supabaseを使ったGeoデータの取り扱い方ガイド

More Related Content

PDF
NuxtでChrome拡張作ってみた
PDF
Flutter移行の苦労と、乗り越えた先に得られたもの
PDF
シェーダだけで世界を創る!three.jsによるレイマーチング
PPTX
DockerコンテナでGitを使う
PDF
クソコード動画「Managerクラス」解説
PDF
「顧客の声を聞かない」とはどういうことか
PDF
GLSLによるシェーダーアートことはじめ
PDF
中級グラフィックス入門~シャドウマッピング総まとめ~
NuxtでChrome拡張作ってみた
Flutter移行の苦労と、乗り越えた先に得られたもの
シェーダだけで世界を創る!three.jsによるレイマーチング
DockerコンテナでGitを使う
クソコード動画「Managerクラス」解説
「顧客の声を聞かない」とはどういうことか
GLSLによるシェーダーアートことはじめ
中級グラフィックス入門~シャドウマッピング総まとめ~

What's hot (20)

PPTX
WebRTC SFU mediasoup sample
PDF
Pythonによる黒魔術入門
PDF
プログラマ目線から見たRDMAのメリットと その応用例について
PDF
フラッター開発におけるシークレット情報取扱考察
PDF
レシピの作り方入門
PDF
Dockerからcontainerdへの移行
PDF
こわくない Git
PPTX
見よう見まねでやってみる2D流体シミュレーション
PDF
目grep入門 +解説
PDF
Gitのよく使うコマンド
PDF
Linux女子部 systemd徹底入門
PDF
いつやるの?Git入門 v1.1.0
PDF
GoによるWebアプリ開発のキホン
PPTX
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
PPTX
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
ODP
自宅サーバ仮想化
PDF
【Unite 2017 Tokyo】Unityで楽しむノンフォトリアルな絵づくり講座:トゥーンシェーダー・マニアクス
PDF
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
PDF
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
PDF
GPU最適化入門
WebRTC SFU mediasoup sample
Pythonによる黒魔術入門
プログラマ目線から見たRDMAのメリットと その応用例について
フラッター開発におけるシークレット情報取扱考察
レシピの作り方入門
Dockerからcontainerdへの移行
こわくない Git
見よう見まねでやってみる2D流体シミュレーション
目grep入門 +解説
Gitのよく使うコマンド
Linux女子部 systemd徹底入門
いつやるの?Git入門 v1.1.0
GoによるWebアプリ開発のキホン
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
自宅サーバ仮想化
【Unite 2017 Tokyo】Unityで楽しむノンフォトリアルな絵づくり講座:トゥーンシェーダー・マニアクス
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
GPU最適化入門
Ad

Similar to FlutterとSupabaseでRDBを使った サーバーレスアプリ開発 (20)

PDF
Flutter Meetup Tokyo (#18) _ Osaka (#10).pdf
PDF
[日本DCの本命、大阪でWindows Azureを愛でる会] Windows Azure 概要 & 最新情報
PDF
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
PDF
Azure Fundamental
PDF
[Serverless OpenHack Tokyo] Azure Serverless (Japanese)
PDF
[MW11] OSS on Azure で構築する ウェブアプリケーション
PDF
[デブサミ]Microsoft Data Platform 最新アップデート
PPTX
Fluxflex meetup 2011 in Tokyo
PPTX
Azure serverless!! azure functionsでサーバーを意識しない開発
PPTX
JDMC Azureアプリ開発入門
PDF
Introduction to extensions and other useful features for developing apps usin...
PDF
今改めて学ぶ Microsoft Azure 基礎知識
PPTX
fluxflex meetup in Tokyo
PDF
20190201 Cloud Native Kansai AKS Azure
PPTX
20110924 shizuoka azure-forsharing
PDF
[Developers Festa Sapporo 2018] Azure AI ~Microsoft AzureでのAI開発のイマ~
PPTX
Japan MVP Community Connection 2017 Autumn smart Demonstration
PPTX
Microsoft AI セミナー - Microsoft AI Platform
PPTX
Weave Node-RED and Azure together
PDF
平成最後の1月ですし、Databricksでもやってみましょうか
Flutter Meetup Tokyo (#18) _ Osaka (#10).pdf
[日本DCの本命、大阪でWindows Azureを愛でる会] Windows Azure 概要 & 最新情報
[db tech showcase OSS 2017] A24: マイクロソフトと OSS Database - Azure Database for M...
Azure Fundamental
[Serverless OpenHack Tokyo] Azure Serverless (Japanese)
[MW11] OSS on Azure で構築する ウェブアプリケーション
[デブサミ]Microsoft Data Platform 最新アップデート
Fluxflex meetup 2011 in Tokyo
Azure serverless!! azure functionsでサーバーを意識しない開発
JDMC Azureアプリ開発入門
Introduction to extensions and other useful features for developing apps usin...
今改めて学ぶ Microsoft Azure 基礎知識
fluxflex meetup in Tokyo
20190201 Cloud Native Kansai AKS Azure
20110924 shizuoka azure-forsharing
[Developers Festa Sapporo 2018] Azure AI ~Microsoft AzureでのAI開発のイマ~
Japan MVP Community Connection 2017 Autumn smart Demonstration
Microsoft AI セミナー - Microsoft AI Platform
Weave Node-RED and Azure together
平成最後の1月ですし、Databricksでもやってみましょうか
Ad

FlutterとSupabaseでRDBを使った サーバーレスアプリ開発