【KMM】Kotlin Multiplatform Mobile(KMM)を使ってみた

## 記事概要
最近話題のAndroidでもiOSでも対応するマルチプラットフォーム。
現在はFlutter現場にいますが、kotlinでもマルチプラットフォームが
対応可能ということで、早速触ってみたいと思い本記事を作成しました。

まだFlutterも1年程度しか触ってないのでそっち勉強しろという
状況ではありますが。。。笑

## KMMとは？
簡単に言えば、KotlinでAndroid,iOS両OSの
アプリを作成することができるツールです。

JavaやKotlinのライブラリが使えるなど、
利便性の高さが伺える内容です。

こちらの記事が分かりやすかったです！

https://note.com/juyaki/n/n631f45ae9ae7


## 必要になる環境
・Android Studio 4.0.0以上
※4.0.0の場合、機能が一部制限されてるので4.0.1以上の方がいいらしい。。
・Xcode 11.3以降
・KMMプラグイン (下記参照)

KMMプラグインはAndroid StudioからInstallしましょう！

File>Settings>plugins
で、kotlin multiまで入力すれば出てくるかとおもいます！

![スクリーンショット 2023-04-23 23.04.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/a27c011d-80cd-8453-cd8b-811bc0d7ccfc.png)

環境の情報は公式を参照してそのまま書きました↓

https://kotlinlang.org/docs/multiplatform-mobile-setup.html

## プロジェクト作成
早速HelloWorldを書いていきましょう！
まずはAndroid Studioを開いてください。

NewProject>Kotlin Multiplatform App
を選択します。

![スクリーンショット 2023-04-23 23.05.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/66cb56da-3c70-4afc-6776-0f3fb0a3b977.png)

プロジェクト名を記載して、Nextを押下します。
※保存場所は各自で決めていただけたらと思います

![スクリーンショット 2023-04-23 23.05.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/eac8a446-3173-e52f-d5c9-c90082a2c7d5.png)

次にAndroid・iOS・共有モジュール名を記載し、Finishを押下します。

![スクリーンショット 2023-04-23 23.06.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/3d3f278d-250d-174a-2d3c-29f76b6775a6.png)

これでプロジェクトが完成します。

:::note warn
プロジェクトが完成し、フォルダが閲覧できるまで結構時間が
かかります。

Android初心者の方は中々作成されず焦るかもですが、
ちょっと待ってみてください。。
:::

### プロジェクト完成後

5分くらい待つとプロジェクトが完成し、
下のような画面が出てきます。

![スクリーンショット 2023-04-23 23.06.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/e168beaf-70b2-ba63-3df2-2eb4c8f797c6.png)

さていよいよ動かしてみる訳ですが、
AndroidとiOSそれぞれターゲットを変更する必要があります。

右上の方に以下のようなボタンが並んでるかと思います。
AndroidAppから実施しましょう！

![スクリーンショット 2023-04-24 0.19.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/c4606fc9-4f26-1a94-82d1-93e008736ed2.png)

上記のようにandroidAppに合わせて再生ボタンを押下してください。

### エラーが発生した場合
私の環境ですと以下のエラーが発生しました。
参考になれば幸いです。

```
An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 17 to run. You are currently using Java 11.
      Your current JDK is located in /Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home
      You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing `org.gradle.java.home` in `gradle.properties`.

* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
```

どうやらJava17が必要らしい。。
Java11までしか存在をちゃんと知れてなかったので勉強しないと。。

https://qiita.com/nowokay/items/ec58bf8f30d236a12acb

### エラー解決方法

File>Settings>Build,Execution,Deployment>
Build Tools>Gradle
で以下のようにJava17以降を入れます。

![スクリーンショット 2023-04-24 0.25.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/6a59d915-1a17-de9b-a765-a9ee93f4a14c.png)

Applyして、Finishしましょう！

:::note info
上記はVersionが20になってますが、
17以上であれば問題ありません。
:::

### 再生
再生ボタンを押下して、Buildしましょう！
成功すれば以下のようにEmulatorが動作します。

![スクリーンショット 2023-04-23 23.34.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/606d09f8-3994-f8e1-43a9-caf35feec90a.png)

以下のようにiOSも実施します。

![スクリーンショット 2023-04-23 23.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/ced1cd46-50e8-4de0-0c47-19b8d91b84a4.png)

そして再生すると。。

![Simulator Screen Shot - iPhone 14 - 2023-04-23 at 23.36.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/2b000a82-f016-6b83-bf55-49c499db42b7.png)

無事iOSでも動作が確認できました！

## 最後に
今回は試しに触ってみただけのため簡単な記事に
なりますが、Flutter以外でもマルチプラットフォームを触っていけたらと
思います！

本記事が参考になれば幸いです！

## 参考文献

▪️KMM公式

https://kotlinlang.org/lp/mobile/

▪️Java 17新機能まとめ

https://qiita.com/nowokay/items/ec58bf8f30d236a12acb

▪️Kotlin Multiplatform Mobile と Flutterの違いについて

https://note.com/juyaki/n/n631f45ae9ae7