Skip to main content

対応プラットフォーム

sqlite3データベース上に構築されたDriftは、ほぼすべてのDartプラットフォームで実行することができます。 最初のリリース以降、DartとFlutterのエコシステムは大きく代わりました。 異なるDriftパッケージやそれらを使用するタイミングについての混乱を解消するため、このドキュメントではサポートされているすべてのプラットフォームをリストにし、それらのアプリを構築する際にDriftをどのように使用するかを説明します。

プラットフォームの独立性を達成するために、DriftはコアAPIをプラットフォーム固有のデータベース実装から分離しています。 コアAPIは純粋なDartであり、Flutterの外でもすべてのDartプラットフォームで実行することができます。 Driftアプリを書く際には、package:drift/drift.dart内のAPIを主に使用することをおすすめします。 これはすべてのプラットフォームで動作することが保証されています。 プラットフォームに応じて、異なるQueryExecuterを選択できます。これはコアのDriftライブラリとネイティブデータベースを結びつけるインターフェースです。

概要

この表は、サポートされているすべてのDirft実装と、それらが動作するプラットフォームの一覧です:

実装対応プラットフォーム備考
package:drift_sqfliteSqfliteQueryExecutorAndroid, iOSプラットフォームチャネルを使用し、Flutter専用で、アイソレートのサポートがありません。flutter testはサポートしていません。以前はmoor_flutterとして知られていました。
package:drift/native.dartNativeDatabaseAndroid, iOS, Windows, Linux, macOSFlutterユーザーのための追加設定は必要ありません。Flutter外部でのサポート、またはflutter test内での使用については、下記のデスクトップセクションを参照してください。アイソレートでの使用が推奨されます。以前はpackage:moor/ffi.dartとして知られていました。
package:drift/wasm.dartWasmDatabaseWebFlutterがあってもなくても動作します。少し追加の設定が必要です。
package:drift/web.dartWebDatabaseWebWasmDatabase に置き換えるため非推奨です。

共有コードベースで全プラットフォームをサポートするには、データベースを開く方法を変更するだけでよく、その他の使い方は同じです。 このリポジトリでは、条件付きインポートを使った方法を紹介しています。

モバイル対応(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バージョンを上書きすることはできません。

ffiとAndroidに関するメモ