【マルチデバイスチーム ブログリレー1日目】
エンジニアリンググループ・マルチデバイスチーム(以下、マルデバ)の星野です。
2年ほど前にスマホアプリ開発で採用している技術というブログを書きましたが、時間が経ち、採用している技術に更新があったり、新しいアプリもリリースされましたので、改めてマルデバで開発しているアプリとその技術選定について紹介します!
アプリの数が多いため、各アプリの深掘りは行わず、アプリの概要 + 選定技術の紹介にとどめています。より詳しく知りたい方は方は、ぜひカジュアル面談・面接などでご質問ください!
- m3.com アプリ
- ToDo Plus アプリ
- Web 講演会アプリ
- m3.com CAREER アプリ
- m3.com 電子書籍アプリ
- 薬キャリアプリ
- m3 ラウンジアプリ
- AskDoctors アプリ
- まとめ
- We are hiring!
m3.com アプリ

[iOS] - 設計: MVVM + Flux + レイヤードアーキテクチャ、マルチモジュール構成 - UI: - UIKit(宣言的UIでのコード実装) - 新規画面から「UIViewController + レイアウトは SwiftUI」というハイブリッド実装を導入 - ライブラリ管理: SPM、Mint - 利用技術: - Swift Concurrency - Combine - Needle(DI) - 一部 KMP を導入 etc. - その他: Swift 6 移行中 [Android] - 設計: MVVM + Flux + レイヤードアーキテクチャ、マルチモジュール構成 - UI: Jetpack Compose(一部 Android View が残っている) - 利用技術: - Kotlin Coroutines - Dagger Hilt - renovate - 一部 KMP を導入 etc.
ToDo Plus アプリ

[iOS] - 設計: MVVM + Clean Architecture - UI: UIKit(宣言的UIでのコード実装、一部 Xib 利用) - ライブラリ管理: CocoaPods、SPM - 利用技術: - ReactiveSwift - GraphQL、REST API(一部) - swift-dependencies(DI) - renovate - 一部 KMP を導入 etc. [Android] - 設計: MVVM + Clean Architecture - UI: JetpackCompose、Android View - 利用技術: - Kotlin Coroutines - GraphQL、REST API(一部) - Dagger Hilt - renovate - 一部 KMP を導入 etc.
Web 講演会アプリ

iOS は2020年と SwiftUI がリリースされて間もない頃から SwiftUI を全面採用したのが特徴的でした。Android はまだ Android View でレイアウトを組んでいますが、1stリリースの当初から MVVM 設計のため Compose 移行に際しての設計の大きな手直しは不要と見ています。
[iOS] - 設計: MVVM + Flux - UI: SwiftUI - ライブラリ管理: SPM、CocoaPods、Mint - 技術スタック: - Combine - swift-dependencies(DI) - GraphQL、REST API(一部) - renovate etc. [Android] - 設計: MVVM + Flux - UI: Android View - 技術スタック: - Kotlin Coroutines - Dagger Hilt - GraphQL、REST API(一部) - renovate etc.
m3.com CAREER アプリ

- Flutter によるクロスプラットフォーム開発 - レイヤードアーキテクチャ - riverpod + freezed による標準的な実装
m3.com 電子書籍アプリ

iOS 側は一部でリファクタリング前の古い設計・コードが残っているものの、MVVM + レイヤードアーキテクチャによるリファクタリング・リニューアルがだいぶ進みました。今後は残りの部分のアーキテクチャの入れ替えを行い、その後にライブラリや CocoaPods からの脱却、機能改善など更なるブラッシュアップを進めていく予定です。
Android も今年に入ってからリファクタリングを開始しました。DB・通信周りのインフラ部分のリファクタリングを完了させ、現在は画面毎のリファクタリング(MVVM + レイヤードアーキテクチャ への切り替え、Compose 導入)を絶賛進めています。
[iOS] - 設計: MVVM + レイヤードアーキテクチャ、マルチモジュール構成 - UI: UIKit(宣言的UIでのコード実装) - ライブラリ管理: SPM、CocoaPods、Mint - 技術スタック: - Combine、Swift Concurrency - Needle(DI) etc. [Android] - 設計: MVVM + レイヤードアーキテクチャ、マルチモジュール構成 - UI: Jetpack Compose、Android View - 技術スタック: - Kotlin Coroutines - Dagger Hilt etc.
薬キャリアプリ

[iOS] - 設計: MVVM + レイヤードアーキテクチャ、マルチモジュール構成 - UI: 「UIViewController + SwiftUI/UIKit でレイアウト」のハイブリッド実装 - ライブラリ管理: SPM、Mint - 技術スタック: - Combine、Swift Concurrency - Needle(DI) etc. [Android] - 設計: MVVM + レイヤードアーキテクチャ、マルチモジュール構成 - UI: Jetpack Compose - 技術スタック: - Kotlin Coroutines - Dagger Hilt etc.
m3 ラウンジアプリ

- 設計: MVVM + レイヤードアーキテクチャ、マルチモジュール構成(Androidアプリ、iOS アプリ、 shared(KMP)) - UI: SwiftUI(iOS) - ライブラリ管理: Gradle、SPM、Mint - 技術スタック: - KMP - Combine、Swift Concurrency - Open API(定義からクライアントコード生成) - renovate etc.
AskDoctors アプリ

こちらの開発では Flutter を採用し、provider + freezed で実装を行なっています。
- Flutter によるクロスプラットフォーム開発 - レイヤードアーキテクチャ - provider + freezed - Open API (定義からクライアントコード生成)
まとめ
以前にブログ執筆した時と比べて、開発しているアプリの数が格段に増えてきました。ネイティブで実装しているもの、KMP を利用しているもの、Flutter で実装しているもの、最新の技術を取り込めているもの、少しずつ技術スタックが古くなり始めているもの(ぐぬぬ...)などアプリごとに特徴があり、1つのプロダクトに何年もかかりっきりで飽きてきた、ということがありません(笑)。マルデバでは引き続き、楽しみながら既存プロダクトのグロース・負債解消、新規プロダクトのリリースを進めていきます!
マルデバで開発している上記8つのスマホアプリ以外にも、「デジスマ診察券」などのマルデバ以外のチームで開発しているスマホアプリも複数あり、エムスリーは実はアプリの会社なのです。
We are hiring!
そんなエムスリーでは、スマホアプリエンジニアを大大大絶賛募集しています! このブログや、この後に続くマルデバメンバーからのブログを読んで、少しでも興味を持ちまたしたら、ぜひカジュアル面談などでお話ししましょう!
また、様々なイベント・カンファレンスにも出ていく予定ですので、エムスリーを見つけた際は気軽にお声がけ下さい。
最後に、マルデバのチーム紹介の資料も貼っておきますので、ぜひこちらもご覧下さい。