Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KMP導入後の運用で 見えてきた課題と次の一手 / KMP Ops Night

Avatar for Yuya Harada Yuya Harada
November 11, 2025
37

KMP導入後の運用で 見えてきた課題と次の一手 / KMP Ops Night

Wantedlyでは、2020年にKMPを導入してから5年が経過しました。ビジネスロジックの共通化により技術負債やOS間の不一致を解消してきた一方で、運用を続ける中で開発体験やチームスケールに関する新たな課題も見えてきました。現場の声をもとに導入後のリアルな課題と、それらを乗り越えるための次の一手について紹介します。

Avatar for Yuya Harada

Yuya Harada

November 11, 2025
Tweet

Transcript

  1. © 2025 Wantedly, Inc. KMP導⼊後の運⽤で ⾒えてきた課題と次の⼀⼿ KMP Ops Night -

    KMP導⼊後に訪れる、本当の戦いとは - Nov. 11 2025 - Yuya Harada
  2. © 2025 Wantedly, Inc. はじめに Wantedly入社後 2024/7 ~ 現在 Wantedly

    入社前 2024/5 ~ 2024/6 前職 2021/1 ~ 2024/6 各プラットフォームでの開発 KMP での開発 iPhone アプリ開発 → 95% Android アプリ開発 → 5% KMP と SwiftUI (稀に UIKit) で開発 KMP の学習 ビジネスロジックの共通化の⽅法や expect / actual の使い⽅を学ぶ ビジネスロジックはそれぞれの プラットフォームで記述 ビジネスロジックは プラットフォーム関係なく統一 私⾃⾝KMPを触り始めてからまだ約1年半
  3. © 2025 Wantedly, Inc. CONTENTS 01 なぜKMPを導⼊したのか 02 現在のプロジェクト構成 03

    現在までに解決した課題 04 運⽤フェーズで⾒えてきた課題 05 今後⽬指す姿と伴う課題
  4. © 2025 Wantedly, Inc. なぜKMPを導入したのか • React Nativeの負債化 ◦ 一部の画面を開発していた

    Webエンジニアのチームが解散。 メ ンテナーが不在に。 • iOSとAndroidでの動作の不一致 ◦ 同一の機能に対して 挙動が異なると いう問題が頻発。 導入背景
  5. © 2025 Wantedly, Inc. なぜKMPを導入したのか • React Nativeの負債化 ◦ 一部の画面を開発していた

    Webエンジニアのチームが解散。 メ ンテナーが不在に。 • iOSとAndroidでの動作の不一致 ◦ 同一の機能に対して 挙動が異なると いう問題が頻発。 導入背景 • 負債の返済 ◦ React Nativeの削除が完了。 モバイルエンジニアの技術スタックでメ ンテナンスが可能に。 • 動作の不一致の解消 ◦ iOS & Androidで共通のビジネスロ ジックを実現。動作の不一致が減少し、 品質向上につながった 。 導入結果
  6. © 2025 Wantedly, Inc. なぜKMPを導入したのか • React Nativeの負債化 ◦ 一部の画面を開発していた

    Webエンジニアのチームが解散。 メ ンテナーが不在に。 • iOSとAndroidでの動作の不一致 ◦ 同一の機能に対して 挙動が異なると いう問題が頻発。 導入背景 • 負債の返済 ◦ React Nativeの削除が完了。 モバイルエンジニアの技術スタックでメ ンテナンスが可能に。 • 動作の不一致の解消 ◦ iOS & Androidで共通のビジネスロ ジックを実現。動作の不一致が減少し、 品質向上につながった 。 導入結果 現在5年ほど運用中で、約6割のロジックの共通化を実現 新規画面はすべてKMPで実装を行う
  7. © 2025 Wantedly, Inc. KMP Android iOS KMP KMP 現在のプロジェクト構成

    KMP、Android、iOS の3つのリポジトリ構成 Maven 経由で配布 Swift PM 経由で配布
  8. © 2025 Wantedly, Inc. SKIEの導⼊で、iOS側で⾏っていた Sealed class → Enumへの 変換部分のリファクタができた

    現在までに解決した課題 リファクタしたコード量を簡単 にまとめて教えてほしい。 合計リファクタ量: 削除⾏数: 1,546⾏ 追加⾏数: 447⾏ 影響ファイル数: 109ファイル
  9. © 2025 Wantedly, Inc. SKIEとは... Without SKIE With SKIE https://skie.touchlab.co/features/sealed#basic-usage

    • 明⽰的な as キャストが不要になり、enum associated valuesのようになる • 冗⻑で読みづらいコードから可読性の⾼いコードへ • defaultケースが不要に
  10. © 2025 Wantedly, Inc. 運用フェーズで見えてきた課題 開発体験の課題 破壊的変更がある場合、 iOS / Android

    双⽅のリポ ジトリで対処が必要。 Xcode上でのKMPのコード ジャンプが⾯倒で、Android Studioを開いている。 iOS Dev iOS Dev KMPの実装を取り込むまで に時間がかかってしまう。 iOS/Android Dev Xcode上でブレークポイン トがおけず、デバッグしづ らい。 iOS/Android Dev
  11. © 2025 Wantedly, Inc. 運用フェーズで見えてきた課題 どれも当初からあった課題だが、メンバーが増えて顕著になった 破壊的変更がある場合、 iOS / Android

    双⽅のリポ ジトリで対処が必要。 Xcode上でのKMPのコード ジャンプが⾯倒で、Android Studioを開いている。 iOS Dev iOS Dev KMPの実装を取り込むまで に時間がかかってしまう。 iOS/Android Dev Xcode上でブレークポイン トがおけず、デバッグしづ らい。 iOS/Android Dev どういうことか?
  12. © 2025 Wantedly, Inc. KMP Android iOS KMP KMP 運用フェーズで見えてきた課題

    現在 KMP、Android、iOS の3つのリポジトリ構成 Maven 経由で配布 Swift PM 経由で配布
  13. © 2025 Wantedly, Inc. 運用フェーズで見えてきた課題 KMP の実装をiOS / Android で取り込むまでの流れ

    STEP 01 実装マージ STEP 02 バイナリ配布 STEP 03 PRが作成される STEP 04 PRマージ KMP KMP Android iOS Android iOS
  14. © 2025 Wantedly, Inc. 運用フェーズで見えてきた課題 KMPの実装を取り込むまでに”時間がかかる” STEP 01 実装マージ STEP

    02 バイナリ配布 STEP 03 PRが作成される STEP 04 PRマージ KMP KMP Android iOS Android iOS CI待ち バイナリのビルド待ち
  15. © 2025 Wantedly, Inc. 運用フェーズで見えてきた課題 破壊的変更がある場合、iOS / Android双方に対して対処が必要 STEP 01

    実装マージ STEP 02 バイナリ配布 STEP 03 PRが作成される STEP 04 PRマージ KMP KMP Android iOS Android iOS 破壊的変更が発⽣ 破壊的変更によりCIが通らない 該当箇所を修正したPRを作成し、マージ
  16. © 2025 Wantedly, Inc. 今後の方向性 モノレポの導入  アトミックな変更が可能に KMPの破壊的変更 & iOS

    / Androidの変更を ⼀気に⾏うことができる  CI/CDを待たないデリバリー 従来の構成で必要であった、iOS/Androidに変更を 取り込むためのCI/CDを待つプロセスが不要に KMP Android iOS KMP KMP Current Ideal KMP Android iOS Monorepo
  17. © 2025 Wantedly, Inc. 今後目指す姿と伴う課題 モノレポ化において起こる課題 各種⼿順書の変更や修正 CI/CDの整備 各リポジトリで管理してい たissueをどうするか

    両プラットフォームの理解 がより必要になる 破壊的変更に伴う 両プラットフォームの修正 までを⼀貫して対応する