CocoaPods Plugin — 概要、KMM用プラグインと設定

著者: IT Sectr 公開日: 2026-06-05 読了時間: 8 分

CocoaPods Pluginは、Kotlin Multiplatform Mobile用のGradleプラグインで、CocoaPods依存関係マネージャーをKMMプロジェクトのビルドシステムに直接統合します。このプラグインを使用すると、build.gradle.ktsでiOS依存関係(ポッド)を直接宣言し、Podfileを自動生成し、ポッドをインストールしてKotlinコードにリンクできます。.xcworkspaceを手動で管理する代わりに、開発者はGradleを介してiOS依存関係を管理するため、KMMプロジェクトのセットアップが完全に再現可能になります。JetBrains、2025によると、このプラグインはKMMプロジェクトの20%でiOSライブラリの管理に使用されています。

重要なポイント

  • CocoaPods Pluginは、CocoaPodsをKotlin Multiplatform Mobileと統合するためのGradleプラグインです。
  • 自動化 — プラグインがPodfileを生成し、Gradleからポッド依存関係を管理します。
  • Podfileは、プラグインが自動的に作成および保守するCocoaPodsの設定ファイルです。
  • .xcworkspaceは、プラグインがiOSプロジェクトとの統合のために生成するXcodeワークスペースです。
  • KMM統合 — プラグインがKotlin/NativeフレームワークをiOSポッド依存関係にリンクします。

CocoaPods Pluginとは?

CocoaPods Plugin(kotlin.cocoapodsとしても知られる)は、CocoaPodsをKotlin Multiplatform Mobileと統合するためのJetBrains公式プラグインです。このプラグインはKotlin Gradle DSLの一部であり、KMMモジュールのbuild.gradle.ktsで直接設定されます。Podfileの作成と保守、.xcworkspaceの生成、ポッド依存関係の管理を自動化し、手動によるXcodeプロジェクト設定を不要にします。

CocoaPods Plugin以前は、KMM開発者はPodfileを手動で作成し、pod installを実行し、ブリッジヘッダーを設定し、Gradle依存関係とは別にポッドバージョンを追跡する必要がありました。これにより、バージョンの非同期化やCI/CDパイプラインでの困難が生じていました。プラグインは、iOS依存関係管理をAndroidモジュールでのGradle依存関係管理と同じくらい簡単にすることで、これらの問題を解決しました。

プラグインは、CocoaPods Trunkからのパブリックポッドとプライベートリポジトリからのカスタムポッドの両方をサポートしています。ローカルPodspecおよびgitベースのリポジトリでの作業もサポートされています。プラグインはKotlin 1.6.0以上と互換性があり、開発マシンにCocoaPods(gem install cocoapods)がインストールされている必要があります。

CocoaPods Pluginの仕組み

CocoaPods PluginはGradleタスクグラフレベルで動作し、CocoaPodsを操作するための専門タスクを追加します。主要なタスクには、podInstall(ポッドのインストール)、podGenXcodeWorkspace(.xcworkspaceの生成)、podBuildDebugFramework(フレームワークのDebugバージョンのビルド)が含まれます。プラグインはbuild.gradle.ktsのcocoapodsセクションを分析し、宣言された依存関係に基づいてPodfileを作成し、必要なパラメーターでpod installを実行します。

プラグインのアーキテクチャには3つのコンポーネントがあります:build.gradle.kts用のDSL拡張、Podfileを作成するPodfileジェネレーター、.xcworkspaceを設定するXcode統合レイヤーです。DSL拡張は、依存関係を宣言するためのネストされたpod()関数、プライベートリポジトリを指定するためのspecRepo()、出力フレームワークを設定するためのframework { }を備えたcocoapods { }ブロックを提供します。Podfileジェネレーターはこれらの宣言をCocoaPodsが理解できるRuby構文に変換します。

kotlin
kotlin {
    cocoapods {
        summary = "Shared module for iOS project"
        homepage = "https://itsectr.com"
        framework {
            baseName = "Shared"
            isStatic = true
            export(project(":core"))
        }
        pod("Alamofire") {
            version = "~> 5.9"
        }
        pod("Kingfisher") {
            version = "7.12"
        }
    }
}

podInstallタスクのライフサイクル

podInstallを実行すると、プラグインは順次:プロジェクトルートにPodfileを生成し、コマンドラインからpod installを実行し、.xcworkspaceを生成し、ポッドバージョンが宣言されたものと一致することを確認し、Podfile.lockをキャッシュします。設定変更がない後続の実行では、Podfile.lockが変更されていない場合、podInstallはスキップされます。これにより、クリーンインストールでpod installに最大2〜3分かかる可能性があるCI/CDで時間を節約できます。

KMMプロジェクトでのCocoaPods Pluginのセットアップ

