はじめに
コンシューマ事業部iOSエンジニアの三浦です。
コンシューマ事業部では「あすけん」の開発に取り組んでいます。
「あすけん」モバイルアプリ版の開始が2013年と、10年以上の歴史があるサービスです。長らく施策実装に注力してきましたが、反面、開発環境の最適化や技術的な改善まで手が回っていませんでした。
この課題に対処するため、昨年度からは技術改善に特化したチームが発足し、開発体制と技術の両面での改善を進めてきました。
今回は、そうした取り組みも踏まえ、2024年6月現在のあすけんiOSアプリの開発環境についてご紹介します。
技術スタック
使用言語
言語比率は Swift 99%、Objective-C 1% です。
昨年中に、Objective-C の割合を 25% から 1% に大幅に削減することができました。
今期からはKMPの本格導入も始まりましたので、今後はKotlinも開発言語として学習を進めていきます。
Project構成
パッケージ管理には CocoaPods を使用していましたがSwift Package Manager への移行も進めています。Xcode のバージョン管理については、評価期間を設けた上で最新版に追従するようにしています。
UIとアーキテクチャ
Apple Watch やウィジェットなどの一部を除き、既存画面の大半が UIKit + SnapKit のコードベースレイアウトで構成されているのが現状です。今期からはほぼSwiftUIで実装する方針で進めています。
アーキテクチャに関しては、既存の UIKit + MVC から SwiftUI + 単方向データフロー(MVIベース) 構成への移行を進めています。今後さらにKMPを導入を進め、Android側と共通化することで開発効率の改善・意図しない仕様差異の防止を進めていく予定です。 アーキテクチャの話は別途記事として投稿予定ですのでご期待ください。
テスト
XCTestによるユニットテストを行っており、Given-When-Then構文パターンを取り入れています。現在のカバレッジは約10%であり、今後はテストを拡充させていく方針です。 また、開発者メニューを充実させ、動作確認や社内検証を容易にできる環境を整えています。 テスト工数削減としてMagicPodを導入を進めています。
import XCTest class SampleTest: XCTestCase { func testCalculateSum() { // Given let numbers = [1, 2, 3, 4, 5] // When let sum = calculateSum(numbers: numbers) // Then XCTAssertEqual(sum, 15) } func calculateSum(numbers: [Int]) -> Int { var sum = 0 for number in numbers { sum += number } return sum } }
CI/CD
CI/CDの実行には GitHub self-hosted runners を利用しています。
GitHub Actions と fastlane を組み合わせて、ビルドとデプロイを自動化しています。
コードレビュー効率化のために Danger を使用し、SwiftLint によるコードフォーマットの検証やPR作成ルールの遵守を確認しています。
監視・分析
モバイルアプリ上で発生するクラッシュの監視にはCrashlyticsを、APIへのリクエストエラーの監視にはNew Relicを使用しています。
また、Firebase Remote Config と Firebase Analytics を利用したABテストを積極的に実施しています。
ドキュメント文化
技術方針はADR(アーキテクチャデシジョンレコード) で管理し、意思決定の記録を残しています。
設計の詳細はDesign docを使い、すり合わせをします。
開発時のナレッジは積極的にドキュメント化し、メンバーで作業の効率化に努めています。
まとめ
以上、あすけんiOSアプリの開発環境についてご紹介しました。実装したい機能、手をつけられていない技術的な課題もまだまだ山積みの状況です。あすけんでは、過去の開発資産に敬意を持ちつつ前向きに改善を進めていける仲間を募集しています。質問・疑問等ありましたらぜひお気軽にカジュアル面談へお申し込みください。