https://github.com/uzzu/kotlin-mpp-boilerplate
スマフォからの投稿テストも兼ねて、kotlin-mpp-boilerplateを作ったので解説。
Kotlin Multi Platform Projectというものがありまして、公式で作り方の解説がされてる訳ですけど、雑に作るならまだしも真面目にやるとなると厳しいポイントがいくつかあります。
Project structureが小規模向けだなーというのが1つ。 1subprojectに何でもかんでも入れる事の苦痛はAndroidでのproduct flavorなりで十分に味わいました。もうたくさんです。規模が大きくなる事を想定して面倒でも分けます。
Gradle Kotlin DSL対応状況がまだ微妙。もうGradje Kotlin DSLでの書きやすさを知ってしまった以上、もうGroovy DSLでは書きたくない。
テストを書ける環境は最初から整ってて欲しい。毎回書き直すのは億劫。
最初からsubpprojectを沢山用意する想定でのdirectory structureを組みたい。
そんなこんなで、Gradle5.0でGradle Kotlin DSLを吐くようになったり、IDEAがNew Projectで Multi Platform Projectを吐いてくれた所で自分には使えません。ならboilerplateなりinit scriptを書くしかない訳ですが、boilerplateを書きました。
ベストとは言い難いですが取り急ぎこれくらいやっておけば最低限なんとかなるかなというラインまで持っていってます。この最低限のラインに持っていく為に、GroovyBuilderの力を借りるしかもう打つ手なしという状況になってしまったのが悔しい。しょうがない。
Kotlin/Native pluginが GRADLE_METADATA
非対応の為、settings.gradle.kts上ではコメントアウトしてます。Kotlin/Native使わない場合はsubproject削除の際こちらのコメントアウトを外しましょう。
root project上のbuildscript blockをなくしたかったけど、これはそもそものGradle Pluginの作りが古いようだ?まあそもそもpluginManagementがexperimentalだししょうがない。
Unit Testにはkotlin.test、kotlinx.coroutines.test、Junit5、Mockk、assertkを積んでいます。assertkはKotlin/Native対応中なので、compileTestを無効にしています。JS環境ではJUnit TestはMochaに、(無効にしてるけど)iOSではテストアプリをxcrunでシミュレータ実行します。
残念ながらまだandroidx.testが動かんのですが、普通にJUnit5テスト書ければ一旦まあいいでしょう。multidex周りのあれでまあ気が向いたらやるだけだけど、自分には不要なんでやる気はそんなにない(example projectでのandroidTestは別途作るわけだし)
取り急ぎこれで自分は快適にやれそうな雰囲気はある。色々やり始めるとダメかもしれないけど。
なんか他書き忘れがあったら追記するけど、スマフォ入力疲れた。ご自由にコピってどうぞ。