『Relay』Figmaを用いてAndroidUIを作成する方法 [JetpackCompose] (WIP)

すみません、まだ完成していません。
===

# はじめに
アドベントカレンダー7日目を担当します、愛知工業大学一年の牧野遥斗です。よろしくお願いします。
ずっと書く内容を考えていて、投稿が遅れてしまいました。すみません。

ではみなさんは、Googleの新しいUiフレームJetpackComposeはご存知でしょうか？

>Jetpack Compose は、ネイティブ UI をビルドする際に推奨される Android の最新ツールキットです。Android での UI 開発を簡素化し、加速します。少ないコード、パワフルなツール、直感的な Kotlin API を使用してアプリをすぐに動かすことができます。
引用文献：https://developer.android.com/jetpack/compose?hl=ja

ということで、今までより便利にUIを作れるものです。

![スクリーンショット 2022-12-07 7.09.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/7055ea6b-38bb-6e1c-e754-903af35de66a.png)
参考記事

https://developer.android.com/jetpack/compose?hl=ja

## この記事の対象者
- Androidの新しい技術を触れてみたい。
- 今までのGUIの作成の仕方がめんどくさくて新しい方法を探している方。

## JetpackComposeを用いることにより便利なところ困るところ。

### 便利な点
- ボトムナビゲーションが簡単に作れる
- リスト表示が簡単にできる

### 困るところ
- UIをGUIで作ることができなくて、全てコードで作る必要がある。
- しっかりアーキテクチャを考えないとコードをネスト化してしまい、可読性が下がってしまう。

## まとめ
ということで、JetpackComposeを使うことにより大変だったUIをGUIで作れてしまう新しい技術『Relay』を用いてUIを作ってみたいと思います。


# JetpackComposeの勉強方法
JetpackComposeはたくさんの勉強サイトがあります。
Google公式からも出してくれているため、とてもありがたい。
とりあえず、上から　二つをやってみて、ふわっと理解をしてからみることをお勧めします。

https://developer.android.com/jetpack/compose/tutorial?hl=ja

https://developer.android.com/courses/pathways/jetpack-compose-for-android-developers-1?hl=ja

https://engawapg.net/category/jetpack-compose/

# 『Relay』の環境構築　Figma編

## 1. とりあえず、Figmaにログインして編集画面を開いてみましょう。

アカウントの作成の仕方、エディター画面の操作の仕方は今回は省略します。
下記Youtubeの動画がわかりやすくておすすめですので、一度確認してみてください。

https://www.youtube.com/watch?v=htmjI2wpfjY&list=PLpe817jgOmIpcrK1s-z6KTOjli5G1ds0Z

![スクリーンショット 2022-12-07 7.46.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/c4c7b07e-76c8-19bb-7e26-50df2ae01765.png)

https://www.figma.com/

## 2. 拡張機能を保存します（ピン留めみたいなイメージ）。

プラグインの検索機能にて『Realy』と検索をして拡張機能を保存して簡単に呼び出せるようにしましょう。

![スクリーンショット 2022-12-07 7.52.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/59d1403a-337d-7840-a5e3-dc7c3653600a.png)

![スクリーンショット 2022-12-07 8.01.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/edeb70b8-aa8f-7a90-04e8-7c6913f0a48d.png)

## 3.簡単にカードでも作ってみます。
カードの作り方はここでは省きたいと思います。

Figmaで作ったものを関数化するためのコツとして
- レスポンス化をする　サイズを変更してもデザインが崩れないようにする。
    - Autoレイアウトを用いて、横幅はFillにするといいです。
- コンポーザブル化して、簡単に使いまわせるようにする。


![スクリーンショット 2022-12-07 8.49.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/b33dc5a0-442c-9e51-fef0-c3449abf9912.png)

![スクリーンショット 2022-12-07 8.51.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/db473bd1-b011-e143-cc3d-6425d9ea102b.png)

![スクリーンショット 2022-12-07 8.05.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/7beed494-78ed-c384-8061-adf4dde7c324.png)


## 4. UIパッケージを作成する。

パッケージ化したいフレームを選択して、先ほどの拡張機能のところから『Relay』を選択してRUNを押しましょう。
下のようなUIが表示されたと思います。

![スクリーンショット 2022-12-07 8.16.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/e0ad00e8-6ccb-834a-1b0b-231c7fe8529c.png)

Create UI Packageを押してパラメーターの調整画面に行きます。
ここのパラメーター調整を設定することで、Androidから動的にコンポーザブルに直接操作をすることができます。

