FlutterでIsarを使う方法!ローカル環境で動く高機能NoSQLデータベースを使ってみる

2024年5月21日火曜日

Flutter

t f B! P L

IsarはFlutterのための高機能NoSQLデータベース

「Isar」はFlutterで数行のコードだけで利用可能なローカルデータベースです。Flutter専用に設計されたNoSQLデータベースで、追加の設定やボイラープレートは不要で、開発の速度と効率を向上させます。

「Isar」の特徴

公式サイトでは、「Isar」の特徴を次のように謳っています。

  • 高い拡張性: 数十万件のレコードを効率的に格納し、非同期でクエリを実行可能。
  • 豊富なデータ管理機能: 複合インデックスや複数条件対応クエリ、JSONサポートを含む多彩な機能。
  • 全文検索: 複数条件でのインデックス作成を通じて、容易にレコードを全文検索。
  • ACIDセマンティクス: トランザクションは自動的に処理され、エラー時には変更がロールバック。
  • 静的型付け: クエリはコンパイル時にチェックされ、実行時エラーの心配がありません。
  • マルチプラットフォーム対応: iOS、Android、デスクトップで使用可能。
  • 非同期処理と並列操作: 並列クエリ操作とMulti-Isolateがすぐに利用可能。
  • オープンソース: 全てのコンポーネントがオープンソースで提供され、永久に無料!

Isar Database

「Isar」の導入

インストール

pubを使用して、ライブラリと開発用ツールをインストールします。

flutter pub add isar isar_flutter_libs path_provider
flutter pub add -d isar_generator build_runner

コレクションの型を定義

データ構造を定義するファイルを作成します。ここでは、id, 氏名, 年齢の3つの項目を持つユーザー情報を扱うコレクションを定義してみます。
user.dartというファイルを作成し、@collectionのアノテーションを付けたクラスを定義します。
この時点dはuser.g.dart は存在しないためエラーになります。

import 'package:isar/isar.dart';
part 'user.g.dart';


class User {
  Id id = Isar.autoIncrement; // id = nullでも自動インクリメントされます。

  String? name;

  int? age;
}

コード生成の実行

次のコマンドを叩いて、UserコレクションのCURD操作を行うコードを自動生成します。

flutter pub run build_runner build

このコマンドでuser.g.dartが生成されます。

IsarのCRUD操作

コレクションに対するCRUD(作成、読み取り、更新、削除)操作を行う方法を詳しく見ていきましょう。

Isarインスタンスの生成

Isarを使用するには、まずIsarのインスタンスを生成する必要があります。これはアプリケーションのドキュメントディレクトリにデータベースを作成することで行います。

import 'package:isar/isar.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sample_app/models/user.dart';

final dir = await getApplicationDocumentsDirectory();
final isar = await Isar.open(
  [UserSchema],
  directory: dir.path,
);

データの取得

Isarでは、コレクションの全データを簡単に取得できます。次のコードは、すべてのユーザー情報を取得する方法を示しています。

final allUsers = isar.users.where().findAll();

データの追加

新しいユーザーをデータベースに追加するには、新しいUserインスタンスを作成し、writeTxnメソッドを使用して保存します。

final newUser = User()..name = "Alice" ..age = 30;
await isar.writeTxn(() async {
  isar.users.put(newUser);
});

データの更新

既存のデータを更新する場合も、putメソッドを使います。Isarは自動的にidを基に既存のデータを更新します。

final userToUpdate = await isar.users.get(someId);
if (userToUpdate != null) {
  userToUpdate.name = "Updated Name";
  await isar.writeTxn(() async {
    isar.users.put(userToUpdate);
  });
}

データの削除

データの削除はdeleteメソッドを使って行います。idを指定することで特定のデータを削除できます。

await isar.writeTxn(() async {
  isar.users.delete(someId);
});

条件を指定してデータを取得

特定の条件を満たすデータのみを取得することも可能です。例えば、特定の名前のユーザーを検索するには次のようにします。

final specificUsers = isar.users.filter().nameEqualTo("Alice").findAll();

件数、平均、最大値、最小値を取得

Isarは集計関数もサポートしています。ユーザーの年齢の平均値を取得するには以下のようにします。

final averageAge = await isar.users.where().average().ageProperty();

まとめ

このように、Isarとコード自動生成の機能よって、データのCRUD操作を簡単かつ効率的に行うことができるのが「Isar」の最大の特徴です。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