Skip to main content
  1. Histories/

リモートワーク活性化アプリのフルスクラッチ開発

期間 役割 規模
2021年1月〜 iOSエンジニア iOS 1名。開発にあたっては、ディレクター・デザイナー・サーバサイドエンジニア・フロントエンドエンジニアと連携しつつ開発
言語 アーキテクチャ FW・ツール等
Swift MVP UIKit, Combine
OSS: Firebase, Alamofire, SwiftyUserDefaults, KeychainAccess, SwiftGen
Tool: Localazy
リモートワークを行うチームに向けたコラボレーション・コミュニケーションサービスの開発に従事。
チームメンバーが仕事をする位置情報の共有、マップ上に付加情報を表示する実装がメイン。
AppleのMapKitやCoreLocationに関する知識が得られた。

担当した業務: アプリケーションのフルスクラッチ開発 #

  • 難しかった部分

    • バックグラウンドでの位置情報取得が難しい
      • サービスの要求と、バッテリー・精度(端末の制約)のトレードオフ
        • 精度を高めるとバッテリーが減りやすい/バッテリーを考慮すると精度が低くなる
      • いくつもパターンをトライ・アンド・エラーし、サービスにあった精度を委託元と相談した
    • APIの開発タイミングとのずれ
      • 対処
        • View側から実装して対処
          • 動くものをまず見せて進捗を共有したい意図もあった
      • 振り返って
        • 通信周りの経験不足があった
          • 通信をモックできるように作れていない
          • View - Presenter - UseCase(通信ベタ書きになっている)
  • こだわった部分

    • 意識されにくいが体験を良くする実装
      • マップ表示の状態(位置・ズーム)を、アプリ再開時に前と同じ状態に復帰させる
      • マップ上をロングタップした際に、Haptic Feedback(クリック感のフィードバック)を返す
  • アーキテクチャ: MVP

    • 選定理由
      • 社内の他アプリで既に使われている
      • 当時の自身の経験あるアーキテクチャ
    • 振り返って
      • Presenter肥大化しやすい(ViewModelでも発生しうるが)
      • Presenterのテストがしにくくなる
        • viewへの依存、モックしにくさ
        • ViewModelのほうが、その点Viewへ依存がないのでテストしやすい

習得スキル #

  • Combineの使用
    • ユーザーに使用許諾を求める箇所(位置情報、マイク)
    • 通信等の非同期処理(Feature使用)
    • Notificationのハンドリング
  • CoreLocationのノウハウ
    • バックグラウンドで継続的に位置情報の更新を得る2種類の方法
      • CLLocationManagerのallowsBackgroundLocationUpdatesを使用する方法
      • Significant-Change Location Serviceを使用する方法
    • 緯度経度を住所に変換するReverseGeocoderの使用
  • MapKitのノウハウ
    • マップの基本実装と、ピン(アノテーション)の基本実装
  • アプリの文字列管理と多言語化
    • Localizationの基本的な実装と、Localazyを使用した文字列管理のノウハウを習得
  • SwiftGenを使用したリソース管理
    • 画像・文字列を対象にした

開発で意識していたこと #

  • ファーストリリースの時点で、ユーザーとのコミュニケーション手段を複数入れておくこと
    • 意図
      • プッシュ通知だけでは、不許可によりコミュニケーション取れないことがある
        • 運営から大切な情報がある場合に、届けられないことになる
    • 実施したこと
      • アプリ内メッセージ(Firebase In App Messaging)を、初期バージョンから導入
        • 運用開始以降まだ使用してはいないが、万が一の安心感はある

開発以外の業務 #

  • 地図でタップした位置の場所情報を取得するためのプロトタイプ作成
    • 意図
      • MapKitのSearch機能の技術検証のため
    • 実施してみて
      • Reigionの設定が難しかったが、これを通してCGRectの仕様理解が深まった