Skip to content

はじめに

Compose UI

一般的なCompose UIプロジェクトでは、以下をインポートする必要があります。

kotlin
implementation("io.coil-kt.coil3:coil-compose:3.3.0")
implementation("io.coil-kt.coil3:coil-network-okhttp:3.3.0")

インポート後、AsyncImage を使用してネットワークから画像を読み込むことができます。

kotlin
AsyncImage(
    model = "https://example.com/image.jpg",
    contentDescription = null,
)

::: Note Compose Multiplatformを使用する場合、OkHttpの代わりにKtorを使用する必要があります。その方法についてはこちらを参照してください。

:::

Android Views

Compose UIの代わりにAndroid Viewsを使用する場合は、以下をインポートします。

kotlin
implementation("io.coil-kt.coil3:coil:3.3.0")
implementation("io.coil-kt.coil3:coil-network-okhttp:3.3.0")

インポート後、ImageView.load 拡張関数を使用してネットワークから画像を読み込むことができます。

kotlin
imageView.load("https://example.com/image.jpg")

シングルトン ImageLoader の構成

デフォルトでは、CoilにはシングルトンImageLoaderが含まれています。ImageLoaderは、ImageRequestの取得、デコード、キャッシュ、および結果の返却を行うことで、受信するImageRequestを実行します。ImageLoaderを構成する必要はありません。構成しない場合、Coilはデフォルト設定でシングルトンImageLoaderを作成します。

いくつかの方法で構成できます(いずれか1つを選択してください)。

  • アプリのエントリポイント(アプリのルート@Composable)付近でsetSingletonImageLoaderFactoryを呼び出す。これはCompose Multiplatformアプリに最適です。
kotlin
setSingletonImageLoaderFactory { context ->
    ImageLoader.Builder(context)
        .crossfade(true)
        .build()
}
  • Androidで、ApplicationSingletonImageLoader.Factoryを実装する。これはAndroidアプリに最適です。
kotlin
class CustomApplication : Application(), SingletonImageLoader.Factory {
    override fun newImageLoader(context: Context): ImageLoader {
        return ImageLoader.Builder(context)
            .crossfade(true)
            .build()
    }
}
  • アプリのエントリポイント(例:AndroidのApplication.onCreate)付近でSingletonImageLoader.setSafeを呼び出す。これが最も柔軟な方法です。
kotlin
SingletonImageLoader.setSafe { context ->
    ImageLoader.Builder(context)
        .crossfade(true)
        .build()
}

::: Note Coilに依存するライブラリを作成している場合、シングルトンImageLoaderを取得/設定すべきではありません。代わりに、io.coil-kt.coil3:coil-coreに依存し、独自のImageLoaderを作成して手動で渡す必要があります。ライブラリ内でシングルトンImageLoaderを設定すると、そのライブラリを使用しているアプリがCoilも使用している場合に、アプリによって設定されたImageLoaderを上書きしてしまう可能性があります。

:::

アーティファクト

CoilがmavenCentral()に公開している主要なアーティファクトのリストを以下に示します。

  • io.coil-kt.coil3:coil: io.coil-kt.coil3:coil-coreに依存するデフォルトのアーティファクトです。シングルトンImageLoaderと関連する拡張関数が含まれています。
  • io.coil-kt.coil3:coil-core: io.coil-kt.coil3:coilのサブセットで、シングルトンImageLoaderおよび関連する拡張関数は含まれていません
  • io.coil-kt.coil3:coil-compose: io.coil-kt.coil3:coilio.coil-kt.coil3:coil-compose-coreに依存するデフォルトのCompose UIアーティファクトです。シングルトンImageLoaderを使用するAsyncImagerememberAsyncImagePainterSubcomposeAsyncImageのオーバーロードが含まれています。
  • io.coil-kt.coil3:coil-compose-core: io.coil-kt.coil3:coil-composeのサブセットで、シングルトンImageLoaderに依存する関数は含まれていません。
  • io.coil-kt.coil3:coil-network-okhttp: OkHttpを使用してネットワークから画像をフェッチするサポートが含まれています。
  • io.coil-kt.coil3:coil-network-ktor2: Ktor 2を使用してネットワークから画像をフェッチするサポートが含まれています。
  • io.coil-kt.coil3:coil-network-ktor3: Ktor 3を使用してネットワークから画像をフェッチするサポートが含まれています。
  • io.coil-kt.coil3:coil-network-cache-control: ネットワークから画像をフェッチする際に、Cache-Controlヘッダーを尊重するサポートが含まれています。
  • io.coil-kt.coil3:coil-gif: GIFのデコードをサポートするための2つのデコーダーが含まれています。詳細についてはGIFsを参照してください。
  • io.coil-kt.coil3:coil-svg: SVGのデコードをサポートするためのデコーダーが含まれています。詳細についてはSVGsを参照してください。
  • io.coil-kt.coil3:coil-video: Androidがサポートする任意のビデオ形式からフレームをデコードするサポートのためのデコーダーが含まれています。詳細についてはvideosを参照してください。
  • io.coil-kt.coil3:coil-test: テストをサポートするためのクラスが含まれています。詳細についてはtestingを参照してください。
  • io.coil-kt.coil3:coil-bom: ビルオブマテリアルが含まれています。coil-bomをインポートすると、バージョンを指定せずに他のCoilアーティファクトに依存できるようになります。