【Android】丁寧なRetrofit2とmoshiの導入解説【Kotlin】

#はじめに
手順としては一括で依存関係を追加していく方が圧倒的に早いのですが、
それぞれ何のために追加してるなどがわかりにくくなるため、1つずつ丁寧に追加していきます。

#この記事でのゴール

プロジェクト内で、Retrofit2を使用できる状態にすること
※ライブラリの追加までがゴールで、実装して実際にAPI通信処理などは今回はしないです。


##①Retrofit2の依存関係の追加

自身のプロジェクトで、
build.gradle(:app)ファイルを開きdependencies{}内に依存関係を追加する
追加する依存関係はどこから取ってくればいいんだろう？って
他の記事を見てよく思ってたので、その部分も解説していきます。

##①-1
まず、下記のリンクかGoogleなどで、retrofit2などでワード検索して、
retrofit2をオープンソースとして
提供しているsquare社の公式ドキュメントを開く。
https://square.github.io/retrofit/

![Retrofit-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/d0885941-9fa3-311e-da75-eb03ec5898ab.png)


##①-2

右側にあるDOWNLOADをクリック
![Retrofit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/9e3e6645-b9d7-9869-c696-5a0c0a0f7bf8.png)

##①-3
下に自動スクロールされ、GRADLEと書かれた下に
Retrofit2の依存関係があるので、ここからコピーする。

![Retrofit-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/1c401bc3-89b7-9ee3-ff53-8a978a9d35e0.png)

##①-4

自身のプロジェクトで、
build.gradle(:app)ファイルを開きdependencies{}内にコピーした依存関係を追加する

```build.gradle(app)
dependencies{
   ...
   //Retrofit2
   implementation 'com.squareup.retrofit2:retrofit:(insert latest version)'
}
```
画像で確認したい方はこちら
![GitHubSampleApp_–_build_gradle___app_-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/2636a0f5-ec8b-be72-f2ca-ca66112106e3.png)

##①-5
貼り付けた
'com.squareup.retrofit2:retrofit:(insert latest version)'の部分が
黄色になっているため、カーソルを合わせて、ホバーすると
A newer version of com.squareup.retrofit2:retrofit than (insert latest version) is available: 2.6.2
とでる。
2.6.2の新しいバージョンが利用可能ですということらしい。
提案に従い、Change to 2.6.2をクリックする。

![スクリーンショット_2021_07_13_22_02-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/6607a1a0-d551-2802-d1c3-e4e40b92d6dd.png)

##①-6
黄色部分が消えて、2.6.2のバージョンで指定される。

![GitHubSampleApp_–_build_gradle___app_-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/fd0d8d41-fe23-5962-05e1-30edf99cdde9.png)

##①-7

Sync Nowする
![GitHubSampleApp_–_build_gradle___app_-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/65ac7dad-b9f5-31bc-cf9e-29d4de6c8114.png)

ここまでで、Retrofit2のライブラリを追加することができました。

##②retrofit2でmoshiを使うための依存関係を追加

retrofit2でmoshiを使うためには、コンバーターというものが必要だそうで、
それを追加していきます。

##②-1
手順①-1で開いたsquare社のretrofit2ドキュメントを再度開く
https://square.github.io/retrofit/
![Retrofit-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/d0885941-9fa3-311e-da75-eb03ec5898ab.png)
##②-2
Retrofit Configurationをクリックする。

![Retrofit-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/9db1baed-c0bc-e47b-e733-d0e02c9933e6.png)

##②-3

ページ中部下に自動スクロールされるので、Moshiと書かれた横の
com.squareup.retrofit2:converter-moshiの部分をコピーする。
![Retrofit-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/412ac007-3627-98bc-e794-64671b37cf79.png)

##②-4

コピーしたcom.squareup.retrofit2:converter-moshiを使用して、
implementation 'com.squareup.retrofit2:converter-moshi'の形で、
自身のプロジェクトで、
build.gradle(:app)ファイルを開きdependencies{}内に依存関係を追加する

```build.gradle(app)
dependencies{
   ...
    //retrofit2 converter
    implementation 'com.squareup.retrofit2:converter-moshi'
}
```

画像で確認したい方はこちら
![GitHubSampleApp_–_build_gradle___app_-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/417b79f5-44b9-528e-9cbd-8be1c9a9a4c0.png)
##②-5

バージョンをretrofit2のライブラリと合わせる。今回の場合は2.6.2とする。

```build.gradle(app)
dependencies{
   ...
    //retrofit2 converter
    implementation 'com.squareup.retrofit2:converter-moshi:2.6.2'
}
```
画像で確認したい方はこちら
![GitHubSampleApp_–_build_gradle___app_-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/249a6aef-2b6e-5b5f-6d9a-99bc16bfbc2c.png)

