0Pricing
Kotlin Academy · レッスン

プラットフォーム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.model

Android 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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. KMMプロジェクト構成
  2. expectとactual
  3. ビジネスロジックの共有
  4. プラットフォームAPI
← Kotlin Academyに戻る