株式会社カウシェでモバイルチームのエンジニアリングマネージャーをしています、深谷と申します。2020年の創業期から参画し、現在はiOSやAndroidのエンジニアと一緒にプロダクト開発や課題解決に取り組んでいます。
私たちは野菜がもらえるお買い物アプリ「カウシェ」というユニークなサービスを運営しています。アプリ上で作物に水や肥料をあげて最後まで育てると、無料でその野菜や商品がもらえるという体験が大きな特徴です。こうした体験を支えるiOS開発の取り組みや、私たちの開発組織が向き合っている課題、そして今後の展望などをお話しできればと思います。
3チーム体制と技術スタック
現在、カウシェの開発は大きく3チーム体制になっています。
●カスタマーエクスペリエンス(CX)チーム
お客様が毎日アプリを楽しみ続けられるような体験を作り上げることを主眼に、「カウシェファーム」のようなアプリのデイリーユースに直結する機能を手がけています。
● ECチーム
カウシェのコアとなるお買い物体験を作っているチームで商品棚や購入処理など、ユーザーが実際に商品を探して買う部分を担当しています。
● パートナーチーム
カウシェに商品を提供してくださる事業者向け管理画面を開発しており、いわばBtoB領域の機能実装を担っています。
今回は iOSがテーマのイベントですので、CXとECのモバイル開発に焦点を当ててご説明します。現在、どちらのチームにもそれぞれiOSとAndroidのエンジニアが 2 人ずつ在籍している状況です。
次に、技術スタックを簡単にお話しします。
カウシェ全体では、iOS は主にSwift 言語とSwiftUI 、AndroidはKotlinとJetpack Composeで開発を進めています。いずれも宣言的UIを採用している点が特徴で、iOSのアーキテクチャとしてはMVVMをベースにモジュール分割を行い、XcodeGenで複数プロジェクト構成を組んでいます。さらに最近では、Swift Package Managerでコードを段階的にモジュール化し、マルチモジュール体制へ移行を進めているところです。
今回は私たちが直面している具体的な問題やその解決策を深掘りします。
モバイル開発を阻む3つの課題
現在のモバイル開発で直面している主な課題は、レガシーコードの改善、技術的な開発生産性アップ、組織的な開発生産性アップの3つとなります。これらについてどのように取り組んでいるのか、今後どう進めていきたいのかを解説していきます。
課題1:レガシーコードの改善~既存コードの課題
カウシェは2020年9月にリリースされた初期バージョン(v1.0.0)から約4年半が経過しています。当時はiOS 13をミニマムサポートに設定してSwiftUIを導入し始めたばかりでしたが、SwiftUI本体のアップデートやSwift Package Managerなど周辺技術の変化がめまぐるしく、これらに追随しながら開発を続ける難しさが出てきています。
また、リリース当初に選定したアーキテクチャ(SwiftUI+MVVM+XcodeGen)が、時間の経過とともにレガシー化しつつある点です。モジュール分割の仕方やプロジェクト構成を含め、継ぎ足しで進めてきた部分が蓄積しているのが現状です。
レガシーコードを刷新するために、既存の開発と並行してプロジェクト全体の構成を少しずつ見直しています。まずはレイヤー構成とディレクトリ構成の変更です。具体的には、XcodeGenのマルチプロジェクト構成からSwift Package Managerを使用しつつ、DomainやData、Presentation、Sharedといったレイヤーを作成し、新しいPackagesフォルダに移行しています。ディレクトリも分けて新しく構成し、既存のコードも活かしながら必要に応じて移管することで新旧を共存させる手法を選択しました。こうすることで、開発を止めずにレガシーコードを段階的に改善できる体制を整えています。まだXcodeGenも残していますが、今後はSwift Package Managerによるモジュール管理をさらに進め、最終的にはスムーズに保守・拡張ができるコードベースへ移行したいと考えています。
課題2:技術的な開発生産性の向上~AI活用のモニタリング
2つ目の大きなテーマは、技術的な開発生産性の向上です。近年、生成AIの進化はめざましく、わずかな期間で大きな飛躍が見られます。私たちのモバイル開発チームは、2チームにそれぞれ2名ずつという少人数体制で開発を進めているため、一人ひとりの生産性を高め、できるだけ多くの施策をスピーディーに実装することが求められています。
そこで、最近は生成AIを積極的に取り入れ、日常の開発業務に活用しています。具体的には、全モバイルエンジニアがClineを導入しており、必要に応じて別のツールも柔軟に採用できる仕組みを用意しています。毎日、プルリクエストが作成されていますが、その際AIをどのように使っているか、またAIを活用するプルリクの割合がどれくらいなのかをモニタリングし、チーム全体で可視化しています。
さらに、社内では「AI活用集」のページを設け、開発でAIを使ったノウハウや成功事例、Tips を共有しています。こうした情報を蓄積し、メンバー同士で学び合うことで、少人数でも高いアウトプットを目指し、技術的な開発生産性を加速させたいと考えています。
課題3:組織的な開発生産性の向上~モノレポ化による効果
最後の課題は、組織全体の開発生産性をいかに高めるかという取り組みです。私たちは少人数体制でiOSとAndroidの開発を行っているため、スピーディーに多くの機能をリリースするには、組織的なアプローチが不可欠と考えています。
具体的には、iOS EngineerとAndroid Engineerをあえて分けず、「Mobile Engineer」として括ったチーム編成を採用しました。これにより、得意・不得意があっても相互に学び合いながら、同じエンジニアがiOSとAndroid両方のコードを書く体制を構築しています。コードレビューも領域を超えて行い、知見を共有することで、チームとしての総合力を高めています。
さらに直近では、iOSとAndroidで別々に存在していたリポジトリを1つにまとめる「モノレポ化」を進めました。これによって、コードベースが一元化され、AIを使ったコンテキストやルールの管理が容易になります。プルリクエストを作成する際の切り替えコストを減らし、よりスムーズにレビューや開発が行えるようになるのが大きなメリットです。
もちろん、iOSとAndroidの両方をすぐに書けるわけではありませんが、別領域・別OSの開発に取り組むエンジニア向けとして、小規模な不具合修正やシンプルなタスクをオンボーディングタスクとして用意することで、キャッチアップを進めています。週1回ほどの勉強会で最新ニュースや気になるトピックを共有するなど、チーム全体で情報をアップデートし合う取り組みも継続しています。
こうした組織横断の工夫を重ねることで、少人数でも高い開発速度と品質を両立し、新しい機能のアイデアを素早く形にできる環境づくりを目指しています。
モノレポ化とAI連携が拓く未来
最後に、私たちがこれから目指す方向についてお話しします。まずはレガシーコードの課題に対して、パッケージ構成を最新技術に合わせて移行しやすい状態を作りながら、並行開発が可能なアーキテクチャを検討しています。
次に、AIの活用をこれまで以上に加速させる計画があります。クロスプラットフォーム開発を一気通貫で進めるアプローチとして、モノレポ化の成果を活かし、iOS/Android間のコード生成や変換を自動化できないか検討中です。命名規則やコードの分割粒度などをAIのルールとして一元管理し、iOSとAndroidを同時に、しかもスピーディーに開発できる体制を作れないか模索しています。
また、FigmaやNotion、Slackといったツールの情報をMCPサーバーを介して連携させ、設計情報をもとにアプリケーションのコードを自動生成する取り組みにもチャレンジしたいと考えています。UIテストやQAなどの自動化もAIによって高度化できる可能性があり、品質とデリバリーの両軸を強化する大きなチャンスだと捉えています。
We Are Hiring!
カウシェではモバイルエンジニアをはじめ、他のポジションも積極的に採用しており、カジュアル面談も随時実施しています。ご興味があればぜひお声がけください。[1]
-
本記事は、2025年5月21日に開催されたイベントの内容を元に編集した記事です。 ↩