TUNAG iOSアプリの技術的な解説

こんにちは!スタメンで TUNAGiOS/Android アプリ開発を担当している @temoki です。

CTOの小林が スタメンのエンジニアが作っている『TUNAG』の技術的な解説 で TUNAG 全体のテクノロジースタックについてお話していますが、今回は iOS アプリにフォーカスを当ててお伝えしようと思います。

言語

TUNAG の iOS アプリはすべて Swift で書かれています。Swift のバージョンアップにもすぐに対応しているため、現時点で最新の Swift 5 を使用しています。Swift は Optional 型により Null Safety を実現しており、TUNAG iOS アプリでは今のところ Null Pointer Exception によるクラッシュレポートは届いたことがありません(素晴らしい)。

Swift は初期のバージョン1〜3あたりまではバグやバージョンアップごとに破壊的に仕様が変わっていくのに苦労しましたが、バージョン4以降は仕様も安定し、安心して利用できるようになりましたね。

サービス

TUNAG は AWS + Ruby on Rails で構築されていますが、mBaas (mobile backend as a service) の Firebase も利用しています。特に今年の2月に正式リリースされたばかりの Cloud Firestore のおかげで、非常に即時性の高いチャット機能を実現することができました。また、Cloud Firestore はオフライン利用のために取得済みのデータを自動的にローカルストレージにキャッシュしてくれますし、データがどこかを意識することなくアクセスできる点もとても便利です。

Cloud Firestore だけでなく、TUNAG と連携したユーザー認証のために Authentication、クラッシュレポーティングのために Crashlyitics など、Firebase を広く活用しています。

また、アプリへのプッシュ通知配信には NIFTY CLOUD mobile backend を現在利用していますが、これも Firebase の Cloud Messaging への移行を検討中です。

(2020/2/5 追記) アプリへのプッシュ通知配信は、2019年9月に Firebase の Cloud Messaging に移行し、配信速度が格段に向上しました。

ライブラリ

iOS アプリでは、HTTPネットワーキングは Almofire を中心とし、画像の読み込みに AlamofireImage、Web API クライアントの実装のために Almofire のラッパーである Moya を使用しています。アプリからは様々な Web API を使用しますが、Moya はその API 仕様に沿って宣言的に実装していけるところがお気に入りです。

また、先日 TUNAG iOSアプリのチャット機能をVIPERアーキテクチャで開発した話 にも書きましたが、データレイヤーで Cloud Firestore から受け取るリアルタイムアップデートに対してリアクティブに処理するために Reactive X の Swift 実装である RxSwift を使用しています。

その他には Swiftコードの静的解析の SwiftLint、画像やStoryboardのようなリソースをタイプセーフに扱うために SwiftGen などの開発支援のためのツールも活用し、コード品質を確保しています。

これらのライブラリは基本的に Carthage でインストールすることで開発中のビルド時間の短縮していますが、Carthage に非対応のライブラリのみ Cocoapods を利用しています。

ベータテスト

TUNAG はスタメンのメンバー自身がヘビーユーザーです。そのためアプリの新バージョンは常に社内メンバーでのテストを実施しています。

開発中のステージング環境で動作するアプリは、Fabric の Beta というサービスにより開発メンバーの iOSバイスにデプロイしています。この Fabric は Twitter 社が提供していたモバイルアプリの開発支援サービスですが、Google 社に売却されて現在 Firebase への統合が進められている状態 です。Crashlytics も Fabric が提供するサービスの一つでしたが、Firebase への統合もほぼ完了しています。Beta も Firebase App Distribution として統合される予定です。そのため Beta によるベータテスト中にアプリがクラッシュした場合も、Crashlytics によりちゃんとレポートされるので助かります。

(2020/2/5 追記) Firebase App Distribution がベータリリースされたため、2019年12月に Fabric Beta からの移行しました。

新バージョンの開発の終盤では、開発メンバーだけではなく社内のたくさんのメンバーにて普段利用してフィードバックしてもらうために、プロダクション環境で動作するアプリを Apple 公式の Test Flight で社内メンバーに配信しています。

そしてテストやリリースのためのアプリのビルドには Fastlane を使用しています。Fastlane には Beta や Testflight へのアプリのアップロードや、クラッシュ解析用のシンボルファイルのアップロードなどの機能が揃っているため、ビルドからデプロイまでの一連の流れをコードで定義して自動実行できてしまいます。

さいごに

いかがでしたでしょうか。TUNAG の iOS アプリの開発はこのようなモダンな環境で行なっています。これは(実は)この半年間くらいで整備してきたもので、今後は Android アプリの方も徹底改善していく予定です。

このようなモダンな環境での iOS アプリ開発や、今後の Android アプリ開発環境がどのように改善されていくのかに興味を持たれた方は、こちら から気軽にご連絡ください!