省エネ

Flutter、vue3修行中。

supabase+Flutterでアプリを作りました

こんにちは。
久々の更新です。
更新がなさすぎて広告が出ちゃったので最近作ったアプリについて書きたいと思います。

成果物

play.google.com

植物の観察日記をつけるアプリ「PlantPal」。
まだ全然DLされていないのでよかったら使ってください。

Supabaseとは

supabase.com

supabaseとはBaaSです。
認証、RDB、strage、functionなんかが使えます。
Firebaseに比べると機能は少ないのですが、firebaseとの大きな違いはRDBが使える事でしょうか。
このデータベース、リアルタイムDBとしても使えるのでなかなか便利です。
PlantPalでは認証、RDB、strageの機能を無料枠で使っています。

Flutterへの導入

pub.dev

ちゃんとflutter用のプラグインが用意されているので導入は楽ちんです。
Readmeを読みながら進めれば得にハマる事なく導入できるかと思います。

ちなみに導入時点での環境は↓です。

Flutter version: 3.10.3
supabase_flutter: 1.8.1

認証

結論から言うと、認証は結構簡単にできました。
PlantPalではメール+パスワードでの認証機能を導入しています。

認証の種類も豊富です。
ただ、日本においてはLineやYahoo認証が人気らしいのでこの辺ができないのはちょっと残念。
Firebaseみたいにカスタム認証とかはないらしいです。(2023/6/13現在)
それと、匿名ログインみたいな機能もないようでそこはちょっと使いにくいところですね。
一部の画面はログインなしで見れるけど、投稿とかバックアップはログインが必要ですみたいなアプリだと使えないですね。

SupabaseClient get supabase => Supabase.instance.client;
await supabase.auth
        .signUp(email: request.email, password: request.password);

メール+パスワード認証に関してはこのくらいのコードで完結するのでアプリ側の実装は簡単です。

Database

SQLが書ける人はデータベースは使うのはとても簡単だと思います。
例えばこれはPlantPalで日記を挿入するためのコードです。

SupabaseClient get supabase => Supabase.instance.client;
final uid = supabase.auth.currentUser!.id;
await supabase.from('diary').insert({
  'date': diary.date.toIso8601String(),
  'image': image,
  'title': diary.title,
  'memo': diary.memo,
  'user_id': uid
});

更に、supabase側の管理画面でpolicyを設定しなければなりません。
このDBにinsert,select,delete,updateできるのは認証済のユーザーなのか誰でもアクセスしていいのかを記述した設定を保存しなければなりません。

ちなみにテーブルは管理画面上で作成しました。
Flutter側から作成することもできそうです。

strage

PlantPalは植物の写真を保存できる機能を有しています。
写真はsupabaseのstrageに保存しています。

SupabaseClient get supabase => Supabase.instance.client;
final image = await supabase.storage.from('diary_photo').upload(
    'image.png', file);

strageもDBと同じようなコードで保存できます。
File形式で保存する必要があるので、カメラやImagePickerから取得できるデータXFileの場合にはFile形式にする必要がありそうです。

strageもDB同様にpolicyの設定が必要です。

結論

導入が楽なのですごくよかったです。 Firebaseと比べられる事が多いsupabaseですが、やっぱりRDBが使えるのが大きな特徴ではないでしょうか。
正直な感想を言うと、ちょっと機能が物足りないなーという感じがありますね。
あと、policyの設定方法がよくわからない。
ドキュメントもちょっとわかりにくいんですよね。
もうちょっと機能やドキュメントが充実してきたらお金払って使いたいなーという感じです。