2022年版 @cosme ネイティブアプリケーション開発の裏側

こんにちは!@cosmeアプリ開発をしている yukit です!
今回は私たちが普段@cosmeアプリの開発をどのように行なっているか紹介していきます。
@cosme iOSアプリ
@cosme Androidアプリ

また現在進行形でアプリ開発エンジニアを募集しています!この記事を読んで少しでも興味が湧いたら、最下部に採用の入り口リンクを用意しているので、気軽にお話しを聞きに来てください!

INDEX

  1. はじめに「@cosmeアプリ」ってどんなアプリ?
  2. 開発体制
  3. 開発手法
  4. 開発環境
  5. 今後の展望

はじめに「@cosmeアプリ」ってどんなアプリ?


@cosmeは「日本最大のコスメ・美容の総合サービス」です!
ネイティブアプリは2017年にリリースして現在6年目を迎えました。月間ユニークユーザ数は1000万人をとうに超え、現在のアプリの形になるまで多くのユーザーさんに育てていただきました。感謝ですね!
@cosmeアプリは今や単純なメディアではありません!EC、リアル店舗へのチェックイン、ポイントカード、化粧品メーカーとのデータ連携、などなど多くの機能が多角的且つ継続的にアップデートされており、その全てが集約するユーザーの重要なタッチポイントになっています。

ではそんなアプリがどのように開発されているかを紹介していきしょう。

開発体制

アプリ開発チームが担当するプラットフォームは Android、iOS、アプリ用ゲートウェイAPI (※)(以降AppAPI)の3つです。人数はそれぞれ以下のようになっています。

  • Android … 2~3人
  • iOS … 4人
  • AppAPI … 1~2人

(2022年2月現在の構成です。人数に多少変動があります)
パートナー社員も含まれていますが、社員とほぼ変わらない権限で全員が最前線で稼働しています。他にもデザイナー2人、企画4人がいて、一致団結で楽しくやってます!

(※)AppAPIとは、多数のバックエンドサービスとやりとりしてアプリ向けのデータマッピングを担当するAPIサーバです。こちらで詳しく解説しているのでよかったら合わせてご覧ください。

開発手法

リリースサイクルは週に一回

アプリは週1のサイクルでリリースしています。

金曜日には次週リリース予定の機能のテストが完了している状態を作り、アップデート申請提出します。週末の間に審査してもらい、週明け月曜日に各アプリストアに公開します。このサイクルを基本としてスピーディ且つ細かく機能のアップデートを図っています。

全員がコードレビュアー


“hubot”というSlack拡張を使ってレビュアーをランダムチョイスします。当選した人がそのプルリクのレビュー責任者になります。もちろん当選しなかった人もプルリクを見る権利があります。社員もパートナーも個々の成長に重きを置いていて、全員が「他者のソースを読む」ことを心がけています。

担当プラットフォームを固定しない

前項の開発体制はあくまで目安だったりします。というのも、メンバー個々の担当プラットフォームを固定しているわけではないからです。実際AndroidとAppAPIを兼任しているメンバーもいますし、Swiftを書きながらKMMプロジェクト(後述します)の共通モジュール開発でKotlinを書いているiOSエンジニアもいます。適材適所というよりは、個々の野望に応じた柔軟なスキル成形ができます。

無駄なミーティングはしない

無駄なミーティングは一切しません!以下のような必要最低限の定例ミーティングと、あとは担当案件毎に必要になったらオンラインで議論するくらいですね。

<朝会>(Daily)

毎朝10:30に開発チーム全員がGoogle Meet上に集合します。

  • JIRAのカンバンを使って個々の担当案件の進捗確認と懸念や課題の相談
  • Crashlytics と NewRelic から新たなアプリの課題が発生していないか
  • 他部署から各種依頼が来ていないか

などを短時間で確認します。ですが何よりこのリモートワーク時代だからこそ、毎朝顔を合わせておはようを言いたいですよね!

<アプリ開発チーム定例>(Weekly)

週一で全社的な連絡事項の共有と共に、KPTフレームワークを使った振り返りを行なっています。そこで挙がるトピックはとてもざっくばらんです。開発に限らずメンバーそれぞれが日々の中で感じた業務全般や生活面における課題点など様々です。そのトピックがタスク化され、頻繁に改善が行われています。PDCA大切ですね!

開発環境

ざっくりと開発環境をまとめました!

共通

分析 Crashlytics, Analytics, Redash, BigQuery
パフォーマンス計測 NewRelic
バージョン管理 GitHub, GitLab
デザイン共有 Sketch, Zeplin, Cacoo
タスク管理 JIRA
コミュニケーションツール Slack, Google Meet
ドキュメント・ナレッジ共有 Confluence

iOS

言語 Swift
アーキテクチャ MVVM, CleanArchitecture
View設計 StoryBoard (AutoLayout), SwiftUI
CI/CD fastlane, Bitrise
主要ライブラリ RxSwift, Combine, Firebase, swift-format, etc…

Android

言語 Kotlin
アーキテクチャ MVVM, CleanArchitecture
CI/CD fastlane, Github Actions
主要ライブラリ RxJava, Retrofit, OkHttp, Dagger, Mockito, Robolectric, etc…

AppAPI

言語 Golang
フレームワーク goa
CI/CD Gitlab CI

今後の展望

6年目を迎えた@cosmeアプリですがまだまだ発展途上です!現在以下のような野望が進行中です。

KMMプロジェクト

@cosmeアプリのビジネスロジックをKotlin Multiplatform Mobile (KMM) で共通モジュール化するプロジェクトが現在進行中です。複雑化するビジネスロジックのOS間差異を吸収し、開発効率化とともに保守性の向上を目指します。Viewだけはそれぞれのプラットフォームで表現することでOSの強みや特徴を活かします。

SwiftUI化

長らくiOS開発のレイアウト実装で主流だったUIKit/AutoLayoutをSwiftUIへの移行を模索しています。今現在もリリース中のプロダクトコードの一部に導入済みで、基盤が固まりつつあります。

まとめ

いかがでしたでしょうか!
今回は@cosmeアプリ開発の裏側と題して紹介してきましたが、ほんの一部にすぎません!是非一度カジュアルにお話を聞きに来て欲しいなと思います!

Wantedly
LAPRAS – iOSエンジニア枠
LAPRAS – Androidエンジニア枠
公式採用ページ