現在のJiuJitsuScoreBoardアプリはスタンドアロン(1台完結)で、データはすべてインメモリに保持している。 しかし将来的に、以下のような機能を追加する場合はクラウド側のバックエンドが必要になる。
これらを自前のサーバーで一から構築するのは個人開発ではコストが高すぎるため、BaaS(Backend as a Service) を利用するのが現実的。
KMPプロジェクトで利用可能なBaaSは、主に以下の2つが候補となる。
Googleが提供するBaaS。Android開発では最もメジャーな選択肢。
expect/actual を使ったカスタムラッパーを自前で作るケースもある。PostgreSQLベースのオープンソースBaaS。「Firebaseのオープンソース代替」として急成長中。
StateFlow、データベースクエリに型付きFilter DSL を採用しており、KMPのエコシステムと親和性が高い。Ktor(HTTPクライアント)や kotlinx.serialization(JSONパーサー)をそのまま活用できる。| 観点 | Firebase | Supabase |
|---|---|---|
| KMP公式SDK | ❌ なし(コミュニティ製ラッパー) | ❌ なし(コミュニティ製だが非常に充実) |
| DB | NoSQL (Firestore) | SQL (PostgreSQL) |
| リアルタイム同期 | ✅ Firestore Realtime | ✅ Realtime (WebSocket) |
| 認証 | ✅ Firebase Auth | ✅ Supabase Auth |
| Ktor との親和性 | △(ラッパー経由) | ◎(Ktor エンジンを直接利用) |
| ベンダーロックイン | 高い(Google依存) | 低い(セルフホスト可能) |
| 日本語情報の多さ | ◎ 豊富 | △ まだ少なめ |
KMPで新規にクラウド連携を構築するなら、Supabase + supabase-kt が現時点では最も相性が良い。理由は以下の通り。
ただし、既にFirebaseの経験があるチームや、FCM(プッシュ通知)を多用する要件がある場合は、Firebase + GitLive SDKも十分に選択肢になり得る。
// Supabase クライアントの初期化 (commonMain)
val supabase = createSupabaseClient(
supabaseUrl = "https://your-project.supabase.co",
supabaseKey = "your-anon-key"
) {
install(Postgrest) // DB操作
install(Auth) // 認証
install(Realtime) // リアルタイム同期
}
// データの取得(型安全)
@Serializable
data class MatchHistory(
val id: Int,
val winnerName: String,
val score: String
)
suspend fun getMatchHistory(): List<MatchHistory> {
return supabase.from("match_history")
.select()
.decodeList<MatchHistory>()
}
// リアルタイム購読(スコアの変更を監視)
val channel = supabase.channel("match-updates")
val changeFlow = channel.postgresChangeFlow<PostgresAction.Update>(schema = "public") {
table = "live_match"
}
changeFlow.collect { change ->
println("スコアが更新されました: ${change.record}")
}
channel.subscribe()