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

テストコードすら書けなかったレガシーアプリがAIと上手に協働できるようになるまでの軌跡

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 テストコードすら書けなかったレガシーアプリがAIと上手に協働できるようになるまでの軌跡

炎上の中リリースされ、
長い間メンテナンスされず、
当時の担当者もチームに不在。

アーキテクチャも成立しておらず、
ソースコードはスパゲッティ、
テストコードはもちろん書けない。

私は、そんなレガシーなアプリのリニューアルプロジェクトにアサインされたAndroidエンジニアです。
iOS未経験の立場でチームのリードとしてiOS版の技術的な意思決定にも関与することとなりました。

Androidエンジニアとしての知見をベースに
・リアーキテクト
・ユニットテストの整備
・SwiftUIの導入
・生成AIとの協働
をiOSアプリで実現するまでの取り組みをお話しする予定です。

少しイロモノなトピックかもしれませんが、レガシーから脱却するために効いた取り組みの事例が、皆さんのエンジニアリングの参考になればと思います。

iOSDC2025 スポンサーセッションの登壇資料です
https://fortee.jp/iosdc-japan-2025/proposal/dfea09ab-3ebf-4327-8c9f-c52f90db08ae

Avatar for ディップ株式会社

ディップ株式会社 PRO

September 20, 2025
Tweet

Video

More Decks by ディップ株式会社

Other Decks in Technology

Transcript

  1. Copyright © DIP Corporation, All rights reserved. Agenda 1. ⾃⼰紹介

    2. 会社紹介 3. はじめに 4. アプリ改善の取り組み 5. さいごに
  2. 吉田 誠 Yoshida Makoto ディップ株式会社 ソリューション開発本部メディア開発統括部 Androidエンジニア • 人生初のiOSDCで、人生初の登壇 •

    カンファレンスネイルがアツい • ものすごく緊張しています • お手柔らかにお願いします
  3. 会社紹介:ディップ株式会社とは 7 ビジョン “Labor force solution company” ⼈材サービスとDXサービスの提供を通して、労働市場における諸課題を解決し、 誰もが働く喜びと幸せを感じられる社会の実現を⽬指します。 ×

    DX事業 Digital labor force solution バイトコミュニケーションアプリ『バイトルトーク』や、 機能を絞ったシンプルなSaaS型の『コボット』を通じて、 職場環境やコミュニケーション課題を解決 しています。 ⼈材サービス事業 Human work force solution ユーザーファーストな独自機能を搭載した、 求人情報・人材紹介サービスの提供を通じて、 ユーザーの就業課題 を解決しています。
  4. アプリ改善の取り組み: 抱えていた課題 当然、様々な問題を引き起こすリスクがあった 無秩序な コード テストコード 実装不可 認知負荷 増大 自動テスト

    整備不可 変更が困 難 計画通りに 進まない 見積もり 精度低下 • リリースの遅延 • 施策効果低下 • 開発組織の信頼低下 • チームの疲弊 • メンバー離職 など 止まらない コスト増
  5. アプリ改善の取り組み: リアーキテクト アーキテクチャーレイヤー以下は feature駆動パッケージングを意識した構成 data ├─ featureXX/ │ ├─ XXApi

    │ ├─ XXRepository │ └─ XXResponse ├─ featureYY/ │ ├─ YYApi │ ├─ YYRepository │ └─ YYResponse └─ featureZZ/ ├─ ZZDao ├─ ZZRecord └─ ZZRepository domain ├─ featureXX/ │ ├─ XXUseCase │ └─ XXDomainData ├─ featureYY/ │ ├─ YYUseCase │ └─ YYDomainData └─ featureZZ/ ├─ ZZUseCase └─ ZZDomainData
  6. アプリ改善の取り組み: リアーキテクト 機能という関⼼に基づいてクラスが集まり コードの読解がしやすくなった data ├─ featureXX/ │ ├─ XXApi

    │ ├─ XXRepository │ └─ XXResponse ├─ featureYY/ │ ├─ YYApi │ ├─ YYRepository │ └─ YYResponse └─ featureZZ/ ├─ ZZDao ├─ ZZRecord └─ ZZRepository domain ├─ featureXX/ │ ├─ XXUseCase │ └─ XXDomainData ├─ featureYY/ │ ├─ YYUseCase │ └─ YYDomainData └─ featureZZ/ ├─ ZZUseCase └─ ZZDomainData 読み書きしやすい!
  7. アプリ改善の取り組み: ユニットテスト 最低限意識するべきことに⽬星をつけた • テストの単位は⼀つの振る舞い ◦ 「仕事⼀覧を取得する」 ◦ 「古いものを削除する」 ◦

    「〜〜する」の命名を意識してみた • AAAパターンで記述 ◦ テストの流れの道標 ◦ 書き⽅を統⼀できる 著:Vladimir Khorikov 訳:須田智之 単体テストの考え方 /使い方 マイナビ出版(2022)
  8. アプリ改善の取り組み: ユニットテスト ユニットテストの効果を得るために... • とにかくテストが書ければ OK󰢏 • ただしDataSourceの差し替えのみで書く ◦ 外部依存は

    DataSourceに閉じていて、ここの差し替えでテストは 書ける ◦ DataSource以外の置き換えると、アーキテクチャ構造の無視が 可能になってしまう ◦ そうなると構造を維持する効果がなくなってしまう
  9. アプリ改善の取り組み: 宣⾔的UIの導⼊ ✅ UIファイルの肥⼤化解消 ✅ 実装タスクの細分化‧分担しやすくなっ た ✅ PRが⼩さくなりレビューしやすくなった presentation

    └─ screen/ ├─ component/ │ ├─ HogeComponent │ └─ FugaComponent ├─ section/ │ ├─ HogeSection │ └─ FugaSection └─ XXView
  10. Copyright © DIP Corporation, All rights reserved. まとめ 1. リアーキテクト

    2. ユニットテストの導⼊ 3. 宣⾔的UIの導⼊ 4. AIとの協働 Google推奨アーキテクチャとfeature駆動パッケージングの実践 読み書きに迷う時間が減り、テスタビリティも得られた 「とにかく書く」ために意識の低いスタンスを重視 結果、期待以上の恩恵を得られた Androidコミュニティの知⾒をベースに分割⽅針を決めた うまくワークし、保守性と開発効率が向上した アプリの構造が説明可能になり、効果的なルールを作れた 出⼒の精度が上がり、コーディングの6割ぐらいをAIに任せられた