SQLiteを使ってみる【FlutterFlow】

FlutterFlowの新機能として、SQLiteが使えるようになりました。
SQLiteは、アプリの内部にもつ軽量のDBです。
FlutterFlowで使う場合には少しSQLの知識が必要になります。

# SQLiteの特徴
組み込み型データベース: SQLiteは、別のサーバープロセスを必要とせず、アプリケーションに直接組み込まれるデータベースです。これにより、デプロイや設定が簡単になります。
軽量性: SQLiteは非常に軽量で、リソースの制限された環境でも優れたパフォーマンスを提供します。これは、モバイルアプリケーションや組み込みシステムに特に有用です。
自己完結型: SQLiteは自己完結型で、外部の依存関係が少ないため、さまざまなプラットフォームや環境で簡単に使用できます。
トランザクション管理: ACID(原子性、一貫性、分離性、持続性)トランザクションを完全にサポートしており、データの整合性と信頼性を保証します。
# FlutterFlowでの実装
## SQLiteを有効にする
FlutterFlowの設定でSQLiteの設定を有効にします。
設定の中に「SQLite」があるので、選択するとSQLiteをEnableにする画面が出るので、トグルスイッチをONにしてください。
![スクリーンショット 2024-01-14 20.48.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/d9633161-3f83-d792-2f2a-bef4b8d46cef.png)

## SQLiteのDBを作成する
DB Browser for SQLiteをインストールする
[こちらのサイト](https://sqlitebrowser.org/dl/)から、自分のOS用のファイルをDLしてインストールしてください。

## DBを作成する
DB Browser for SQLiteを起動して、「新しいデータベース」をクリックして、ファイル名を決めて保存してください。
![スクリーンショット 2024-01-14 20.50.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/9eb37a25-5b92-4923-d4a4-bbf788483430.png)
![スクリーンショット 2024-01-14 20.50.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/cf1c20bb-7626-7d10-a69e-9065aaaadec8.png)

テーブル定義の編集になるので、追加ボタンを押してカラムを作成してください。
今回はオートインクリメントのIDとSTRING型のwordというカラムを作成しました。
「AI」にチェック入れるとオートインクリメントになります。
OKを押すとテーブルが作成されます。
![スクリーンショット 2024-01-14 20.52.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/b87d4b6e-3dba-0211-3457-ee6a0d715a78.png)

「変更を書き込み」をクリックして、ファイルに保存してください。

## SQLiteファイルアップロード
FlutterFlowの画面のSQLiteの設定に「Database File」というところにアップロードのアイコンがあるので、アップロードしてください。
![スクリーンショット 2024-01-14 20.57.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/3e80aed4-1df3-790b-05e0-a2d568a76885.png)

## SQLクエリを追加
SQLiteの操作を行うために、SQLクエリを設定する必要があります。アプリ内で直接SQLを記載するのではなく、ここで設定したSQLクエリを選択して使用することになります。
今回は、すべてのデータの取得とデータの追加のSQLクエリを作成します。
SQLの知識が必要になります。

### リード用のSQLクエリ
設定画面にある「Read Queries」をクリックして「Add Query」をクリックします。
クエリの設定画面が開きます。

ここでは単純にすべてのデータをとってきています。

「Output Columns」で出力するカラムを定義してください。
型をテーブル定義に合わせてください。

設定したら「Save」で保存します。
![スクリーンショット 2024-01-14 22.45.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/dd434aa1-9ac7-afbf-def2-dc179c7d0883.png)

### データ操作用のSQLクエリ
設定画面にある「Update Queries」をクリックして「Add Query」をクリックします。
クエリの設定画面が開きます。

ここではデータの追加を行っています。
可変の部分については、「Variables」で定義します。
INSERT INTO words (word) values(‘${ insertWord }’);

変数部分は、${変数名}で記載します。
また、文字列の場合は、前後に’(シングルクォーテーション)を忘れずに。

設定したら「Save」で保存します。
![スクリーンショット 2024-01-14 22.44.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/ed8d7640-cbc3-0016-7151-789aeb42ec46.png)

## 画面を作る
今回は簡単に追加用のテキストフィールドと、データの一覧にしました。
画面の説明については、今回は省略します。
![スクリーンショット 2024-01-14 23.18.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/ba486d33-efcc-e2b3-a06c-aed4a9e34f1a.png)

## ListViewの設定
Listviewを選択してにBackend Queryを追加します。
今回新たに「SQLite Query」が追加されていますので、選択します。
![スクリーンショット 2024-01-14 21.05.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/22197c4e-02b5-8d62-6f00-782f5720fc2b.png)

Queryの設定をします。
SQLiteの設定の中でRead Queriesで追加したクエリが出てくるので、選択します。
「Confirm」をクリックして保存します。
![スクリーンショット 2024-01-14 21.05.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/8b443ccb-0250-1e31-b45d-44c043c485c0.png)

## データの追加の設定
ボタンを選択して、アクションを追加します。
「Backend/Database」に「SQLite Query」が追加されていますので、その中から「Update Query」をクリックします。
![スクリーンショット 2024-01-14 21.07.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/be2e9c3a-c2f5-76fa-0fc6-926a5cf74f15.png)


## Action定義
「Query Name」にUpdate Queryで追加したデータ追加のクエリ名を選択します。
「Variables」にはテキストフィールドの値を設定します。
![スクリーンショット 2024-01-14 21.08.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/18b6dc2e-1777-8c45-2ce8-961ef91b5399.png)

# テストする
何回か試した限り、ブラウザでの確認はできませんでした。
SQLiteがローカルのDB(ファイル)ということが起因しているのかと思います。
APKをDLして、実機に入れて確認してください。

今回のアプリを起動した画面です。
データはなにもないので、何も表示されません。
![Screenshot_20240114_225147.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/c9064c7b-54a0-e5a5-e09d-c775c0ab8f75.jpeg)

テキストフィールドに「ラーメン」と入れて、追加ボタンを押すと下部にラーメンと即時反映されました。
![Screenshot_20240114_225201.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/89a4bf8c-5171-296e-e4a7-81d625d4ab24.jpeg)

再度、「寿司」と追加したら下に追加されました。
![Screenshot_20240114_225208.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332833/fff72fa3-3a22-58e0-1407-a3514caca982.jpeg)

# まとめ
今回はFlutterFlowの新機能である「SQLite」の基本的な使い方について、記事にしました。
ブラウザでの確認ができないので、面倒ではありますがインターネットを必要としないアプリはSQLiteを使うことで、FirebaseなどのDBを使う必要がないので、非情に便利な機能だと思います。

AtomBase合同会社では、FlutterFlowやBubbleなどのノーコードツールを使った開発をしています。
まだ詳細に作りたいものが決まっていない場合でも大丈夫ですので、ぜひご相談ください。

[AtomBase合同会社](https://atombase.co.jp/)