QUO CARD Digital Innovation Lab Tech Blog

クオカード デジタルイノベーションラボの技術ブログです

QUOカードPayのモバイルアプリで利用している技術

デジタルイノベーションラボのゴルゴです。

今回はQUOカードPayのモバイルアプリで利用している技術を紹介します。

Androidアプリ

MVVM+Clean Architectureパターンで実装しており、以下のような技術・サービスを利用して開発しています。

言語: Kotlin 100%

ライブラリ: Rx, Retrofit2, Glide, Koin, Coroutine, Epoxy, Firebase

テスト: JUnit, Spek, Mockito, Espresso, Spoon

ソースコード管理: GitHub

CI/CD: Bitrise

よくあるパターンなので特筆するところはそれほどないですが、開発当初の開発メンバでDagger2に慣れているものがいなかったので、習得しやすいKoinを採用しました。ハマることもなくすんなりと使えたので良かったです。ただ、KoinはInjectするオブジェクトを動的解決するので実行時エラーになるリスクがあり、今後も使い続けるかはわかりません。Dagger2のように静的解決してくれる、KotlinネイティブのDIツールの登場を待っていたのですが、どうやらDagger2がGoogle公式の推奨DIツールがなったようなので、本腰を入れて調べています。

また、Coroutineは当初experimentalだったこともあって非同期処理は主にRxで実装しており、今の所部分的にしかCoroutineは使っていません。

CIにはBitriseを利用しているのですが、モバイルアプリ向けに特化されていて使いやすいです。自作のSlack BotGitHubと組み合わせることで、Slackからメンションを飛ばすとストアへのアップロードまで自動で行われるようにしています。

iOSアプリ

MVP + Clean Architectureパターンで実装しており、以下のような技術・サービスを利用して開発しています。

開発言語: Swift5

ライブラリ: Rx, Moya, Nuke, R.swift, Realm, Firebase

テスト: XCTest, swift-snapshot-testing

ソースコード管理: Github

ライブラリ管理: Carthage, CocoaPods

CI/CD: Bitrise

iOSアプリではAndroidアプリと比べてMVVMを採用した場合のRxSwiftへの依存度が高くなる等があった為、MVP + Clean Architectureを採用しました。 通信ライブラリにはAlamofireのラッパー的なMoyaを使うことでdebug時はスタブを利用するようにしています。 リソースファイルへのアクセスはR.swiftを使用しているので、プロパティとして取得できるためtypoがなくなりました。

CIはAndroidアプリ同様にBitriseとSlack BotGithubと組み合わせてSlackからApp Store ConnectへIPAアップロードを自動化しています。

設計

iOSAndroidはそれぞれネイティブ実装していますが、ドメイン層に用意するUseCaseやRepositoryの設計は出来るだけ揃えることで相互のエンジニアがレビューしやすいようにしています。