CocoaPods Pluginのセットアップにはいくつかの手順が必要です。開発マシンへのCocoaPodsのインストール(gem install cocoapods)が前提条件です。次に、sharedモジュールのbuild.gradle.ktsに、フレームワーク設定と依存関係を含むcocoapods { }ブロックを追加します。設定後、podInstallタスクを実行すると、Podfileが作成されポッドがインストールされます。生成された.xcworkspaceは、Podfileの横のプロジェクトルートに配置されます。

プラグインはXcode Build Phasesと統合します。iOSアプリをビルドする際、XcodeはembedAndSignAppleFrameworkForXcodeを実行します。これはKotlin/Nativeフレームワークをアプリバンドルにコピーするタスクです。CocoaPods Pluginは.xcworkspaceを生成する際に、このビルドフェーズを自動的に追加します。.xcworkspaceが生成された場合は、ポッド依存関係で正しくビルドするために、.xcodeprojの代わりにそれを開く必要があります。

手順説明コマンド / 操作
1CocoaPodsをインストールgem install cocoapods
2build.gradle.ktsにプラグインを追加kotlin { cocoapods { ... } }
3ポッドを宣言pod("Alamofire") { version = "5.9.0" }
4Podfileを生成./gradlew :shared:podInstall(自動)
5.xcworkspaceを開く.xcodeprojの代わりに
6iOSアプリをビルドXcode Build(⌘B)

コード例:ポッド設定

CocoaPods Pluginでポッドを宣言するさまざまなシナリオを見てみましょう。基本的なケースは、バージョンを指定してCocoaPods Trunkからパブリックポッドを接続することです。より複雑なシナリオには、カスタムpodspec、ローカルポッド、gitリポジトリからのポッドの使用が含まれます。

kotlin
kotlin {
    iosArm64()
    iosSimulatorArm64()

    cocoapods {
        framework {
            baseName = "Shared"
            isStatic = false
        }

        // CocoaPods Trunkからのパブリックポッド
        pod("Alamofire") { version = "5.9.0" }

        // 演算子付きカスタムバージョン
        pod("SnapKit") { version = "~> 5.6" }

        // プライベートリポジトリからのポッド
        specRepo("https://git.itsectr.com/specs.git",
            "internal-specs")
        pod("InternalAnalyticsPod")

        // パス付きローカルポッド
        pod(name = "CustomPod",
            localPath = "./ios-pods/CustomPod")

        // gitリポジトリからのポッド
        pod(name = "PrivateSDK",
            git = "https://git.itsectr.com/ios/sdk.git",
            tag = "2.1.0")
    }
}

ポッドの接続は設定の一部にすぎません。プラグインは、他のKotlinモジュールからiOSフレームワークへの依存関係のエクスポートも可能にします。export(project(":core"))関数は、:coreモジュールのすべてのパブリックAPIが生成されたフレームワークのObjective-Cヘッダーからアクセス可能である必要があることを指定します。これは、共有Kotlinコードが別のモジュールのクラスを使用し、それらがSwiftからアクセス可能である必要がある場合に必要です。

kotlin
cocoapods {
    framework {
        baseName = "Shared"
        // モジュールをiOSフレームワークにエクスポート
        export(project(":network"))
        export(project(":domain"))

        // 静的または動的リンク
        isStatic = true
    }

    // エクスポートされたモジュールに必要なポッド
    pod("Moya") { version = "15.0" }
}

ビルドとテスト

設定後、Podfileを生成して依存関係をインストールするためにpodInstallを実行する必要があります。次に、生成された.xcworkspaceをXcodeで開き、標準的な方法でアプリをビルドできます。CI/CDの場合は、ビルドマシンにCocoaPodsとRubyがインストールされていることを確認してください。プラグインはCI環境で動作するための--no-daemonフラグをサポートしています。

kotlin
// ポッドをインストールするとPodfile + xcworkspaceが生成されます
./gradlew :shared:podInstall

// テスト用のデバッグフレームワークをビルド
./gradlew :shared:podBuildDebugFramework

// コマンドラインから完全なiOSビルド
xcodebuild -workspace ios-app.xcworkspace \
    -scheme ios-app -configuration Debug

CocoaPods Plugin vs Swift Package Manager

Swift Package Manager(SPM)はAppleの代替依存関係マネージャーであり、人気が高まっており、iOSコミュニティで徐々にCocoaPodsを置き換えつつあります。しかし、CocoaPods Pluginはいくつかの理由で依然として重要です。SPMはKMMコンテキストで動的フレームワークをサポートしておらず、SPMを介したKotlin/Nativeフレームワークの統合には追加の設定が必要です。CocoaPods Pluginはより成熟して文書化された統合パスを提供します。

CocoaPods Pluginと直接SPM統合の比較では、前者が自動化で優れ、後者がネイティブAppleサポートで優れていることが示されています。CocoaPods PluginはPodfileを自動生成し、バージョンを管理し、Xcode Build Phasesを設定します。SPMはPackage.swiftを介してKotlinフレームワークを手動で接続する必要があり、大規模なKMMプロジェクトでは保守が困難です。JetBrainsはKotlin/NativeのSPMサポートに取り組んでいますが、2025年時点ではSPM統合は実験的なままです。

