見出し画像

【Android】初めて個人アプリをリリースした話 技術編

はじめに


m.coderと申します。名古屋で Android エンジニアをやっています。
今回は私が初めて個人アプリをリリースしたので、アプリに使われている技術などの話を書いていきたいと思います。

リリースしたアプリ

大学のバスの時刻表アプリ(非公式)です。

もともとこのアプリを開発し始めたのは、hayabusabusa さんに誘われたのがきっかけです。
hayabusabusa さんが iOS版アプリの開発を企画していたところに声をかけていただき、面白そう!となったので、私がAndroid版の開発を担当することになりました。

なお、このアプリの特徴としてオープンソースであるというのが挙げられます。

本記事でも紹介しますが、わりと新しめの技術を積極的に取り入れているので、興味のある Android 開発者の方はぜひクローンしてみてください。

(Android版)バスアプリを支える技術

(どこかの書籍みたいな見出し)

本アプリで使われている技術は主に以下のようなものです。
基本的に、せっかくの個人アプリだから使いたい技術を使おう!というコンセプトで好きなもの、使いたいものを取り入れています。

・アーキテクチャ:MVVM
・ライブラリなど:Firebase, Room, Flipper, AAC, Kotlin Coroutines, Dagger2

アーキテクチャについて

アーキテクチャはAndroidで主流の MVVM を採用しました。
本アプリの開発を始める少し前に業務でも使ったのですが、正直今から Androidネイティブ開発を始めるなら MVVM 一択かなと思います。

なお、レイヤー構成はこんな感じになっています

スクリーンショット 2020-07-08 22.08.08

図ではシンプルにしていますが、UseCase と Repository は 依存性逆転の原則 にならって interface 化しています。

使用ライブラリについて

Firebase
バスの時刻データ取得に Firestore を利用しています。
また、クラッシュ情報分析のために Crashlytics も使用しています。

Room
Firestore から取得したデータのキャッシュに利用しています。
SwipeToRefresh でユーザーが手動更新を行った場合はキャッシュを無視するなどの処理を入れていて、当初思っていたより複雑化しました…

Flipper
Facebook が提供している、Android / iOS 両方に対応したデバッグ用ツールです。主に Room で生成したテーブルや SharedPreferences の値の確認に使いました。
使ってみると非常に便利だったのでオススメです。
使い方は以下の記事がわかりやすかったです。

AAC
MVVMのために ViewModel、LiveData、DataBinding、画面遷移に Navigation Component を利用しています。
画面遷移は設定画面に移動するときぐらいしか使わなかったのでそんなに必要なかったです(小声)

Kotlin Coroutines
非同期処理に Kotlin Coroutines を使用しています。
これが今回一番使いたかった処理で、Coroutine に関する知見がたまって良かったです。
部分的に Coroutine Flow なども取り入れてみていますが、まだベストプラクティスがわかっていない状態なので、詳しい人がいらっしゃったらぜひアドバイスをお願いしたいです。

Dagger2
DIコンテナライブラリの Dagger2 を依存性の注入に利用しています。
余談ですが最近 Koin を使い始めまして、そちらがかなり使いやすいので個人開発では Koin に乗り換えようか検討しています。


ただ、Dagger2 も最近 Hilt が追加されて書きやすくなったので、しばらくは並行して使うかなと思います。

おわりに

今回は Android 版アプリに使用した技術について紹介しました。
今後、リリース作業を行った時のエピソードなども書いていければと思っています。


[PR]
普段は m.coder名義で Twitter やっています。
また、Medium で技術記事も書いているので、そちらも興味あればぜひご覧ください。
Twitter: https://twitter.com/_m_coder
Medium: https://medium.com/@m_coder

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
スキありがとうございます!励みになります!
3
Android Developer. 技術記事: https://medium.com/@m_coder Twitter: https://twitter.com/_m_coder