Drift vs Isar 比較

SQLiteのパワー、Dartの型安全性——SQLを知る人にとって自然な選択

VS
Isar

NoSQLの速さとシンプルさ——ただし最初に正しいパッケージを選ぶ必要がある

9 分で読了データベース

クイック結論

明確な答え:データモデルがリレーショナルで、チームにSQLの知識があるならDriftがより安全な賭けです——2.35.0は2026年9月9日リリース、最終コミットは2026年9月24日、月間ダウンロードは130万を超えます。Isar側で唯一の重要な条件は、pubspec.yamlに`isar_community`を記載することです。オリジナルの`isar`パッケージは2023年以降凍結されています。フォークは活発であり、ドキュメント的なデータ(キャッシュ、柔軟なスキーマのメモ)には依然として妥当な選択肢です。

DriftIsar
結論をすべて読む

スコア比較

グラフを読み込み中...

詳細スコア

詳細スコア: Drift と Isar — カテゴリー別10点満点のスコア
カテゴリーDriftIsar
パフォーマンス
8/10
8/10
学習のしやすさ
6/10
8/10
エコシステム
9/10
5/10
コミュニティ
8/10
5/10
求人市場
6/10
5/10
将来性
9/10
6/10

長所と短所

Drift

長所

  • 手書きのSQLとDartのfluent APIの両方でクエリを書ける——どちらもコンパイル時に検証される
  • リレーショナルモデリング(join、外部キー、view)がNoSQLよりはるかに強力
  • リアクティブな.watch()ストリームでクエリ結果をリアルタイムに購読できる
  • sqflite、ネイティブsqlite3、さらにPostgres(drift_postgres)まで複数のバックエンドをサポート
  • 活発な開発:最新バージョンは2.35.0(2026年9月9日)、GitHubの最終コミットは2026年9月24日
  • pub.devでflutter-favoriteタグと160/160のpubポイント——エコシステムの信頼性が高い
  • Web/WASMサポートが積極的に開発中で、クロスプラットフォーム目標に有利
  • MITライセンス、完全無料、GitHub Sponsorsによる持続可能な資金モデル

短所

  • drift_dev + build_runnerが必須——スキーマ変更のたびにコード生成を再実行する必要がある
  • SQLを知らないチームにとっては学習曲線がより急
  • ボイラープレート:テーブル定義、DAO、マイグレーション戦略を手書きする必要がある
  • マイグレーションはIsarの暗黙的なスキーマ進化に比べて、より多くの手書きコードを要求する
  • アイソレートの使用はデフォルトではない——`NativeDatabase.createInBackground`で意図的に有効化する必要がある

最適な用途

リレーショナルなデータモデルを持つ中〜大規模なFlutterアプリケーションSQLの知識を持つチーム、およびバックエンドからモバイルに移行してきた開発者複雑なクエリ/joinを必要とするオフラインファーストアーキテクチャWeb(WASM)をターゲットとするクロスプラットフォームプロジェクト長期的なメンテナンスが見込まれる大規模なコードベース

Isar

長所

  • SQLの知識が不要——アノテーション付きのDartクラスをそのまま保存できる
  • 組み込みの全文検索(full-text search)がすぐに使える
  • 複合/マルチエントリのインデックスとACIDトランザクションが組み込まれている
  • デフォルトでマルチアイソレートの並列クエリをサポート——Driftではこれは1行のオプトインにすぎない
  • 学習曲線はDriftに比べて緩やか:ボイラープレートが少ない
  • コミュニティフォークのisar_communityで開発が続いている(最終コミットは2026年9月8日)
  • Apache-2.0ライセンス、完全無料

