KC Blog

【Compose Multiplatform】SqlDelightデータベースの実装

4 min read
CrossPlatform#CMP#Kotlin#SqlDelight

はじめに

Compose Multiplatformプロジェクトでは

クロスプラットフォームのデータベース操作をどのように実装できるでしょうか?

SqlDelightは強力なソリューションを提供します

本記事では、クロスプラットフォーム環境で

SqlDelightを使用してデータベース操作を行う方法を紹介します

{% include table/compose-multiplatform-category.html %}

実装手順

1. SqlDelightのインポート
まず、プロジェクトにSqlDelightをインポートします:

.tomlファイルに追加:

build.gradle.ktsにプラグインと依存関係を追加:

  • まずプラグインを追加
  • 次に各環境に対応するライブラリを追加
  • 最後にkotlinの下にSqlDelightの設定を追加

これは、test.your.package.dbパッケージにAppDatabaseという操作可能なクラスが作成されると理解できます

2. データベーステーブルの実装
- commonMain/`sqldelight`/databaseディレクトリに.sqファイルを作成:

現在のバージョンでは、次のステップでビルドプロセスが操作可能なクラスを正常に生成するためには、 上記のパスにsqldelightフォルダを追加する必要があることを確認しました 截圖 2024-07-09 下午3.11.59.png

  • (オプション) 同名のSqlDelightプラグインをダウンロードすると、右クリックで.sqファイルを生成できます(マーケットプレイスからダウンロード可能)

参考 sqldelight

截圖 2024-07-09 下午3.11.59.png

  • 上記のように設定し、ビルドした後

    /build/generated/sqldelight/code/..パスに対応するクラスが生成されます

  • またはコマンドを使用してビルドすることもできます

    ./gradlew generateCommonMainAppDatabaseInterface

  • iOSのビルドが失敗する場合は、build.gradle.ktsのisStaticをfalseに変更できます

3. プラットフォーム固有の実装作成
異なるプラットフォーム用のDatabaseDriverFactoryを作成:
4. 実際の使用法
生成されたDBクラスを使用してビジネスロジックを実装:
5. Koinの注入(オプション)
依存性注入にKoinを使用する場合

このように設定できます

注意点

  1. SqlDelightバージョン2.0.0のiOSビルド失敗の既知の問題を避けるため、バージョン2.0.1を使用することをお勧めします

詳細については、こちらのディスカッションスレッドをご覧ください:こちらをクリック

  1. iOSビルドが失敗する場合は、isStaticをfalseに設定してみてください

なぜこの変更が必要なのかは不明です

おそらく公式の回避策です

公式ドキュメントには直接この方法が記載されています

まとめ

  • SqlDelightは強力なクロスプラットフォームデータベースソリューションを提供します
  • 適切なカプセル化により、異なるプラットフォーム間で統一されたデータベースAPIを使用できます
  • Koinなどの依存性注入フレームワークと組み合わせることで、データベースインスタンスをより適切に管理できます
  • クロスプラットフォームの互換性を確保するために、バージョン選択とプラットフォーム固有の実装に注意してください