【Compose Multiplatform】SqlDelightデータベースの実装
2024, Jul 10
はじめに
Compose Multiplatformプロジェクトでは
クロスプラットフォームのデータベース操作をどのように実装できるでしょうか?
SqlDelightは強力なソリューションを提供します
本記事では、クロスプラットフォーム環境で
SqlDelightを使用してデータベース操作を行う方法を紹介します
目錄
- 【Compose Multiplatform】專案轉移探討與開發指南
- 【Compose Multiplatform】手機使用依賴注入Koin
- 【Compose Multiplatform 】跨平台App但Android需要context作法並搭配Koin
- 【Compose Multiplatform】手機本地持久化儲存DataStore實作
- 【Compose Multiplatform】手機資料庫SqlDelight實作
- 【Compose Multiplatform】CMP中使用ROOM開發資料庫 - [KSP2] Annotation value is missing in nested annotations
- 【Compose Multiplatform】CMP專案中導入CocoaPods及無CocoaPods情況下使用IOS Swift/Obj-C
実装手順
1. SqlDelightのインポート
まず、プロジェクトにSqlDelightをインポートします:
.tomlファイルに追加:
build.gradle.ktsにプラグインと依存関係を追加:
- まずプラグインを追加
- 次に各環境に対応するライブラリを追加
- 最後にkotlinの下にSqlDelightの設定を追加
これは、test.your.package.db
パッケージにAppDatabase
という操作可能なクラスが作成されると理解できます
2. データベーステーブルの実装
-
commonMain/
sqldelight
/databaseディレクトリに.sqファイルを作成:
現在のバージョンでは、次のステップでビルドプロセスが操作可能なクラスを正常に生成するためには、 上記のパスにsqldelightフォルダを追加する必要があることを確認しました - (オプション) 同名の
SqlDelight
プラグインをダウンロードすると、右クリックで.sqファイルを生成できます(マーケットプレイスからダウンロード可能)
参考 sqldelight
- 上記のように設定し、ビルドした後
/build/generated/sqldelight/code/..
パスに対応するクラスが生成されます - またはコマンドを使用してビルドすることもできます
./gradlew generateCommonMainAppDatabaseInterface
- iOSのビルドが失敗する場合は、build.gradle.ktsのisStaticをfalseに変更できます
3. プラットフォーム固有の実装作成
異なるプラットフォーム用のDatabaseDriverFactoryを作成:
4. 実際の使用法
生成されたDBクラスを使用してビジネスロジックを実装:
5. Koinの注入(オプション)
依存性注入にKoinを使用する場合
このように設定できます
注意点
- SqlDelightバージョン2.0.0のiOSビルド失敗の既知の問題を避けるため、バージョン2.0.1を使用することをお勧めします
詳細については、こちらのディスカッションスレッドをご覧ください:こちらをクリック - iOSビルドが失敗する場合は、isStaticをfalseに設定してみてください
なぜこの変更が必要なのかは不明です
おそらく公式の回避策です
公式ドキュメントには直接この方法が記載されています
まとめ
- SqlDelightは強力なクロスプラットフォームデータベースソリューションを提供します
- 適切なカプセル化により、異なるプラットフォーム間で統一されたデータベースAPIを使用できます
- Koinなどの依存性注入フレームワークと組み合わせることで、データベースインスタンスをより適切に管理できます
- クロスプラットフォームの互換性を確保するために、バージョン選択とプラットフォーム固有の実装に注意してください