ブログを見ている皆様、おはこんばんは。
いこーよAndroidアプリを担当しているhondaです。
現在弊社ではAndroidエンジニアを募集しています!
www.wantedly.com
今回は「いこーよアプリの応募が気になるけど、何やってるかわからないな」という方向けに現在の仕事をしている環境や体制を簡単などについて書きたいと思います。
開発体制
いこーよアプリは以下のチーム構成で機能追加や改善を行っています。
- Androidエンジニア:1名
- iOS兼WebAPI(RoR):1名
- ディレクター兼デザイナー:1名
通常は自分のロールをこなしていますがチームメンバーが少ないのでロール外のことであっても少しでも気になることは発言して解決していっています。
ディレクター兼デザイナーのメンバーがいこーよアプリ推進の旗振りをしていますが、追加したい機能や施策など思いついたことを毎週月曜に開催しているMTGで発言し、実際にそれをきっかけに実現した機能などもあります。
チームで一番大事にしているのはアプリを使っているユーザであるパパ、ママそして子供たちが楽しくお出かけができることです。
本当に楽しくおでかけができているのかを数値化するのは難しいですが、メンバー全員がパパであり、いこーよアプリのヘビーユーザなのでアプリを使った時に感じる不便さやこんな機能があればいいのにという思いを大事にしています。
開発言語
Android版いこーよは2016年8月から開発がスタートしましたが、当初からKotlinを使っています。
minSdkVersion
現在、23(Android6.0以上をサポート)です。 minSdkVersionはユーザ率が一定数下回ったら、積極的に上げていっています。
targetSdkVersion
現在、27(Android Oreo)です。 現在リニューアルを進めており、そちらは28で開発しています。
設計
方針としてはGuide to app architectureで推奨されている設計をベースにしています。
Guide to app architectureではViewModelがRepositoryを参照していますが、ViewModelが肥大しそうだったのでViewModelからビジネスロジックをUseCaseクラスとして分離したりしています。
リニューアルの開発ではこの設計で進めています。
使っているライブラリ
主に使っているライブラリをいくつかご紹介します。
Okhttp+Retrofit
いこーよアプリの処理でサーバとの通信処理が大部分を締めています。 通信処理でのセッション処理などはretrofitのInterceptorで行っています。 github.com github.com
Glide
スポットの写真やユーザが投稿した口コミの写真の表示に使用しています。 github.com
Permissions Dispatcher
位置情報取得時などで使っています。 github.com
Realm
データの性質によって、通常の保存方法で永続的に取り扱ったり、In Memoryでキャッシュとして保存したりと使い分けをしています。 RealmRecyclerViewAdapterでリストの更新処理が簡単に実装できます。 github.com
Koin
DI(依存性の注入)で使っています。 ViewModelに対応しているのでViewModelの使用がとても楽になりました。 github.com
Androidx
リニューアル開発からandroidxでの開発を進めています。
Kotlin Coroutines
以前は非同期通信でRxJavaを使っていました。
しかし、ほとんどSingleやCompletableを使っていてRxJavaの使い方としてベターではないなと感じていたこととKotlin Coroutines 1.0がリリースされたため、新規機能実装からKotlin Coroutinesを使っています。
既存のRxJavaのコードも順次Kotlin Coroutinesに切り替えていく予定です。
CI
CIはBitriseをDeployGateと連携させて使っています。
GitHubのPRで修正あるたびにビルドして、DeployGateを経由して検証端末で検証できるようにしています。
Android Lint、ktlintも同時に行っていて、Dangerを使ってlint結果をGitHubのPRに表示させています。
www.bitrise.io
deploygate.com
danger.systems
アナリティクス
Firebase AnalyticsとGoogle Analyticsを併用してログ収集を行っています。
追いかける数値ごとにspreadsheetで集計したり、DataStudioを使って定点観測を行ったりしています。
firebase.google.com
analytics.google.com
spreadsheets.google.com
datastudio.google.com
クラッシュ検知
Firebase Crashlyticsを使っています。
クラッシュを検知した場合、slackに通知するようにしてクラッシュに気づける体制にしています。
まとめ
簡単ではありますが、いこーよアプリの開発現場のご紹介でした。
もし、これを見てご興味を持った方がいらっしゃったら幸いです。
現在Android版いこーよをどのように作っていけば迅速に価値を提供するにはどうしたらいいかを模索しながら進めています。
まだまだ、改善すべきところがたくさんあります。
新しいメンバーの方とは一緒に議論しながら今よりもより良いもの作っていきたいと思っています。
一緒に日本中の親子が楽しくおでかけできるサービスを一緒に作っていきましょう。
お待ちしております。