##②-6
Sync Nowする

![DoNotDisturb_と_Item-0_と_Bluetooth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/32999422-800b-4ac8-75f9-ca6cc9778850.png)


ここまででRetrofit2でMoshiを使うための
コンバーターライブラリを追加することができました。

##③Moshiの依存関係の追加

Moshiそのものの依存関係を追加します。

##③-1

手順①-1で開いたsquare社のretrofit2ドキュメントを再度開く
https://square.github.io/retrofit/

![Retrofit-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/d0885941-9fa3-311e-da75-eb03ec5898ab.png)

##③-2
Retrofit Configurationをクリックする。

![Retrofit-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/9db1baed-c0bc-e47b-e733-d0e02c9933e6.png)

##③-3
ページ中部下に自動スクロールされるので、Moshiと書かれた部分をクリック
![Retrofit-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/344f583a-623c-e473-79b1-a7f6b15f9e03.png)

##③-4

MoshiのGithubのページに遷移する
![square_moshi__A_modern_JSON_library_for_Kotlin_and_Java_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/9e286050-16c4-8794-bf81-10deef9ff018.png)

ページ最下部付近のDOWNLOADと書かれているところまでスクロールし、
or Gradle:と書かれた下にMoshiそのものの依存関係の記載があるので、コピーする。
![square_moshi__A_modern_JSON_library_for_Kotlin_and_Java__🔊.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/5a3344a2-59da-317a-e717-b0d1384ca4b3.png)

##③-5

自身のプロジェクトで、
build.gradle(:app)ファイルを開きdependencies{}内に依存関係を追加する

```build.gradle(app)
dependencies{
   ...
    //moshi
    implementation "com.squareup.moshi:moshi:1.12.0"
}
```

画像で確認したい方はこちら
![GitHubSampleApp_–_build_gradle___app__と_「【Android】Retrofit2とmoshiの導入【】」を編集_-_Qiita_🔊-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/4818f430-d11d-3cb0-9060-936bdc1fa0e9.png)

##③-6
Sync Nowする
![DoNotDisturb_と_Item-0_と_Bluetooth-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/a07fc556-4255-297f-8124-a59124d5d67c.png)
ここまででMoshiのライブラリを追加することができました。

##④MoshiをKotlinで使用できるようにするための依存関係を追加

MoshiをKotlinで使用できるようにするための依存関係を追加します。

##④-1

手順③-3で開いた、MoshiのGithubのページを再度開く。

https://github.com/square/moshi/

##④-2

ページ最下部付近のKotlinと書かれた場所の下付近に
MoshiをKotlinで使うための依存関係があるので、コピーする。

![square_moshi__A_modern_JSON_library_for_Kotlin_and_Java_-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/a68a7b47-3dfb-9a35-c522-0f9ddf0901da.png)

##④-3

自身のプロジェクトで、
build.gradle(:app)ファイルを開きdependencies{}内に依存関係を追加する

```build.gradle(app)
dependencies{
   ...
    //moshiをkotlinで使用するためのライブラリ
    implementation "com.squareup.moshi:moshi-kotlin:1.12.0"
}
```

画像で確認したい方はこちら
![GitHubSampleApp_–_build_gradle___app_-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/1fc64408-0974-4861-88fc-8be92d349f0e.png)

##④-4
Sync Nowする

![GitHubSampleApp_–_build_gradle___app_-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/2eccafe2-b7f3-a790-3b28-3e70b62ed007.png)

##⑤インターネットアクセス権の設定

Retrofit2で外部に通信を行うので、アクセス圏を許可する必要がある。

AndroidManifest.xmlファイルの
<manifest>タグ内にuses-permission android:name="android.permission.INTERNETの
記述をする。

```AndroidManifest.xml
<manifest>
  <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
```

![GitHubSampleApp_–_AndroidManifest_xml__GitHubSampleApp_app_-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1062113/cf36fc72-bbac-e048-90da-0685c2ae461a.png)



#おしまい

ここまでで、Retrofit2とMoshiがプロジェクト内で使用できるようになりました。
コンバーターが必要だったり、kotlinで使用するための依存関係が必要だったり、
覚えるのが大変だなーと思いました。
公式ドキュメントから依存関係をとってくる際に、まとめた箇所にないので、
毎回探してる自身の経験もあったので、今回記事としてまとめさせていただきました。
間違っている箇所等ありましたら、修正させていただきますので、
コメント頂けますと助かります。

最後までお読みいただきありがとうございます。
記事を読む皆様の参考になれば幸いです。

参考になりましたら、チャンネル登録、高評価はないので、
LGTMをお気持ち程度いただければ、嬉しいです！！