Swift・iOS

Swiftを中心に学んだことを記録に残すブログです。技術に関係ない記事もたまに書いています。

【Swift】Carthageとは(CocoaPodsとどちらを使うべきか)

■はじめに

ライブラリ管理にはCocoaPodsを使っているのですが、Carthageとの違いやメリット、どちらを使うべきかといった理解ができていないため、Carthageを中心に調べてみました。

 

■Carthageとは

「Carthage builds your dependencies and provides you with binary frameworks, but you retain full control over your project structure and setup. Carthage does not automatically modify your project files or your build settings.」

引用:https://github.com/Carthage/Carthage

※訳(Google翻訳のままです)

「Carthageは依存関係を構築し、バイナリフレームワークを提供しますが、プロジェクト構造と設定を完全に制御できます。Carthageはプロジェクトファイルやビルド設定を自動的には変更しません。」

 

上記からはCocoaPodsはプロジェクトファイルやビルド設定を自動的に変更することが推測できるのですが、いまいち理解できません。

 

■Carthageの開発背景
「CocoaPods を使おうとは思いませんでした。ライブラリの作者は CocoaPods で配布時に必要となる PodSpec をプロジェクトに追加することに面倒さを感じていました。私たちにとって、ここに記述する情報は Xcode と Git にすでにある情報でしたし、なぜ重複させる必要があるのか疑問に思いました。また CocoaPods がプロジェクトのセットアップを勝手にやってしまうことに対しても不満を持っていました。私たちは Xcode プロジェクトをセットアップする方法を知っているので、ツールに任せてしまうと柔軟性が失われてしまいます。」

引用:シンプルな依存関係管理システム Carthage

 

上記から、ライブラリの作者にとってCocoaPodsは面倒な作業が発生してしまい、かつ柔軟性が失われることがデメリットとのことです。

使う側にはどのような影響があるのでしょうか。CocoaPodsを使うデメリットとCarthageを使うメリットに分けて見てみます。

 

■CocoaPodsを使うデメリット

チーム開発の場合、それぞれのメンバーのCocoaPodsのバージョンが異なる場合は、Podsファイルの挙動も変わり、ビルドができなくなる可能性があります。そのため、メンバーのバージョンを固定する手間がかかってしまうようです。

 

iOS開発でのライブラリ管理といえばcocoapodsだと思います。超有名なcocoapodsですが、一歩間違えば開発環境が変わってしまうことも。開発者のローカルにあるcocoapodsのバージョンがまちまちだと開発環境が変わってしまいますよね。最悪の場合ビルドが出来ない可能性もあります。」

引用:cocoapodsの仕組みとバージョン固定 - Qiita

 

iOS開発で各種プラグインを管理するために、cocoapodsを利用していると思いますがcocoapods自体のバージョンが変わってしまうとPodsファイルの挙動も変わってしまうのでできるだけプロジェクトと一緒に管理できたほうがメリットが多いです。」

引用:bundler で cocoapods そのもののバージョン管理をする - Qiita

 

■Carthageを使うメリット

一方でCarthageは、上記CocoaPodsで対応が必要となる可能性のあるバージョンの固定作業が不要です。

 

「Carthage(カーセッジ)はライブラリ管理ツールです。プロジェクトの依存するライブラリをまとめて管理することができます。依存ライブラリのバージョンも指定できるので、ライブラリのバージョンがあがって動かなくなったなどがなくてよいです。」

引用:[iOS][Mac]ライブラリ管理のCarthage(カーセッジ)でライブラリを組み込み | Coffee Breakにプログラミング備忘録

 

■じゃあCarthage使えばよくない?

ライブラリ管理ツール自体のバージョン管理の側面からすると、Carthageの方がよい気がしますが、メジャーなSDKがCarthageにはない場合もあることから、CocoaPodsを使わざるを得ないこともあるとのことです。 

参考:iOSアプリを作るときのおすすめ構成 – Swift・iOSコラム – Medium

 

■おわりに

CocoaPodsとCarthageどちらを使うべきかというテーマで調べてみて、現状は併用になるのかなと思いました。本記事でやった気にならずに自分で動かしてみることが大切かなと思うので、別途Carthage触ってみます。

 

■関連リンク

https://github.com/Carthage/Carthage

シンプルな依存関係管理システム Carthage

cocoapodsの仕組みとバージョン固定 - Qiita

bundler で cocoapods そのもののバージョン管理をする - Qiita

[iOS][Mac]ライブラリ管理のCarthage(カーセッジ)でライブラリを組み込み | Coffee Breakにプログラミング備忘録

iOSアプリを作るときのおすすめ構成 – Swift・iOSコラム – Medium