⚡️

iOSサードパーティ製ライブラリへの依存を減らし続けアプリサイズ約30MB減った話

2025/03/03に公開

こんにちは、スペースマーケットでモバイルエンジニアをしている村田です。
2022年2月に入社し、早いもので3年が経ちました。振り返ると、ライブラリ削除やObjective-CからSwiftへのリファクタリング、FatViewControllerのSwiftUI化など、少ないメンバーで絶えず負債返却を続けてきたな〜と、少し自画自賛しています。

入社当初、そういえば100MB近くあったゲストiOSアプリのサイズが、現在では60MB台にまで減少しました。サードパーティ製ライブラリの削除が大きな要因だと感じているので、このタイミングでどのようなライブラリを削除してきたのかをまとめつつ、今後のライブラリ削除のギアを上げたいと思います。

負債解消モチベーション

とっ散らかった部屋では快適に過ごせないのと同様に、技術的負債のゴミ山の中では気持ちよくコードが書けないです。自分の仕事現場を綺麗に保つため、文句を言わず全て自分ごととして技術的負債返却を続けるのは当たり前なのかなと考えています。

(と言いつつ作業部屋めちゃくちゃ汚いです💩)

削除したライブラリ

2025年現在に至るまで削除してきたライブラリを2022年から振り返ります!

2022年

DateTools(削除PR作成日: 2022/03/11)

NSDate型を取り扱いやすくするためのライブラリ

https://github.com/MatthewYork/DateTools

予約後メッセージやり取り画面のクラスでisToday/isYesterdayメソッドのみ利用していました。

if (date as NSDate).isToday() {
    return "Today".localize()
} else if (date as NSDate).isYesterday() {
    return "Yesterday".localize()
}

Unbox(2022/06/08)

Swiftの構造体やクラスとJSONデータを簡単にマッピングするためのライブラリ。
2019年にアーカイブされており、Swift4で登場したCodableの影響でお役御免になったようですね(歴史を感じる)

https://github.com/JohnSundell/Unbox

Codextended(2022/06/13)

Codableのエンコードやデコード処理をより簡単にするためのライブラリ。
自分の確認時にはそもそも未使用だったため削除。

Example
// Before
let data = try JSONEncoder().encode(value)
// After
let data = try value.encoded()

https://github.com/JohnSundell/Codextended

UILabel+Copyable(2022/06/23)

UILabelのテキストをタップしてコピー可能にするためのライブラリ。
スペース詳細画面のタイトル名などをコピー可能にするために使用していましたが、ユーザー目線でコピー可能テキストの判別ができず、効果の程が微妙だったため削除しました。

https://github.com/alexandreos/UILabel-Copyable

Wrap(2022/10/03)

Jsonエンコードを簡単に行うためのライブラリ。
Unboxと同じ作者で、こちらも2021年にアーカイブされているようでした。

https://github.com/JohnSundell/Wrap

2023年

AppsFlyer(2023/01/17)

ディファードディープリンク機能を利用していましたが、施策の完了と共に不要になったため削除。

https://github.com/AppsFlyerSDK/AppsFlyerFramework?tab=readme-ov-file#pods

MagazineLayout(2023/04/13)

グリッドレイアウトを簡単に実装するためのUIライブラリ。

https://github.com/airbnb/MagazineLayout

以前は検索結果一覧画面をグリッド表示するために利用していましたが、スペース画像を大きく見せたいため表示をリストのみにしたタイミングで削除。

MercariQRScanner(2023/05/24)

QRコードスキャンライブラリ。
友人招待QRコード読み取りのために利用していたが、招待機能クローズと共に削除。

https://github.com/mercari/QRScanner

JSONModel(2023/08/28)

Unbox/WrapようなObjective-C版ライブラリですね。

https://github.com/jsonmodel/jsonmodel

削除経緯や対応方針など以下記事にまとめてます🙏

https://zenn.dev/spacemarket/articles/goodbye-jsonmodel

AFnetworking(2023/10/24)

Alamofireの前進となるObjective-C製HTTPネットワーキングライブラリ。
2023年1月にメンテナンス終了しており、Issueでプライバシーマニフェストのサポートしないことを表明(comment)していたため気合い入れて削除。

https://github.com/AFNetworking/AFNetworking

