Realm vs Core Data
iOSおよびモバイル開発におけるローカルデータベースの二大勢力を比較 — リアクティブでクロスプラットフォームなRealmと、Apple純正のオブジェクトグラフフレームワークCore Data。
SQLiteのパワー、Dartの型安全性——SQLを知る人にとって自然な選択
NoSQLの速さとシンプルさ——ただし最初に正しいパッケージを選ぶ必要がある
明確な答え:データモデルがリレーショナルで、チームにSQLの知識があるならDriftがより安全な賭けです——2.35.0は2026年9月9日リリース、最終コミットは2026年9月24日、月間ダウンロードは130万を超えます。Isar側で唯一の重要な条件は、pubspec.yamlに`isar_community`を記載することです。オリジナルの`isar`パッケージは2023年以降凍結されています。フォークは活発であり、ドキュメント的なデータ(キャッシュ、柔軟なスキーマのメモ)には依然として妥当な選択肢です。
| カテゴリー | Drift | Isar |
|---|---|---|
| パフォーマンス | 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 - テーブル定義 + リアクティブクエリ (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_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年以降凍結されています。フォークは活発であり、ドキュメント的なデータ(キャッシュ、柔軟なスキーマのメモ)には依然として妥当な選択肢です。
無料相談を受ける新規プロジェクトでは必ずisar_communityを使ってください。オリジナルのisarパッケージはpub.devで2023年4月25日以降、GitHubでは2025年6月14日以降更新されておらず、事実上放棄された状態です。isar_communityはコミュニティが引き継いだ活発なフォークであり、今日「Isar」と言うときに指すべきパッケージはこちらです。