1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Flutter with Supabase!!

Last updated at Posted at 2024-11-14

はじめに

こんにちは!もんすんです。
今回は、Flutterでの利用を試しを兼ねて、Supabaseについて紹介していきます。
Supabaseに興味がある方や、バックエンドの構築に手軽さを求めている方は、ぜひご覧ください。

Supabaseとは

概要

Supabaseは、オープンソースのBackend as a Service (BaaS, バース)、つまり、バックエンドサービスとして注目されているプラットフォームで、Firebaseの代替としてよく比較されています。

バックエンド機能としては、

  • データベース
  • 認証
  • ストレージ
  • サーバーレスファンクション

が備わっています。
これらの機能により、迅速にアプリケーションを構築・展開できる環境を提供しています。

Supabaseでは、PostgreSQLが採用されており、リアルタイムデータベースの機能や高度なクエリが可能になっています。
また、RESTful APIやGraphQLを自動生成する仕組みも備えているため、フロントエンド開発者にとっても直感的で扱いやすいのが特徴です。

特徴

  1. リアルタイムデータベース: 変更が即座に反映されるDBを提供
  2. 認証と認可: JWTベースの認証や、OAuth、SAMLなどのログインに対応
  3. ストレージ管理: 画像や動画のアップロードおよび管理が可能なストレージ
  4. サーバーレスファンクション: カスタムAPIやバックエンド処理を実装可能

無料枠

有料プランになってくると他のサービスとの比較が難しくなるので、今回の記事では、無料枠について、FirebaseとAWSとSupabaseを比較してみました。

これは2024年11月時点での情報ですので、正確な情報は各サービスの公式ドキュメントをご確認ください。

以下は、Supabase、Firebase、AWSの無料枠で実現できる主な機能を比較した表です。各プラットフォームの強みや制限も簡潔にまとめています。

機能 Supabase Firebase AWS Free Tier
データベース PostgreSQL
月間500MBまで無料
Firestore/Realtime Database
1GBストレージ
RDS(PostgreSQLやMySQL)
750時間/月 無料
リアルタイム更新 対応 Firestore/Realtime Database対応 DynamoDB Streams
250万回//月まで無料
認証 5万アクティブユーザ/月まで無料 5万アクティブユーザ/月まで無料 Cognito
5万アクティブユーザ/月まで無料
ストレージ 画像/ファイルのストレージ
1GB無料
Cloud Storage
5GB無料
S3
5GB無料
サーバーレス関数 Edge Functions
50万リクエスト/月まで無料
Cloud Functions
200万リクエスト/月まで無料
Lambda
100万リクエスト/月まで無料

使ってみた

アカウント作成

こちらからアカウントを作成していきます。

私はGitHub経由でアカウント作成する事にしました。

[Continue with GitHub]を選択し、それ以降は画面の流れにそってプロジェクトを作成して行けばOKです。

スクリーンショット 2024-11-05 8.25.16.png

Flutterに適用

それでは次にFlutterアプリケーションにSupabaseを適用していきます!
公式ドキュメントはこちらです。

まず、以下のコマンドを実行し、パッケージをインストールします。
Flutter定番のやつですね。

flutter pub add supabase_flutter

次にmain.dartに以下の設定を追加します。
これだけでSupabaseに接続できるみたいです。
本当かよ...

main.dart
+ import 'package:supabase_flutter/supabase_flutter.dart';

Future<void> main() async {
+  await Supabase.initialize(
+    url: 'https://xyzcompany.supabase.co',
+    anonKey: 'public-anon-key',
+  );
  runApp(const MyApp());
}

urlanonKeyには、それぞれプロジェクトダッシュボードで新規プロジェクトを作成する際に提供されるSupabase URLとAPI Keyを入力します。
これらがわからなくなったら、画面左下の歯車:gear:ボタンから、「API」を選択するとひょうじされます。

スクリーンショット 2024-11-14 9.28.17.png

上記で設定したSupabaseを呼び出す際は以下のように実装します。

final supabase = Supabase.instance.client;

これで、supabaseが取得できていれば、接続がうまくいっているということになりますね。

とりあえずDB操作

では、とりあえずDBからデータを取得してみます。

Supabaseコンソール側の設定: DB作成

Supabaseコンソール側に以下のようにtest_userテーブルを作成し、データを追加しました。

テーブルの作成方法やデータの追加方法は、省略します。
作成自体はかなり簡単でした。

スクリーンショット 2024-11-14 19.24.05.png

Supabaseコンソール側の設定: 権限設定

API経由でCRUDを実行するには、以下の権限設定が必要です。

先ほどテーブルの設定を行った画面から「Add RLS policy」を押します。
スクリーンショット 2024-11-14 19.26.47.png

さらに「Create policy」を押します。
スクリーンショット 2024-11-14 19.28.11.png

この画面で、anonに対して、テーブルの権限を設定します。
今回はCRUDの全ての権限を付与します。
実際に利用する際は正しく権限を与える方がよさそうです。

スクリーンショット 2024-11-14 19.06.47.png

Flutter側の実装

では、Flutter側の実装です。

import 'package:flutter/material.dart';
import 'package:supabase_flutter/supabase_flutter.dart';

Future<void> main() async {
  await Supabase.initialize(
    url: '',
    anonKey: '',
  );
  final supabase = Supabase.instance.client;
  final data = await supabase.from('test_user').select();

  runApp(MyApp(data));
}

class MyApp extends StatelessWidget {
  final List<Map<String, dynamic>> data;
  const MyApp(this.data, {super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Supabase Flutter Example'),
        ),
        body: ListView(
          children: [
            for (var row in data)
              ListTile(
                title: Text(row['name']),
                subtitle: Text(row['id'].toString()),
              ),
          ],
        ),
      ),
    );
  }
}

特に以下の部分が、Readの処理になります。

final data = await supabase.from('test_user').select();

selectメソッドの引数にカラム名を指定するとそのカラムの値だけ、指定しないと全カラムを取得できます。

実行結果

スクリーンショット 2024-11-14 19.10.51.png

正しくSupabaseのDBからデータを取得することができました!

終わりに

Supabaseの基本的な機能と、FirebaseやAWSとの比較、Flutterアプリへの組み込み方法について解説しました。Supabaseは、無料枠で手軽に試すことができるため、モバイルアプリやWebアプリのバックエンドを手軽に始めたい方には大変おすすめです。ぜひ、Supabaseの豊富な機能を活用して、アプリ開発に挑戦してみてもらえたらと思います!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?