Objective-C製のRESTクライアントクラスががっつり依存していたため、プライバシーマニフェスト対応の渦中でスピード感持って対応するの大変でした。
利用箇所の洗い出しと工数見積もり懐かしいエモい。

PanModal(2023/11/17)

ハーフモーダルを簡単に実装するためのUIライブラリ。
iOS15以降sheetPresentationControllerで簡単に実装できるようになったため不要になりました。

https://github.com/slackhq/PanModal

検索条件の入力画面など数画面で利用していたものを移行対応して削除。
当時の対応PR見て思い出したけど、そういえばiOS16以降じゃないと任意の高さ指定出来ませんでしたね。

Before: PanModal After: iOS15 After: iOS16~

2024年

Firebase/Functions(2024/01/15)

FirebaseのCloudFunctionsを実行するためのライブラリ。
以前短期間実施していた施策の機能をFunctionで実装しアプリから実行していましたが、終了後呼び出しがなくなったため削除しました。

https://github.com/firebase/firebase-ios-sdk/tree/main/FirebaseFunctions

RealmSwift(2024/02/26)

簡単にデータの保存、取得、管理ができるDBライブラリ。

https://github.com/realm/realm-swift

プライバシーマニフェスト対応時にメジャーバージョン更新対応に時間がかかりそうだったため、どうせ時間がかかるならということでSwiftDataへ移行しました。
ROSCAさんが運営する「ROSCAFE」に登壇した際に、詳細話しているのでスライド覗いてみて下さい🙏

https://note.com/rosca_pr/n/nbff386ccf5b2

LineKit(2024/05/26)

シェアモーダル(UIActivityViewController)へLINEを追加するために使用していたが、現在は標準で表示されるため削除。

https://github.com/dlackty/LineKit/

FirebaseAnalytics(2024/05/26)

Firebaseのユーザー行動を分析できる機能を利用するためのライブラリ。
ユーザートラッキングツールは別サービスへ1本化したため削除。

https://github.com/firebase/firebase-ios-sdk/tree/main/FirebaseAnalytics

UICKeyChainStore(2024/12/27)

Keychain(パスワード管理システム)を簡単に扱うためのライブラリ。
OAuth認証アクセストークン管理の為に利用していましたが、Firebaseのカスタムトークン認証へ移行したことでトークン保持をSDKがよしなにやってくれるため不要になり削除。

https://github.com/kishikawakatsumi/UICKeyChainStore

2025年

Alamofire(2025/02/18)

Swift製のObjective-C製HTTPネットワーキングライブラリ。
自分が入社後Alamofireへ依存していないRESTクライアントクラスを作成し、ちょこちょこそちらへ移行進めていました。2/17時点で5リクエストが旧RESTクライアントクラス利用していましたが、夜中急にテンション上がり一気に移行しました(連続で飛んでくるレビューを許してくれるメンバーに感謝)

https://github.com/Alamofire/Alamofire

FloatingPanel(2025/02/18)

半モーダルを簡単に実装するためのUIライブラリ

https://github.com/scenee/FloatingPanel

お気に入り一覧画面にて利用していましたが、デザイン変更に伴い利用箇所がなくなったため削除。

Before After

アプリサイズの減少

他要因もあると思いますが計18ライブラリをプロジェクトから削除し、入社当初100MB近かったアプリサイズが現在 67.6MB まで減少しました!要らないものを消したいというお掃除心だけでサードパーティ製ライブラリへの依存を剥がしてきた結果、思わぬ副産物としてこの成果を得ることができました。

アプリサイズはDL数に影響が出ることが調査結果として出ているため、今後も継続して不要なライブラリの削減を進めていきたいです。まだまだアルヨ。

https://repro.io/contents/effect-of-app-size-2/

アプリの機能などには変化を加えず、アプリサイズだけを元々の3MBから99MB、123MB、そして150MBへと徐々に上げていき、DL数に影響があるのかを調べるテストを行いました。すると、アプリサイズを増加させたことで最大66%もCVRが低下するという結果が出たのです。

最後に

スペースマーケットでは一緒に働く仲間を絶賛募集中です!
詳しくは以下をご確認の上ご応募ください。

https://jobs.forkwell.com/spacemarket/jobs/28607

https://jobs.forkwell.com/spacemarket/jobs/28583

GitHubで編集を提案
スペースマーケット Engineer Blog

Discussion