![スクリーンショット 2022-12-07 8.18.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/b66e63bc-f9b5-c1e7-4301-0710863a33f5.png)

設定したい要素を選択して、プラスボタンを押します。
その時にさまざまなパラメーターを設定します。

- Name
    - 変更をするときの変数名を選択する。
- Property
    - 変更をする部分を選択する。
- Description
    - 説明を載せることができる。

![スクリーンショット 2022-12-07 9.01.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/99e66f60-b5f6-07bc-9e89-166af9c753e6.png)

今回はこんな感じのパラメーターにしました。

## 5. 作ったUIパッケージをAndroidStudioで読み込めるようにする。

最後に右下のShare with developerを押して、読み込みをできるようにします。
![スクリーンショット 2022-12-07 9.10.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/91d550d5-f737-5d9e-6349-3c6193f40932.png)

今の現状をバージョンヒストリーに登録します。

![スクリーンショット 2022-12-07 9.12.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/dfc0d217-7f92-e3cc-381d-1c84823f02e6.png)

![スクリーンショット 2022-12-07 9.13.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/1347816c-fae9-3526-d241-fb7765d285f9.png)

右上のShareを押して、URLをコピーしておきましょう。

![スクリーンショット 2022-12-07 9.13.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/0bf49100-b3ec-b99e-8a49-a65fb7e5d274.png)

![スクリーンショット 2022-12-07 9.14.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/8649d054-c5b1-4f67-af32-2b93efd05ff8.png)



# 『Relay』の環境構築　AndroidStudio編

## 新規プロジェクトを作成する。
JetpackComposeを作る通常通りの作成方法で大丈夫です。

![スクリーンショット 2022-12-07 9.25.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/878d5d05-29ef-c51d-f84f-56bee2b5dd5a.png)

![スクリーンショット 2022-12-07 9.26.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/6d5b8b74-596e-263a-8a8b-f1d96afbc30f.png)

![スクリーンショット 2022-12-07 9.29.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/684fc7a5-b467-ae0a-85b0-1797ae12a452.png)



## 2. 拡張機能を反映させる。

設定画面を開いて、Plaginの設定のところを開きます。

![スクリーンショット 2022-12-07 9.31.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/8f074448-052d-de30-7ddb-b94ebd585e76.png)

![スクリーンショット 2022-12-07 9.32.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/fd77a2d0-54ee-78a1-9a6e-63706665a47a.png)

Plaginで『Relay』を検索して、インストールをする。

![スクリーンショット 2022-12-07 9.33.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/f554a90f-d3f8-adcf-a9df-e648587a979f.png)

## 3. Gradleを編集してRelayを反映させる

```diff_gradle:gradle(app)

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
+    id 'com.google.relay'
}

android {
    namespace 'パッケージ名になってます。'
    compileSdk 32

+    sourceSets{
+        main{
+            assert {
+                srcDir('src/main/ui-packages')
+            }
+        }
+    }

    defaultConfig {
        applicationId "パッケージ名になってます。"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary true
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion '1.1.1'
    }
    packagingOptions {
        resources {
            excludes += '/META-INF/{AL2.0,LGPL2.1}'
        }
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
    implementation 'androidx.activity:activity-compose:1.3.1'
    implementation "androidx.compose.ui:ui:$compose_ui_version"
    implementation "androidx.compose.ui:ui-tooling-preview:$compose_ui_version"
    implementation 'androidx.compose.material:material:1.1.1'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_ui_version"
    debugImplementation "androidx.compose.ui:ui-tooling:$compose_ui_version"
    debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_ui_version"
}

```

バージョンは下記URLから確認してみてください。
おそらくサジェストからうまく
https://developer.android.com/jetpack/compose/tooling/relay/android-project-setup


```diff_gradle:gradle(project)

buildscript {
    ext {
        compose_ui_version = '1.1.1'
    }

+    dependencies {
+        classpath "com.google.relay:relay-gradle-plugin:0.3.01"
+    }

}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '7.3.0' apply false
    id 'com.android.library' version '7.3.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
+    id 'com.google.relay' version '0.3.01'
}

```

## 4. Relayの設定をする。

FigmaのTokenを取得して設定する。

![スクリーンショット 2022-12-07 10.19.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/e2f53e22-e6c9-9298-9bb8-809508ed2b4b.png)

![スクリーンショット 2022-12-07 10.20.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/bcacd9fe-9df5-ea9e-ac8b-b8483577e123.png)