特性CocoaPods PluginSwift Package Manager
成熟度本番環境対応実験的
Podfile生成自動該当なし
動的フレームワーク対応制限あり
CI/CD設定簡単(Gradleタスク)手動手順が必要
プライベートリポジトリ対応(specRepo)対応(URL)
ネイティブAppleサポートCocoaPods経由ネイティブ

一般的な問題と解決策

CocoaPods Pluginを使用する際、KMM開発者はいくつかの典型的な問題に直面します。ポッドのバージョン競合が最も一般的な問題で、2つのポッドが同じ依存関係の異なるバージョンを必要とする場合です。解決策は、pod("Dependency") { version = "x.x" }を介して競合する依存関係のバージョンを明示的に指定することです。2つ目の一般的なケースはバージョンの非互換性で、ポッドがKMMプロジェクトの最小バージョンよりも新しいiOS SDKを必要とする場合です。

.xcworkspaceの問題は、プラグイン設定後に.xcodeprojを.xcworkspaceの代わりに開いた場合に発生します。プラグインはpodInstallログでこれについて警告します。もう1つの頻繁なエラーは、開発マシンにCocoaPodsがないことです。プラグインはpodInstallを実行する前にpodコマンドの存在を確認し、明確なエラーメッセージを表示します。CI/CDの場合は、CocoaPodsをインストールしてください:gem install cocoapods。

kotlin
// バージョン競合を解決
cocoapods {
    pod("Alamofire") { version = "5.9.0" }
    // 競合を明示的に解決
    pod("Alamofire") {
        version = "5.9.0"
        options[name] = mapOf("force" to true)
    }
}

// Gradle経由でCocoaPodsインストールを確認
tasks.register("checkCocoapods") {
    doLast {
        val result = "pod --version".runCommand()
        println("CocoaPodsバージョン:$result")
    }
}

podInstallのデバッグ

podInstallが失敗した場合は、詳細な出力のために--infoフラグを使用してください:./gradlew podInstall --info。プラグインは各ステップ(Podfile生成、pod installの実行、Podfile.lockの解析)をログに記録します。ほとんどの場合、エラーはネットワークの問題(CocoaPods Trunkにアクセスできない)またはPodfileの構文エラーに関連しています。そのような場合は、プロジェクトルートでpod installを手動で実行して、CocoaPodsからより詳細なエラーメッセージを取得してみてください。

よくある質問

Swift Package Managerのみを使用している場合、CocoaPods Pluginは必要ですか?

すべてのiOS依存関係がSPMで管理されている場合、CocoaPods Pluginは必要ありません。プラグインはCocoaPodsとの統合に必要です。JetBrainsはSPMサポートに取り組んでいますが、2025年時点では実験的です。

CocoaPods Pluginはビルド時間にどのような影響を与えますか?

ビルド時間は、最初のpodInstall実行時(Podfile生成+ポッドインストール)にのみ増加します。後続のビルドではPodfile.lockキャッシュを使用します。Kotlin/Nativeフレームワークのビルド自体はポッドに依存しません。

プライベートpodspecリポジトリを使用できますか?

はい、プラグインはプライベートリポジトリを接続するためのspecRepo機能をサポートしています。specRepoにリポジトリURLと名前を指定すると、そのリポジトリのポッドが宣言可能になります。

podInstallがエラーで失敗した場合、どうすればよいですか?

詳細なエラーメッセージを得るために、プロジェクトルートで手動でpod installを実行してください。CocoaPods Trunkへの接続、ポッドバージョンの正確さ、マシン上のRubyの存在を確認してください。

Podfile.lockをgitにコミットする必要がありますか?

はい、再現可能なビルドのためにPodfile.lockをコミットする必要があります。CocoaPods PluginはPodfileを生成しますが、Podfile.lockはpod install中にインストールされた正確なポッドバージョンを固定します。

まとめ

  • CocoaPods Pluginは、CocoaPodsをKMMと統合し、iOS依存関係管理を自動化するGradleプラグインです。
  • Podfileと.xcworkspaceはpodInstallタスクによって自動生成され、手動によるXcode設定を不要にします。
  • 柔軟な設定は、パブリックポッド、プライベートspecRepo、ローカルおよびgitベースの依存関係をサポートします。
  • export()によるモジュールエクスポートにより、KotlinモジュールAPIがObjective-C/Swiftからアクセス可能になります。
  • 静的および動的リンクは、フレームワークのisStatic設定を通じて利用可能です。
  • CI/CDは、後続のビルドを高速化するためのPodfile.lockキャッシングを備えたGradleタスクグラフを介してサポートされています。
  • KMMプロジェクトにSPMではなくCocoaPodsで管理されるiOS依存関係がある場合は、CocoaPods Pluginを使用してください。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください