【Android Studio】JSON To Kotlin ClassプラグインでAPIレスポンス用モデルの作成を楽に
前書き
Androidアプリでは、RESTful APIの実行結果(≒ jsonデータ)に対応するdata classを作成し、kotlinx.serializationでjsonをdata classにデシリアライズする処理があります。
data classを利用する理由は、フィールドをvalとして宣言すればdata classの不変性(Immutable)を保証できる点、アクセッサメソッドなど(getters、setters、equals()、hashCode()、toString())が自動生成されるので実装量が減る点が挙げられます。
新規のRESTful APIのレスポンス(json)をdata classをマッピングする場合は、まずはマッピング先となるdata classを定義する必要があります。フィールドが2〜3個であれば温かみのある手作業で実施しますが、10個以上となると面倒です。
このような面倒臭さを解消するツールを調べたところ、JSON To Kotlin Classプラグインがあったので、その使い方を備忘録として残します。Web版もありますが、ファイルをダウンロードする手間があるので、私はプラグインを使うことにしました。
検証環境
Android Studio Dolphin | 2021.3.1(ちょっと古い)、JSON To Kotlin Class 3.7.4を使用しています。
開発環境としてUbuntu 22.04を使用していますが、Windows, Mac環境でも動作すると思われます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
./oydmMMMMMMmdyo/. nao@nao :smMMMMMMMMMMMhs+:++yhs: ------- `omMMMMMMMMMMMN+` `odo` OS: Ubuntu Budgie 22.04.1 LTS x86_64 /NMMMMMMMMMMMMN- `sN/ Host: B450 I AORUS PRO WIFI `hMMMMmhhmMMMMMMh sMh` Kernel: 5.19.0-35-generic .mMmo- /yMMMMm` `MMm. Uptime: 7 days, 16 hours mN/ yMMMMMMMd- MMMm Packages: 3941 (dpkg), 1 (brew), 4 ( oN- oMMMMMMMMMms+//+o+: :MMMMo Shell: bash 5.1.16 m/ +NMMMMMMMMMMMMMMMMm. :NMMMMm Resolution: 2560x1080, 1920x1080 M` .NMMMMMMMMMMMMMMMNodMMMMMMM DE: Budgie 10.6.1 M- sMMMMMMMMMMMMMMMMMMMMMMMMM WM: Mutter(Budgie) mm` mMMMMMMMMMNdhhdNMMMMMMMMMm Theme: Yaru-dark [GTK2/3] oMm/ .dMMMMMMMMh: :dMMMMMMMo Icons: ubuntu-mono-dark [GTK2/3] mMMNyo/:/sdMMMMMMMMM+ sMMMMMm Terminal: tilix .mMMMMMMMMMMMMMMMMMs `NMMMm. CPU: AMD Ryzen 5 3400G (8) @ 3.700GH `hMMMMMMMMMMM.oo+. `MMMh` GPU: AMD ATI Radeon Vega Series / Ra /NMMMMMMMMMo sMN/ Memory: 17088MiB / 30029MiB `omMMMMMMMMy. :dmo` :smMMMMMMMh+-` `.:ohs: ./oydmMMMMMMdhyo/. |
JSON To Kotlin Classのインストール
- Android Studioメニューの「File」->「Settings」をクリック
- 「Plugins」を選択し、右上の「Marketplace」タブをクリック
- 検索ボックスに「JSON To Kotlin Class」と入力し、検索結果から「JSON To Kotlin Class」を選択
- 「Install」ボタンをクリックして、プラグインをインストール
- プラグインがインストールされたら、Android Studioを再起動
JSONからKotlin data classを作成
今回の例では、GitHub APIの特定ユーザーのリポジトリリストを取得するAPI(GET /users/{username}/repos)のレスポンスをdata classに変換します。変換した結果(data class)は、jp.debimate.leadtime.domain.modelパッケージのRepository data classとして保存します。
- Android StudioのProject(デフォルトでは画面左にあるファイラ)でdata classを作成したいpackageを右クリックし、「Kotlin data class File from JSON」を選択
- [Generate Kotlin Data Class Code]画面の「JSON Text」フィールドにJSONを入力
- [Generate Kotlin Data Class Code]画面の「Class Name」フィールドにクラス名を入力。今回はRepositoryとします。
上記の手順3. まで実施すると、以下の画像の状態になります。
4. [Generate Kotlin Data Class Code]画面の「ADVANCED」ボタンを押下し、生成するdata classの細かい設定を行う(任意)。設定項目を以下の画像で示します。フィールドをValにするかVarにするか、nullを許容するか、どのライブラリでデシリアライズするか等はjsonによって設定値が異なると思われます。
INPUTとして渡したjsonが複雑すぎると、不要なクラスを生成する傾向が見られるので、適宜jsonを整形してからJSON To Kotlin Classを利用した方が良さそうです(GitHub APIドキュメントにサンプルとして提示されていたjsonをそのまま利用したら、不自然なクラスが生成されました)
最後に
Kotlinは、RESTful APIのラッパー(クライアント)ライブラリが無い印象を受けました。比較対象はGolangですが、「見つからない…」と困ることが多いです。Javaライブラリは見つかるので、そちらを皆さん使っているのでしょうか?
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。