💽

sqfliteのバージョン管理を考える

2023/03/05に公開

概要

Flutterのローカルデータベース管理パッケージのsqfliteを使用して、データベースのバージョン毎の管理の設計を考えていく。
ユーザーの中にはローカルデータベースのバージョンが1→2→3と更新していくユーザーもいれば、
・インストール時にはバージョン2になっている
・バージョン1の時にインストールしたが、現在はバージョン3になっている
等、の様々なケースが考えらえれる

今回の記事はこれらの問題を解消できる1つになれば幸いです。
※リポジトリ
https://github.com/sukekyo000/sqflite_architecture
※sqflite公式パッケージ
https://pub.dev/packages/sqflite

前提条件

・Flutterの基本的な書き方が分かる
・sqfliteで簡単なCRUD操作を行ったことがある

バージョン

開発時のバージョンです
・Flutter 3.3.8
・sqflite 2.2.4

この記事で伝えたいこと

・sqfliteのバージョン管理をより分かりやすくする

実装方法

結論、下記のコードになります。
1つずつ解説します。
https://github.com/sukekyo000/sqflite_architecture/blob/main/lib/data/database.dart

1.バージョンの定義

シンプルに現在のバージョンの定義です。
「version」変数にバージョンを入れます

2.各バージョンでのスクリプト

各バージョン毎のスクリプトをMap型で格納します。
各バージョンで複数のスクリプトを実行する可能性があるので、「バージョン名 クエリのリスト」のようにMap型でキーをString,バリューをStringリストにして、スクリプトを格納しておきます。
今回はバージョンでpref(都道府県)テーブルを、バージョンでcityテーブルを、バージョンでareaテーブルを作成しています。

3.sqfliteのスクリプトを実行した後のインスタンスを返す

database()で、2.で実行したスクリプトのインスタンスを返します。
説明は省きますがこれらをrepository層で受け取ることで、各テーブルのリポジトリを作っています。
※都道府県リポジトリ
https://github.com/sukekyo000/sqflite_architecture/blob/main/lib/repository/pref_repository.dart

まとめ

上記の手順で実装することで、sqfliteのバージョン委対応した設計や実装が行い易くなるのではないかなと思います。

間違っている点や質問があれば、是非コメントいただきたいです!

参考記事

https://flutter.ctrnost.com/logic/migration/

Discussion