皆様いかがお過ごしですか。スタメンでモバイルアプリ開発を担当している @sokume です。
以前、TUNAG iOSアプリの技術的な解説で、@temokiから発信していますが、読んでいただけましたでしょうか。今回の記事はAndroid版の技術的な解説記事です。
言語
Google I/O 2019にて Kotlin-First宣言があり、名実ともにAndroidの第1言語は Kotlin に変わりました。もちろんTUNAG AndroidアプリもすべてKotlinで書かれています。 Kotlinも日々更新していますので、常に新しいバージョンに追従していける開発環境にしています。(記述時点ではv1.3.61ですね)
アーキテクチャー
Android Jetpack に含まれる、Android Architecture Component をベースとした構成をとっています。 この構成をすべて利用するのでなく、TUNAG Androidアプリに合わせた形で利用箇所の選定をしています。
サービス
TUNAG は AWS + Ruby on Rails で構築していますが、mBaaS (mobile backend as a service) の Firebase を利用して以下の対応をおこなっております。 - Cloud Firestore利用した即時性の高いチャット機能 - Authenticationを利用したユーザー認証 - Crashlyiticsを利用したクラッシュレポーティング - Cloud Messagingを利用したアプリへのプッシュ通知配信 - App Distributionを利用したアプリのベータ配信
(ここの点は TUNAG iOS と一緒の構成としています。)
ライブラリ
前述の Android Jetpack や Android KTX はもちろん、 Material Components UIコンポーネントライブラリを利用し、Androidに適したUIの実現を進めています。
HTTPクライアントは Retrofit2 と Okhttp3を利用し、HTTPクライアントとからめて、JSONパーサーはMoshiを利用しています。 画像の読み込みにもHTTPクライアントとからめてPicassoを利用しています。 (Square 製ライブラリが多めですね)
Model層からのデータについてはリアクティブに処理するため、RxKotlin / RxAndroid / RxJavaを利用しています。
ReactiveExtensionを利用していますが、Activity/Fragment(View層)や ViewModel (ViewModel層)ではライフサイクル対応コルーチンスコープを利用し、ライフサイクルを意識した処理の制御が行える実装としています。
ベータテスト
iOSアプリと同じく、スタメンのメンバー自身がTUNAGを利用しています。そのためアプリの新バージョンは常に社内メンバーでのテストを実施しています。
CIの仕組みは2019年11月に公開されたGithub Actionsの利用を検討しています。
ワークフローという形で、Githubへのアクションを記述し、Push
やPullRequset
といったユーザー操作をトリガーに、ビルド実行 ➡ 配信 といった処理を継続的に実施する事ができます。
社内メンバーへのベータテストの配信は前述の Firebase App Distribution を利用して配信しています。
さいごに
TUNAG Android アプリの構成を説明させていただきました。 TUNAG iOS アプリとはまったくの別のものとして考えず、同じ構成にすることで得られる利点などを考えた構成にしています。 もちろん、Androidアプリとして追求すべき点は妥協しません。
熱い仲間と一緒に、より良いサービスを一緒に作りませんか? 仲間を募集しています! まずは、スタメンのエンジニアサイト stmn, inc. Engineers を見てみてください!