Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【Kotlin fest2026登壇】ローカルデータベースをRoomで統⼀ ⼤規模求⼈アプリの...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →

【Kotlin fest2026登壇】ローカルデータベースをRoomで統⼀ ⼤規模求⼈アプリのKotlin Multiplatform実践

ディップ株式会社 PRO

November 14, 2026

Transcript

35 slides
  1. Room KMPにおけるDatabase 構築フロー ビルド時 (KSP / Room Compiler) @Database /

    @Dao / @Entity (KMPで定義) ⾃動⽣成 Database / DAO実装 DB定義の共通化 l Entity / DAO / DatabaseをKMPで共通定義 l KSP / Room Compilerが実装コードを⽣成 Builder⽣成と共通設定 実⾏時 l OSごとにDBの保存先を指定してBuilderを⽣成 (各OSごと)Builder生成 l KMP側でSQLiteDriverなどの共通設定を適⽤ l build() でDatabaseインスタンスを構築 (KMP)Builderへの共通設定 build() Room Databaseインスタンス ※Builderとは、Room Databaseの設定(保存先やDriverなど) を含むオブジェクト
  2. SQLiteDriverについて Room KMPで、利⽤するSQLiteへの接続⽅法を指定する仕組み Driverの種類 BundledSQLiteDriver NativeSQLiteDriver SQLite本体 同梱される 同梱されない 呼び出し先

    sqlite-bundled内のSQLite ビルド時にリンクされたSQLiteラ イブラリ OS間の⼀貫性 ⾼い ホストOS環境‧リンク構成に依存 選択理由 OS間でSQLiteのバージョン‧機 能を揃えたい OS提供 またはリンク指定した SQLite実装を利⽤したい
  3. Room KMPの進化と採⽤タイミング Room Android ライブラリとして 利用実績を蓄積 2025年4⽉ 2026年7⽉ Room 2.7.0

    Room 3.0 KMP対応がStableへ 2025年 リニューアル プロジェクト開始 正式リリース Room KMPを 採用 現在 Room 2.8.5 を利用
  4. リニューアルアプリでのDB設計 旧アプリのDBを棚卸しし、新アプリに必要なデータを共通Entityと して再設計しました。 旧アプリ iOS: Realm DB Android: Room DB

    主キー‧型/状態の表現‧モ デルの責務がOS間で異なる 再設計 新アプリ ü 旧DBの保存データから新アプ リでも必要なものを選別 KMP 共通Entity ü 重複やOS間の違いを整理し、 共通の責務と構造を決定 共通Entityとして KMPへ集約
  5. 2つのRoom DBと異なるライフサイクル データの内容 検索用 マスター データDB 求人検索に利用 初期データを 同梱 端末へ配置

    差分更新 するデータ データの内容 ユーザー データDB 新規作成∕ 旧DBからの引 き継ぎ ユーザーの 利⽤とともに 蓄積 ユーザーのアプリ データ保護 利⽤に伴って蓄積 されるデータ
  6. OSごとの旧DBを共通Entityに引き継ぐ OSごとに異なる旧DBのモデル定義を共通Entityにマッピング OS別の実装 iOS LegacyMigrationModule 旧Realm DB 旧DBの 読み取り Android

    LegacyMigrationModule 旧Room DB 旧DBの 読み取り 旧アプリの実装を移植 KMP実装 共通Entityへ 変換・保存 新Room DB
  7. iOS: SQLCipherによるDB暗号化の検証 Room KMP導⼊時 SQLCipher検証時 Room Room PRAGMA keyを設定 BundledSQLiteDriver

    NativeSQLiteDriver 呼び出すsqlite3_*APIを SQLCipherへリンク 通常のSQLite SQLCipher 平文DB 暗号化DB
  8. iOSで採⽤した暗号化のアプローチ DBレイヤー アプリケーションレイヤー DB全体を暗号化 機微なフィールドを暗号化 SQLCipher CryptoKit/AES-GCM OS標準の保護 暗号化 ドライバ構成を変更せず、機微なフィール

    SQLite DB ドをアプリケーション層で明⽰的に暗号化 するほうが、保護範囲と運⽤コストのバラ ンスがよいと判断 OS標準の保護 ID コード 101 A01 102 B07 103 C12 氏名
  9. iOS: フィールド暗号化の処理フロー 保存時 → Room DB 暗号化 平文データ DAO DataSource

    復号 読み出し時 ← 機微なフィールド: 暗号文 自前の暗号化I/F FieldCipher 機微性と検索への影響を考慮し、 iOS / Swift CryptoKitFieldCipher ・CryptoKit / AES-GCM ・鍵はKeychainに保管 暗号化するフィールドを選定 実装

More Decks by ディップ株式会社