短所

  • ⚠️ オリジナルの`isar`パッケージは事実上放棄されている:最終バージョンは2023年4月25日、GitHubの最終コードプッシュは2025年6月14日——新規プロジェクトで使用してはならない
  • 正しいパッケージは`isar_community`(フォーク)——ただしpub.devのダウンロード量はDriftの約13分の1
  • リレーショナルなクエリ(join、ウィンドウ関数)はDriftほど強力ではない
  • iOSプライバシーマニフェストはフォークにのみ存在する:`isar_community_flutter_libs`は`PrivacyInfo.xcprivacy`を含んでいるが、古い`isar`パッケージ(3.1.0+1、2023年4月25日)はマニフェスト以前のバージョン
  • `isar_community_generator`(旧`isar`パッケージでは`isar_generator`)+ build_runnerによるコード生成は依然として必要で、完全にボイラープレートフリーというわけではない
  • 公式ベンチマークページはもう公開されていない(isar.dev/benchmarks.html は404)——最新かつ検証可能なパフォーマンス参照がない

最適な用途

ドキュメントライクで非リレーショナルなデータモデル迅速なプロトタイピングとMVP(ボイラープレートが少ない)全文検索が必要なオフラインファーストアプリケーションSQLを知らない小規模チーム

コード比較

Drift
// Drift - テーブル定義 + リアクティブクエリ (drift.simonbinder.eu/setup/)
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;

part 'database.g.dart';

class Todos extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get title => text().withLength(min: 1, max: 200)();
  BoolColumn get isDone => boolean().withDefault(const Constant(false))();
}

@DriftDatabase(tables: [Todos])
class AppDatabase extends _$AppDatabase {
  AppDatabase() : super(_openConnection());

  @override
  int get schemaVersion => 1;

  // リアクティブストリーム:テーブルが変更されるたびに自動的に発行される
  Stream<List<Todo>> watchPendingTodos() {
    return (select(todos)..where((t) => t.isDone.equals(false))).watch();
  }

  Future<int> addTodo(String title) {
    return into(todos).insert(TodosCompanion.insert(title: title));
  }
}

LazyDatabase _openConnection() {
  return LazyDatabase(() async {
    final dbFolder = await getApplicationDocumentsDirectory();
    final file = File(p.join(dbFolder.path, 'db.sqlite'));
    return NativeDatabase.createInBackground(file);
  });
}
Isar
// isar_community - コレクション定義 + クエリ (pub.dev/packages/isar_community readmeのパターン)
import 'package:isar_community/isar.dart';
import 'package:path_provider/path_provider.dart';

part 'todo.g.dart';

@collection
class Todo {
  Id id = Isar.autoIncrement;

  @Index()
  late String title;

  bool isDone = false;
}

Future<Isar> openDb() async {
  final dir = await getApplicationDocumentsDirectory();
  return Isar.open(
    [TodoSchema],
    directory: dir.path,
  );
}

Future<void> addTodo(Isar isar, String title) async {
  final todo = Todo()..title = title;
  await isar.writeTxn(() async {
    await isar.todos.put(todo);
  });
}

// リアクティブクエリ:コレクションが変更されるたびに自動的に発行される
Stream<List<Todo>> watchPendingTodos(Isar isar) {
  return isar.todos.filter().isDoneEqualTo(false).watch(fireImmediately: true);
}

結論

明確な答え:データモデルがリレーショナルで、チームにSQLの知識があるならDriftがより安全な賭けです——2.35.0は2026年9月9日リリース、最終コミットは2026年9月24日、月間ダウンロードは130万を超えます。Isar側で唯一の重要な条件は、pubspec.yamlに`isar_community`を記載することです。オリジナルの`isar`パッケージは2023年以降凍結されています。フォークは活発であり、ドキュメント的なデータ(キャッシュ、柔軟なスキーマのメモ)には依然として妥当な選択肢です。

無料相談を受ける
FAQ

よくある質問

新規プロジェクトでは必ずisar_communityを使ってください。オリジナルのisarパッケージはpub.devで2023年4月25日以降、GitHubでは2025年6月14日以降更新されておらず、事実上放棄された状態です。isar_communityはコミュニティが引き継いだ活発なフォークであり、今日「Isar」と言うときに指すべきパッケージはこちらです。

関連ブログ記事

すべての記事を見る
すべての比較