【Jetpack Compose】環境構築・HellowWorldまで

## はじめに
普段Flutterでアプリ開発をしていて、他にも宣言的UIの考え方でSwiftUIや
Jetpack Comporseなどがあると知ったので今回はJetpack Comporseについて触れようと思いました。
環境構築の備忘録として残します。

## 環境
```
Kotlin: 1.4.31
OS: Mac OS X 11.5.2 x86_64

Android Studio Bumblebee | 2021.1.1 Canary 12
```

## 手順
以下ページからAndroid Studio CanaryをDLします

https://developer.android.com/jetpack/compose/setup?hl=ja
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/2b2e69d2-9071-a44c-5aac-67e4be749150.png">

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/73317997-8219-121c-4e92-32e2f3b5820e.png">


DL後、解凍しAndroid Studio Previewを起動します

順序通りにインストールを進めます
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/2bdc5a7f-7064-d8f5-d088-9d5332d57f97.png">

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/07b99f2c-46f4-fcee-c530-048d41abd482.png">

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/e4a07cd0-352a-6959-64a9-6b3522abc394.png">

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/8ee6015b-6d18-2a1c-4421-cf5644411789.png">


Finishまで行ったらインストール完了です。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/0c2c8cca-c108-f5c8-58f2-cbc18dec5f6f.png">

新規でProjectを作成します。
New Project -> Empty Compose Activity を選択します
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/cda6c502-42ea-25d2-e98a-1efab5ebc9f5.png">
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/123e2077-9674-41ee-d7d6-b1925eee2ae6.png">

NameやSave location、Minimum SDKを設定してFinish押下で作成されます。

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/4ee1427b-48e2-b536-de55-1a3e936e1eea.png">


読みこみ完了後buildすると以下のように文字が表示されます。
（Android->Worldに変更しました）

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1257046/7209afda-8bf8-66dd-dfce-f0e2dc8c66bb.png">

生成されたコード

```Kotlin:MainActivity.kt
package com.example.jetpackcomporsesampleapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.jetpackcomporsesampleapp.ui.theme.JetpackComporseSampleAppTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            JetpackComporseSampleAppTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colors.background
                ) {
                    Greeting("World")
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String) {
    Text(text = "Hello $name!")
}

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    JetpackComporseSampleAppTheme {
        Greeting("Android")
    }
}

```

## 終わりに
Jetpack ComporseのHellow World表示まで実施しました。
図がある方がわかりやすいかなと思ったので参考程度に見ていただけると思います。




### P.S.
最近では、宣言的UIであるFlutterやSwiftUI,今回扱ったJetpack Comporseなどの比較記事が上がってきているので、今後自分なりに出せたらいいなと思いました。

Android Studio Canaryでは普段使用していたAndroid Studioと違い、エミュレータがWindow内でPreviewされて少し驚きました。

## 参考文献
宣言的UIとは | アルサーガパートナーズ株式会社
https://www.arsaga.jp/knowledge/dx-technical-glossary/declarative-ui/

Android Studio で Jetpack Compose を使用する　|　Android Developers
https://developer.android.com/jetpack/compose/setup?hl=ja

Jetpack Compose, React, Flutter, SwiftUIを比較する | Mori Atsushi | Blog
https://at-sushi.work/blog/38

同じお題でUIを構築してみてFlutter, JetpackCompose, SwiftUIの三種の宣言的UIフレームワークを比較してみる | Zenn | エンジニアのための情報共有コミュニティ
https://zenn.dev/shyne/articles/7d56cebf3663d1