KotlinでAndroidアプリを作ってみる（超初級編）

インフラ屋でも~~クソ~~アプリを作りたくなる夜があるじゃない！
と、言うことで本日は手元のMac端末でKotlinを触ってみようと思います。
超初級編なので、あまり深い記事は期待しないでください。
とりあえず環境整えて、動かしてみよう！　と気軽に取り掛かるきっかけとなることを重視しています。

# Kotlinとは？
* 「ことりん」と読むらしい。
* 2011年ごろチェコで生まれたプログラミング言語らしい（意外と年数経ってるんだな）。
* Javaに関するなんやかんや（ https://www.nikkei.com/article/DGXZQOGN05CPR0V00C21A4000000/ ）があり、エンジニアのJava離れが進んでいた中、「Javaからいい感じに切り替えられる言語ってなんだろうね」というところから注目されたのがKotlinらしい。
* JavaアプリをKotlinに変換できるらしい。
* Javaに比べると「ぬるぽ （NullPointerException のこと。アプリフリーズの原因になりがち。） 」が発生しにくいようになっているらしい。

※多分他にも書くべきことがありそうですけど、そろそろ睡魔が襲ってきたので、開発環境整える作業に入ります。

# Mac端末でKotlin開発環境を整えてみる
### Kotlin開発環境を整える
* ファイルのダウンロード
    * https://developer.android.com/studio?hl=ja にアクセス
    * Android Studio Ladybug Feature Dropをダウンロード　をクリック。
    * android-studio-2024.2.2.13-mac_arm.dmg　をダウンロード。1.2GBくらいあるので気長に待つ。
* Android Studioのインストール実施
    * ダウンロードしたdmgファイルをダブルクリックし、アプリケーションフォルダにAndroid Studioを放り込む。
    * Finder→移動→アプリケーション　とクリックし、アプリケーション内の「Android Studio」をダブルクリック
    * そのままインストール実施。（カスタムしたい人は適宜実施）
    * Android Studio Setup Wizardが起動し、コンポーネントのダウンロードなどが実施される。手元環境だと概ね1.5時間くらいかかったので気長に待つ。
* Android Studioを起動・バージョン確認
    * Android Studioを起動し、メニューから Android Studio→About Android Studio で、バージョンを確認。今回だと「Build #AI-242.23726.103.2422.12816248」となっていた。

※お使いの端末次第でパッケージなど変わる可能性があるのでそこは適宜読み替えてください。

### Kotlin開発環境を日本語化してみる　（日本語化が不要な方はスキップしてください）
* ファイルのダウンロード
    * https://plugins.jetbrains.com/plugin/13964-japanese-language-pack------/versions/stable にアクセス
    * 先ほど確認したバージョンが「Build #AI-**242**...」だったので、2024年の242系をダウンロードする。　今回だと「Japanese Language Pack / 日本語言語パック 242.91」をダウンロード。
        * ja.242.91.zipをダウンロードしておいた。
* 日本語化実施
    * Android Studioを起動。
        * Pluginsをクリック
        * 歯車マークをクリック
        * Install Plugin from disk …　をクリック
        * 先にダウンロードしたja.242.91.zipを指定して「開く」
        * Restart IDE　という緑色のボタンが表示され、Android Studioの再起動を促されるので、躊躇せず緑のボタンを押して再起動実施。
    * 日本語化された状態で起動してくる。

# 開発したアプリをAndroidStudioで動かしてみる　（開発中のテストを実施するようなシチュエーション）

## 1. AndroidStudioを起動して、「New Project」をクリック。
![(01) AndroidStudioを起動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951234/5dacad48-d751-48e6-8b1e-278afdfa57a7.png)

## 2. Empty Views Activityを選択して「次へ」をクリック。
![(02) EmptyViewsActivityを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951234/5a41067c-abb0-4779-996c-af73fa8fe7c0.png)

## 3. 下記画面を参考に入力。Androidバージョンは15.0を選択して「完了」をクリック。
![(03).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951234/27ece6b0-b242-49c0-ab0e-5d8ffe77a3d7.png)

## 4. プロジェクトのインポートなどがしばらく実施されるので待つ。
![(04).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951234/92ab83ed-8f62-4e0e-b681-a29e2a2ad217.png)

## 5. インポートなどが完了し、右下のバーが消えた状態まで待つ。
![(05).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951234/d365dba3-1e6b-4935-af61-fd17061e315a.png)

## 6. この状態で、「構成の追加」の横にある再生ボタンをクリックして、以下のようなテストアプリが起動することを確認してから、停止ボタンを押してテストアプリを終了させる（Hello World! と表示されることを確認）
![(06) 再生ボタンを押した.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951234/0a6e5697-5669-4c6d-9abd-0b7eae329be5.png)

## 7. activity_main.xmlタブをクリックし以下の内容で上書き実施。

```
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/countText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:textSize="50sp"
        app:layout_constraintBottom_toTopOf="@+id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/button"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:text="加算ボタンです"
        android:textSize="20sp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
```

## 8. MainActivity.ktタブをクリックし以下の内容で上書き実施。

```
package com.example.myapplication
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    private var count: Int = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val button = findViewById<Button>(R.id.button)
        val countText = findViewById<TextView>(R.id.countText)
        button.setOnClickListener {
            count+=1
            countText.setText(count.toString())
        }
    }
}
```

## 9. 「構成の追加」の横にある再生ボタンをクリックして、以下のようなアプリが起動することを確認。
![スクリーンショット 2025-03-03 22.07.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951234/3a800881-deca-4a75-bef2-b1b0d74256a3.png)

## 10. 「加算ボタンです」を５回押すと５カウントされる。
![スクリーンショット 2025-03-03 22.09.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951234/b2d04e1d-dcf4-4143-8e13-d843e37c0ded.png)

# 開発したアプリを実機Androidで動かしてみる　（リリース前の実機でのテストを実施するようなシチュエーション）

## 1. ビルドしてapkファイルを作成する
![スクリーンショット 2025-03-03 22.11.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951234/2e863a41-86ee-40d7-a330-10e79f8155e6.png)

## 2. apkファイルを実機Androidに送って実行する（先ほどのAndroidStudioでのテストと同様の動きを実機で確認できる）


# おわりに
* と、ここまで書いた後でなのですが、「環境整えるのとかめんどいから、もっと楽に試せる方法ないのか？」という方がいらっしゃったら、 https://play.kotlinlang.org/ にて試していただくのが良いかもです。簡単的なコードの挙動確認だけならこれでも充分かなと思います。
* 作ったアプリを実機でも動かしてみたいなぁ　と言う方はこの記事を参考になさってください。
* これフラグなのですが、気が向いたらもうちょっと踏み込んだ記事を公開するかもです。

# 参考URL
https://developer.android.com/kotlin?hl=ja