対応プラットフォーム
sqlite3データベース上に構築されたDriftは、ほぼすべてのDartプラットフォームで実行することができます。 最初のリリース以降、DartとFlutterのエコシステムは大きく代わりました。 異なるDriftパッケージやそれらを使用するタイミングについての混乱を解消するため、このドキュメントではサポートされているすべてのプラットフォームをリストにし、それらのアプリを構築する際にDriftをどのように使用するかを説明します。
プラットフォームの独立性を達成するために、DriftはコアAPIをプラットフォーム固有のデータベース実装から分離しています。
コアAPIは純粋なDartであり、Flutterの外でもすべてのDartプラットフォームで実行することができます。
Driftアプリを書く際には、package:drift/drift.dart内のAPIを主に使用することをおすすめします。
これはすべてのプラットフォームで動作することが保証されています。
プラットフォームに応じて、異なるQueryExecuterを選択できます。これはコアのDriftライブラリとネイティブデータベースを結びつけるインターフェースです。
概要
この表は、サポートされているすべてのDirft実装と、それらが動作するプラットフォームの一覧です:
| 実装 | 対応プラットフォーム | 備考 |
|---|---|---|
package:drift_sqfliteのSqfliteQueryExecutor | Android, iOS | プラットフォームチャネルを使用し、Flutter専用で、アイソレートのサポートがありません。flutter testはサポートしていません。以前はmoor_flutterとして知られていました。 |
package:drift/native.dartのNativeDatabase | Android, iOS, Windows, Linux, macOS | Flutterユーザーのための追加設定は必要ありません。Flutter外部でのサポート、またはflutter test内での使用については、下記のデスクトップセクションを参照してください。アイソレートでの使用が推奨されます。以前はpackage:moor/ffi.dartとして知られていました。 |
package:drift/wasm.dartのWasmDatabase | Web | Flutterがあってもなくても動作します。少し追加の設定が必要です。 |
package:drift/web.dartのWebDatabase | Web | WasmDatabase に置き換えるため非推奨です。 |
共有コードベースで全プラットフォームをサポートするには、データベースを開く方法を変更するだけでよく、その他の使い方は同じです。 このリポジトリでは、条件付きインポートを使った方法を紹介しています。
モバイル対応(AndroidとiOS)
モバイル用には2つのDrift実装があります:
drift_sqfliteを使う
drift_sqflite(旧称 moor_flutter)は、sqfliteパッケージを使用してドリフトデータベースの実装を提供するパッケージです。
Flutterのパッケージチャネルを利用し、AndroidとiOSの両方をサポートしています。Flutterを使用していないDartプロジェクトでは動作しません。
新規プロジェクトには、一般的に新しいffiベースの実装を推奨しますが、drift_sqfliteもメンテナンスされ、サポートされています。
drift/nativeを使う
新しいパッケージdrift/native.dartの実装では、drift:ffiを用いて、sqlite3のネイティブC APIにバインドします。
これは、Getting Startedにも記載されているように、新しいプロジェクトに推奨されるアプローチです。
アプリが最新のsqlite3バージョンを含んでリリースするためにも、package:drift/native.dartを使用する際には、sqlite3_flutter_libsパッケージも追加してください。
sqlite3_flutter_libsは、Android、iOS、macOS上で固定のsqlite3バージョンを使用するようにアプリを設定します。
ただし、これはフルのFlutterアプリにのみ適用され、flutter_testを使ってテストを実行する際のsqlite3バージョンを上書きすることはできません。