以下の内容はhttps://www.m3tech.blog/entry/2025/05/27/100000より取得しました。


マルチデバイスチームの8つのスマホアプリ、その技術選定を公開!

【マルチデバイスチーム ブログリレー1日目】

エンジニアリンググループ・マルチデバイスチーム(以下、マルデバ)の星野です。

2年ほど前にスマホアプリ開発で採用している技術というブログを書きましたが、時間が経ち、採用している技術に更新があったり、新しいアプリもリリースされましたので、改めてマルデバで開発しているアプリとその技術選定について紹介します!

アプリの数が多いため、各アプリの深掘りは行わず、アプリの概要 + 選定技術の紹介にとどめています。より詳しく知りたい方は方は、ぜひカジュアル面談・面接などでご質問ください!

m3.com アプリ

m3.com アプリ
エムスリーが誇る医療従事者向けポータルサイト m3.com のスマホアプリです。エムスリーテックブログでも過去に何度かリファクタリングについて執筆されてきました(7年間運用している主力iOSアプリをリファクタリングしている話7年間運用している主力アプリをリファクタリングしている話 Android編)が、リファクタリング完了後も最新の技術を取り込み続け、今も進化を続けています。

[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 アプリ

ToDo Plus アプリ
m3.com サービス内の「今日やること(ToDo)」に特化したアプリです。クイズやクーポンくじ、Lottie によるアニメーションなどエムスリーのスマホアプリの中では珍しくエンタメ色が濃いアプリとなっています。最近 iOS 側で利用している DI ライブラリを Needle から swift-dependencies に切り替えました。このライブラリ切り替えについては、この後のマルデバテックブログリレーで記載される予定ですので、お楽しみに!

[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 講演会アプリ

Web講演会アプリ
エムスリーの主力サービスの1つである「Web 講演会」に特化したスマホアプリです。 医療従事者向けの講演会を動画で視聴したり、気になる講演会を事前に視聴予約することで、開演直前に Push 通知でお知らせする機能などがあります。

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 アプリ

m3.com CAREER アプリ
医師向けの求人アプリです。常勤・非常勤・スポットアルバイトの全ての勤務形態に対応し、希望科目・エリア・その他条件を指定することで、医療機関や紹介会社からの求人を探すことができるアプリとなっています。最近は新たに「地図から求人を検索できる機能」をリリースし、好評を得ています。技術面では Flutter を採用し、riverpod + freezed による標準的な実装を行なっています。

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

m3.com 電子書籍アプリ

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 では開発スピードを高めるために「UIViewController + SwiftUI/UIKit でレイアウト」というハイブリッド実装・UIのプレビュー用のターゲット追加・その他にも工夫を凝らし、マルデバが誇るスーパーエンジニア(注: 私ではありません)がたった一人で iOS 2ヶ月/ Andorid 1ヶ月ほどで実装を完了させ、スピーディにリリースできました。

[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 ラウンジアプリ

m3 ラウンジアプリ
お医者さんによる実名での SNS サービス m3 ラウンジのスマホアプリです。 m3 ラウンジアプリはこれまでのマルデバで開発してきたアプリと異なり、KMP を全面的に導入する形でクロスプラットフォーム開発を行なっています。アーキテクチャはレイヤードで、Domain、Infra 部分に KMP を導入しています。現在リリースしてるのは iOS のみですが、今後 Android 版を開発する際には、この Domain、Infra を利用してスピーディな実装が進められる想定です。

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

AskDoctors アプリ

AskDoctors アプリ
マルデバが開発に携わっているアプリのうち、唯一の toC 向けのアプリです。AscDoctorsは日本最大級のオンライン医療相談サービスで、医療や健康・病気に関して気になる疑問・不安を、24時間365日いつでも医師に相談できますので、みなさんもぜひ一度試してみてください。

こちらの開発では Flutter を採用し、provider + freezed で実装を行なっています。

- Flutter によるクロスプラットフォーム開発
- レイヤードアーキテクチャ
- provider + freezed
- Open API (定義からクライアントコード生成)

まとめ

以前にブログ執筆した時と比べて、開発しているアプリの数が格段に増えてきました。ネイティブで実装しているもの、KMP を利用しているもの、Flutter で実装しているもの、最新の技術を取り込めているもの、少しずつ技術スタックが古くなり始めているもの(ぐぬぬ...)などアプリごとに特徴があり、1つのプロダクトに何年もかかりっきりで飽きてきた、ということがありません(笑)。マルデバでは引き続き、楽しみながら既存プロダクトのグロース・負債解消、新規プロダクトのリリースを進めていきます!

マルデバで開発している上記8つのスマホアプリ以外にも、「デジスマ診察券」などのマルデバ以外のチームで開発しているスマホアプリも複数あり、エムスリーは実はアプリの会社なのです。

We are hiring!

そんなエムスリーでは、スマホアプリエンジニアを大大大絶賛募集しています! このブログや、この後に続くマルデバメンバーからのブログを読んで、少しでも興味を持ちまたしたら、ぜひカジュアル面談などでお話ししましょう!

また、様々なイベント・カンファレンスにも出ていく予定ですので、エムスリーを見つけた際は気軽にお声がけ下さい。

最後に、マルデバのチーム紹介の資料も貼っておきますので、ぜひこちらもご覧下さい。

speakerdeck.com

jobs.m3.com




以上の内容はhttps://www.m3tech.blog/entry/2025/05/27/100000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14