LCL Engineers' Blog

夜行バス比較なび(高速バス比較)・格安移動・バスとりっぷを運営する LCLの開発者ブログ

2016年 新規iOSアプリ開発で採用した技術・プロセス

弊社では、2016年07月に「高速バス比較」というiOSアプリをリリースしました。

www.bushikaku.net

リリースして1ヶ月ほどたちましたので、本記事では、今回の開発で採用した技術・ツール・プロセスを一通りご紹介します。

言語

Swift 2.2を採用しています。

サポートiOSバージョン

iOS 8.0 以上をサポートしています。

利用ユーザ数や開発生産性を考慮し、iOS 8.0未満は対象外にすることにしました。

リリース後1ヶ月の時点では、iOS 8.X系でご利用いただいているユーザは 5%弱ですので、当面はiOS 8.X系はサポート対象に入れておいたほうが良いと考えてます。

ライブラリ

ライブラリ管理には、CocoaPods , Carthage を利用しています。

主要なライブラリとしては、次のようなものを利用しています。

  • HTTP通信
    • Alamofire
  • 画像ダウンロード
    • SDWebImage
  • データ永続化
    • realm
  • ローディング表示
    • SVProgressHUD
  • カレンダー
    • FSCalendar

FSCalendarは、カレンダー関係のロジックを実装する必要がなく楽なのですが、制約が厳しくデザイン上あまり凝ったことはできません。 弊社アプリはカレンダーが、UIとして重要なパーツのため、かなりカスタマイズをしてデザインを変更しました。 ただ、今となってはデザインが重要な場合はFSCalendarは利用せず、自作したほうがよかったと判断しています。

f:id:lcl-engineer:20160824170952p:plain

ブランチ運用

ブランチ運用は、Git Flowを利用しています。 以下の記事を参考にさせていただいています。

iOSアプリ開発のGit運用 · hikarock blog

ビルド・テスト配布

iOSアプリ開発において、良いサービスを早く作り上げていくためには、開発の初期段階でのビルド・テスト配布の自動化は必須だと思っています。ビルド・テスト配布が手動の場合は、どうしてもある程度まとまった単位でのテスト配布となってしまい、フィードバックサイクルが長くなってしまいます。

弊社では、ビルド・テスト配布の自動化は、fastlane + Crashlytics(fabric) + Bitrise を利用し、1日に何度もテストアプリを配布し、短いサイクルでフィードバックを回しています。

各種サービスの詳細や、環境によるアプリの使い分けは以下の記事で紹介しています。

techblog.lclco.com techblog.lclco.com

クラッシュ監視

どれだけ入念にテストを実施しても、クラッシュは発生してしまいますので、クラッシュ監視のサービスは導入必須だと考えています。

現在は、以下のクラッシュ監視サービスを利用しています。

  • Crashlytics
  • bugsnag

テスト配布アプリにも仕込んでおくことで、テスト中に発生したクラッシュを即把握できるので、テスト担当者からわざわざ詳細な報告を受ける必要がありません。また、発生したクラッシュを元にすぐIssueを作成でき、クラッシュ検知 → Issue作成 → 修正という流れが開発者のみで完結できます。

ログ

アプリ起動、主要なボタン操作のタイミングでログを取得しています。以下の項目をサーバ側に随時送信し、サーバ側のデータベースに格納するようにしています。

  • 端末種類 ( iphone 5s,6sなど)
  • iOSバージョン
  • アプリバージョン
  • 任意パラメータ (JSON)

PUSH通知

PUSH通知サービス

PUSH通知は、Amazon Simple Notification Service (SNS) を利用しています。

数あるサービスのなかから、以下の理由でSNSを選定しています。

  • コストが圧倒的に安い
  • 開封率などの分析・セグメント別配信などほぼ全て自前での実装になるが、将来的に発生する可能性がある要件に柔軟に対応できる

SNSのノウハウについては、Gunosyさんの資料がとても参考になりました。

900万ダウンロードアプリ『Gunosy』を支える大規模モバイルプッシュ通知基盤 // Speaker Deck

証明書

PUSH関連の証明書はややこしいので、こちらは完全にfastlaneを頼ってます。

fastlane pemで、iOSのPUSH通知用証明書を自動生成する - LCL 開発者ブログ

AppStore 申請

AppStoreの申請に必要な文言・スクリーンショットは、fastlane deliverを利用して登録しています。

手動でも大きな手間ではありませんが、各種情報をGit管理でき確実に反映できるのが利点です。

fastlane/deliver at master · fastlane/fastlane · GitHub

UIプロトタイプ

Prottを利用しました。

iPhone実機にProttアプリを入れると、実際のアプリに近いイメージでプロトタイプが確認できるので、早い段階でのUIブラッシュアップが可能です。

ただし、他のツールの調査が不十分ですので、継続して良い物を探していきたいと考えてます。

アクセス解析

今のところは、GTMを利用して、Google Analyticsのみを利用している状態です。この辺りも引き続き必要に応じて、他のサービスの導入を考えています。

iOSアプリ(Swift)へのGTM導入 & TIPS - LCL 開発者ブログ

まとめ

今回の新規アプリ開発で採用している技術について紹介しました。 現時点では、できるだけ広く利用している技術を選定しましたが、アプリ界隈はどんどん新しいサービスが出てくるので、うまく見極めてよいものは導入していきたいと考えてます。