プラットフォームAPI
ネイティブ機能にアクセスします
「プラットフォームAPI」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
ネイティブ機能へのアクセス
共有コードから、ストレージ、設定、時計、ネットワークエンジンなどのデバイス機能が必要になることがあります。KMMには、ネイティブAPIにきれいにアクセスする方法がいくつか用意されています。
プリミティブ値のexpect/actual
プラットフォーム固有の小さな値には、expect/actualを使用します。共通コードをすっきり保ちながら、各プラットフォームで詳細を実装できます。
// commonMain
expect fun currentTimeMillis(): Long
// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()プラットフォームコードの依存性注入
より柔軟な方法として、共通コードでインターフェースを定義し、各アプリからプラットフォームの実装を注入します。
// commonMain
interface Storage {
fun save(key: String, value: String)
fun load(key: String): String?
}Androidでの実装
Androidでは、SharedPreferencesを使ってインターフェースを実装し、共有コードに提供します。
// androidMain
import android.content.SharedPreferences
class AndroidStorage(private val prefs: SharedPreferences) : Storage {
override fun save(key: String, value: String) {
prefs.edit().putString(key, value).apply()
}
override fun load(key: String): String? = prefs.getString(key, null)
}iOSでの実装
iOSでは、FoundationフレームワークのNSUserDefaultsを使って同じインターフェースを実装します。
// iosMain
import platform.Foundation.NSUserDefaults
class IosStorage : Storage {
private val defaults = NSUserDefaults.standardUserDefaults
override fun save(key: String, value: String) = defaults.setObject(value, key)
override fun load(key: String): String? = defaults.stringForKey(key)
}iOSのネイティブAPIを呼び出す
iosMainからは、Appleのフレームワークを直接呼び出せます。Kotlin/Nativeがそれらのフレームワーク用の相互運用バインディングを生成するためです。
import platform.UIKit.UIDevice
fun deviceModel(): String = UIDevice.currentDevice.modelAndroid APIを呼び出す
androidMainでは、Androidプラットフォームに対してコンパイルされるため、Android SDK全体を利用できます。
import android.os.Build
fun deviceModel(): String = Build.MODEL既存のマルチプラットフォーム対応ライブラリ
多くの場合、独自の相互運用処理は必要ありません。一般的な機能をすでにラップしているライブラリがあります。
- multiplatform-settings — キーと値のストレージ
- Ktor — ネットワーク通信
- SQLDelight — ローカルデータベース
実装を提供する
通常はKoinのようなDIフレームワークを使い、アプリの起動時にプラットフォームの実装を注入します。これにより、共有コードは適切な実装を受け取れます。
// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injectedアプローチを選ぶ
指針:
- 小さな値 →
expect/actual - 複数のメソッドを持つ振る舞い → インターフェース+注入
- 一般的な用途 → 既存のマルチプラットフォーム対応ライブラリを使用
実行できる抽象化の例
インターフェースの考え方は、通常のKotlinで表現できます。ここでは、インメモリ実装をプラットフォームのストレージの代わりに使用します。
interface Storage {
fun save(key: String, value: String)
fun load(key: String): String?
}
class MemoryStorage : Storage {
private val map = mutableMapOf<String, String>()
override fun save(key: String, value: String) { map[key] = value }
override fun load(key: String): String? = map[key]
}
fun main() {
val s: Storage = MemoryStorage()
s.save("name", "Ada")
println(s.load("name"))
}確認問題
複数のメソッドを持つストレージ機能が必要で、各プラットフォームで異なる実装を行い、簡単にテストできるようにしたいとします。推奨されるアプローチはどれですか?
まとめ
ネイティブ機能には、次の方法できれいにアクセスできます。
expect/actualはプリミティブ値に使用する- 振る舞いには、共通インターフェースと注入したプラットフォーム実装を使用する
androidMain/iosMainで直接相互運用する- 可能な場合はマルチプラットフォーム対応ライブラリを再利用する
これでKMM Basicsコースは完了です。
よくある質問
「プラットフォームAPI」レッスンは無料ですか?
はい。「プラットフォームAPI」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「プラットフォームAPI」で何を学びますか?
ネイティブ機能にアクセスします ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「プラットフォームAPI」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- KMMプロジェクト構成
- expectとactual
- ビジネスロジックの共有
- プラットフォームAPI