Kotlin Multiplatformでマルチモジュール構成にする
/ 4 min read
Updated:Table of Contents
はじめに
UIをCompose Multiplatform(CMP)で作りつつ、ロジックをKotlin Multiplatform(KMP)で作っている中で、ロジック部分をマルチモジュール構成で実装しようとしました。
いつもAndroidでマルチモジュールを作る時は、Android Studioが提供しているテンプレート経由で作るので、特に何も考えずに実装できるのですが、KMPではそのままAndroid Studioのテンプレートを使えませんでした。
どうにか苦労して実装出来たので、今回は特に苦労した点を中心に紹介します。
実際にマルチモジュール構成にしたコードはGitHubで公開しています。
Android StudioにKMPでマルチモジュールを作る場合のテンプレートがないので、リポジトリにcloneして一部設定を書き換えれば使える、モジュールのテンプレートも作成して公開しました。
GitHub - Tatsumi0000/KMP-MultimoduleTemplate: KMP multimodule template 🧏
苦労した点
メインのモジュール(composeAppのcommonMain)で使いたかったのですが、どうやっても使えません(クラスが認識されない)でした。全てで認識されないならまだしも、AndroidやiOSのパッケージでは認識されているので思い当たる原因が全くありませんでした…
そこで、GitHubをそれっぽいワードで検索してみると、こちらのリポジトリを見つけました。見つけたリポジトリのパッケージのディレクトリ構成がcommonMain/kotlin/com.macaosoftware.plugin のようになっていましたが、自分はmain/java/love.aespa.nct_deck.shared.hoge のようにしていました。試しにディレクトリを同じようにcommonMainを含むcommonMain/kotlin/nct_deck.shared.hogeにしたところクラスが認識されるようになりました。
どうやら、commonMain は特別?なのかcommonMainを含んでないとだめっぽいのが原因でした。これにたどり着くまでに2日も溶かしました🫠
終わりに
KMPのcommonMain 内でマルチモジュール構成で定義したクラスを呼び出すまでにやったことを紹介しました。いつも自動でIDEが生成してくれるので、あまりにディレクトリ構成やgradleに注意を払うことはありませんが、いざ自分で1からやると、かなり苦労しました。そろそろきちんと、gradleの書き方も習得する必要があるなと身にしみました…