6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

dependenciesの定義場所で変わるビルドの世界(AGP vs KMP)

Last updated at Posted at 2025-06-09

Kotlin Multiplatform(KMP)プロジェクトにおいて、Gradleのdependencies定義に混乱したことはありませんか?

特に、「トップレベルのdependenciessourceSets内のdependenciesって何が違うの?」「依存関係どっちのdependenciesに追加したらいいの?」と感じた方も多いはずです。

本記事では、Android Gradle Plugin(AGP)とKMPプラグインがそれぞれ管理するdependenciesの違いをわかりやすく整理します。

Gradleプラグインの役割整理

🔧 Android Gradle Plugin(AGP)

公式ドキュメント によれば、AGPは Android特有のビルド処理 を行うGradle拡張プラグインです。

plugins {
    alias(libs.plugins.androidApplication)
    // → "com.android.application"
}

これにより、Androidアプリ向けのビルド設定が自動化されます。

🌐 Kotlin Multiplatform Plugin(KMP)

KMP公式ガイド によれば、KMPプラグインは 共通のKotlinコードを複数プラットフォームにコンパイル する仕組みを提供します。

plugins {
    alias(libs.plugins.kotlinMultiplatform)
    // → "org.jetbrains.kotlin.multiplatform"
}

Q. AGPとKMP、どちらかだけでOK?

A. NO!

KMPプロジェクトにおいても、AndroidビルドにはAGPが必須です。

AGPとKMPは以下のような住み分けで動作します:

プラグイン 主な責任
AGP Android向けビルドタスクの処理
KMP 共通コード・マルチプラットフォーム出力の管理

dependencies の違い:定義場所で作用範囲が異なる!

1. トップレベルの dependencies

dependencies {
    implementation("androidx.core:core-ktx:1.10.1")
}
  • 管理者:AGP
  • 対象範囲:Androidモジュール全体
  • Androidアプリ単体でビルドしているときと同様の扱い

2. sourceSets 内の dependencies

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
            }
        }
    }
}
  • 管理者:KMPプラグイン

  • 対象範囲:プラットフォーム別のコードベース

    • 例:commonMain, androidMain, iosMain など

Q. なぜ commonMain の依存関係が androidMainiosMain からも参照できるの?

A. commonMain は各プラットフォームのベースになるからです。

KMPでは、commonMainが基底ソースセットとして機能し、各プラットフォームのソースセット(androidMainiosMainなど)がこれを「継承」する構造になっています。

これはGradleのマルチプラットフォームプラグインが持つ 暗黙的な継承機構 に基づいています。

参考:The basics of Kotlin Multiplatform project structure - SourceSets

まとめ

  • AGPとKMPは別々の目的で動作している
  • dependenciesの定義場所で作用範囲が変わる
  • commonMainの依存関係は、プラットフォーム側でも使えるように設計されている

おわりに

KMP導入初期にぶつかりがちなこの依存関係の違い、理解が進めば柔軟なアーキテクチャ設計が可能になります。

似たような悩みを持っている方は多いと思うので、本記事がその一助となれば幸いです 🙌

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?