はじめに
iOS開発をしていると必ず向き合うのが「依存管理」。
- SDKを入れる
- ライブラリを追加する
- バージョンを固定する
- チームで再現性を保つ
その代表的なツールが:
- Carthage
- CocoaPods
- Swift Package Manager(SPM)
この記事では、それぞれの特徴・メリット・デメリットを整理します。
ざっくり結論
| 観点 | CocoaPods | Carthage | SPM |
|---|---|---|---|
| 歴史 | 長い | やや古い | 比較的新しい |
| 導入難易度 | やや高い | 普通 | 低い |
| Xcode統合 | △ | △ | ◎ |
| 今後の主流 | △ | △ | ◎ |
現在の主流は SPM です。
1. CocoaPods
概要
最も有名で歴史の長い依存管理ツール。
Podfile に依存を書き、pod install で導入。
特徴
- Podfile.lockで依存を固定
- プロジェクトにPodsを組み込む
- ワークスペース(.xcworkspace)を生成
メリット
- 対応ライブラリが多い
- 企業SDKで採用例が多い
- 細かい制御が可能
デメリット
- ビルドが重くなりがち
- プロジェクト構成が複雑になる
- Ruby環境依存
向いているケース
- 古いプロジェクト
- 社内SDKがPods前提
- 細かいビルド制御が必要
2. Carthage
概要
「できるだけプロジェクトを汚さない」思想のツール。
バイナリをビルドしてフレームワークとしてリンクする。
特徴
- Xcodeプロジェクトを書き換えない
- シンプルな設計
- 手動リンクが必要
メリット
- プロジェクトがクリーン
- 挙動が分かりやすい
デメリット
- 手動設定が多い
- メンテナンスが減少傾向
- Apple公式ではない
向いているケース
- 既存構成を崩したくない
- CocoaPodsを避けたい
※最近はあまり新規採用されない印象。
3. Swift Package Manager(SPM)
概要
Apple公式の依存管理ツール。
Xcodeに標準統合されている。
特徴
- XcodeのGUIから追加可能
- Package.swiftベース
- Swift標準エコシステム
メリット
- 追加が簡単
- Xcodeとの統合が強い
- Ruby不要
- CIとの相性が良い
デメリット
- 古いライブラリは未対応の場合あり
- 複雑なビルド設定はやや弱い
向いているケース
- 新規プロジェクト
- Swift中心開発
- シンプル構成を保ちたい
依存管理で重要なポイント
どのツールを使うかより大事なのは:
- バージョンを固定する
- lockファイルをGit管理する
- CIで整合性をチェックする
- 手動運用に依存しない
依存管理は「入れる作業」ではなく、
再現性を保証する仕組み です。
今選ぶならどれ?
新規プロジェクト
→ SPM一択
既存がPods
→ 無理に移行しなくてもOK
Carthageを使っている場合
→ 将来的にSPM移行を検討してもよい
まとめ
- CocoaPodsは実績豊富だがやや重い
- Carthageは思想がシンプルだが勢いが減少
- SPMが現在の主流で今後も強い
最終的に重要なのは、「チーム全体で安全に再現できること」だと思います。
依存関係の管理は一見地味ですが、一度問題が起きると影響範囲が広く、復旧にも時間がかかる領域です。
だからこそ、その場しのぎではなく、チームとして再現性と保守性を担保できる仕組みを選ぶことが大切だと考えています。