【iOS開発】 CocoaPodsとは何なのか〜導入〜使い方まで徹底解説

CocoaPodsのイメージ画像iOSアプリ開発
サバ缶
サバ缶

どうもこんにちは!
サバ缶(@tech_begin)です。

iOSアプリ開発で必須とも言える「CocoaPods」。

現場ではよく「ポッズ」と略されて呼ばれることが多いですね。

意外とあまり知らずに使っているCocoaPodsについて、徹底的に調べました!

この記事でわかること
  • CocoaPodsの概要
  • CocoaPodsの導入手順
  • 「pod install」と「pod update」の違い
  • PodfileとPodfile.lockの違い
  • Podfile.lockを使う理由について
  • CocoaPods導入後の取り扱い方

CocoaPodsとは

CocoaPodsとは、iOSアプリ開発で使用するライブラリの管理を簡単にするためのツールです。

CocoaPods公式サイトより引用します。

[原文]
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects.
It has over 91 thousand libraries and is used in over 3 million apps. CocoaPods can help you scale your projects elegantly.

[日本語訳]
CocoaPodsは、SwiftおよびObjective-C Cocoaプロジェクトの依存関係マネージャーです。
91,000を超えるライブラリがあり、300万を超えるアプリで使用されています。
CocoaPodsは、プロジェクトをエレガントにスケーリングするのに役立ちます。

CocoaPods公式サイト[WHAT IS COCOAPODS]より

要するに、『ライブラリ管理が簡単にできるツールだよ』ということですね。

》ライブラリとは
ある特定の機能を持つプログラムをかき集めたものです。
例えば、通信処理を担う機能や、ローディングを表示する機能などです。
それらで必要なライブラリを適宜導入して開発を進めていきます。

「エレガントにスケーリング」というのは、「すっきりと拡張できる」という意味合いがあります。

CocoaPodsの導入方法

CocoaPodsをインストールし、実際のプロジェクトで使用する手順を解説します。

まずは図で全体像を理解しておきましょう。

CocoaPodsの導入手順イメージ

Ruby言語のgemをアップデートし、最新の状態にする

$ sudo gem update --system

》gemとは
Ruby言語で作られたパッケージ管理ツール(正式名称: RubyGems)です。
CocoaPods は Rubyで開発されているため、gemを使ってインストールします。
ちなみに、macOSにはRubyが標準搭載されています。

gemを使ってCocoaPodsをインストールする

図の①に該当します。

$ sudo gem install cocoapods

上記コマンドで上手くいかなければ、下記のコマンドを実行しましょう。

$ sudo gem install -n /usr/local/bin cocoapods

上手くいかなった理由については、こちら(Qiita)の記事をご参照ください。

》補足情報
インストール時に --no-documentオプションをつけると良いかもしれません。
必要ないドキュメントが含まれない上、処理が早く終わるメリットがあります。
詳しく知りたい方は、こちら(Qiita)の記事をご参照ください。

リポジトリ情報のセットアップ

図の②に該当します。

$ pod setup

インストール後、初期設定をしなければなりません。

初期設定自体はCocoaPods内部で実行されるので、特に面倒な作業はないです。

インストールされているか確認

こちらも図の②に該当します。

$ pod --version

バージョンが表示されたらOKです!

プロジェクトに移動する

$ cd Users/sabacan/projects/iOS/TestApp

ライブラリを使いたいプロジェクトに移動します。上記のパスは例です。

Podfileを作成する

図の③に該当します。

$ pod init

上記のコマンドを実行すると、Podfileの雛形が自動で作成されます。

作成されたPodfileに、使用したいライブラリを記述して管理します。

コマンド実行時にXcodeを起動しているとエラーが起きてしまう恐れがあります。

Xcodeは閉じておくように注意してくださいね。

ライブラリをインストールする

図の④に該当します。

Podfileが生成されたら、自分が使いたいライブラリを記載します。Podfileの書き方については後述しています。

$ pod install

Podfileに記載したライブラリをインストールします。

エラーが起きた場合は、Xcodeを閉じてもう一度試してみましょう。

CocoaPods導入後の取り扱い方

ここまでは、いったんCocoaPodsの導入方法をご紹介してきました。
導入後の注意点や忘れがちなことをご紹介します。

プロジェクトを開くとき

CocoaPods導入後、プロジェクトファイル内に「プロジェクト名.xcworkspace」というファイルが生成されます。

今後は、そのファイルを実行してプロジェクトを開く必要があります。

Xcodeで開くと、画面左側のNavigatorに「Pods」が追加されているはずです!

Is the project.xcworkspace file important?
I am doing command line xcodebuild using a shell script. My problem is if I open and close the xx.xcodeproj file once and then use that command it works well. ...

『pod install』と『pod update』の違い

複数の記事を参考にしたのですが、ほとんどが以下のような解釈でした。

誤った使い分け
  • pod install
    • プロジェクトを最初に設定するときのみ使用する
  • pod update
    • install以降の新規インストールでも使用する

しかし、これは間違いのようです。

CocoaPodsの公式サイトでも言及されています。

正しくは下記のような使い分けです。

正しい使い分け
  • pod install
    • Podfileを編集しPodsを追加・削除・更新するたびに使用する
    • Podfile.lockを参照し、インストールされていないものだけ依存性を解決する。
    • 逆にインストールされているものは、新しいバージョンなど関係なしにPodfile.lockに記載されているバージョンをダウンロードする。
  • pod update
    • Podfile.lockは参照せず、Podfileに記載されている全てのPodsを最新バージョンにアップデートする
    • pod update [Pod名]と指定することも可能

ちなみに、『pod outdated』を実行すればアップデート可能なPodsをリストアップしてくれるようです。

改めて整理すると『pod install』と『pod update』の違いは以下のようになります。

『pod install』と『pod update』の違い
  • pod install
    • Podfile.lockを参照してインストール
    • Podfile.lockが存在しない場合は生成する
  • pod update
    • Podfile.lockを参照せずにインストール
    • Podfile.lockを更新する

PodfileとPodfile.lockの違い

上の項目でPodfile.lockという言葉が出てきましたね。

CocoaPodsでは「Podfile」と「Podfile.lock」というファイルの2つを取り扱います。

混同してしまいそうですが、注意してくださいね。

》Podfile.lock
各Podsのインストールされたバージョンを追跡し、それらのバージョンを固定するためのものです。
pod installを実行すると、このPodfile.lockが更新されます。

新しいPodsをインストールするたびに、バージョンをこのファイルに書き出します。

参考ページ:【Swift】PodfileとPodfile.lockの使い分け【CocoaPods】(note.com)

Podfile.lockを使う理由について

ひとことでまとめると「他の人とライブラリのバージョンを揃えるため」です。

なぜPodfile.lockを使用するのか、その理由について図解を交えて解説していきますね。

まず初めに、Podfile.lockが無い世界を見てみましょう。
ライブラリの最新バージョンが1.3.3だった場合、 Podfileを元に取得してくるので、最新バージョンを取得してきます。
つまりインストール済みのライブラリは1.3.3となります。

PodfileとPodfile.lockの必要性_01

数日後、ライブラリの開発者が新しい機能や不具合修正を施した、バージョン1.4.0をリリースしました。

その直後に、同じプロジェクトメンバのAさんが環境構築を行いました。

すると、現在リリースされている最新バージョンは1.4.0になるので、あなたとAさんのライブラリバージョンに差異が発生します。

Aさんが、1.4.0だけにある機能を実装するとあなたの環境で不具合を起こす場合が出てきます。
可能性は低いとはいえ、ライブラリのバージョンは、極力揃えておきたいところ。

PodfileとPodfile.lockの必要性_02

そこでPodfile.lockの登場です。

Podfile.lockをGit管理しておけば、他の人と共有がしやすくなります。

あなたの環境で1.3.3をインストールすると、Podfile.lockにも反映されます。
(そしてGitプッシュしておきましょう)

その後、1.4.0にアップデートされ、Aさんが環境構築をし始めました。

Podfile.lockには、1.3.3と記載されています。
(あなたがインストールした時に反映されたものをPUSHしているからですね)

PodfileとPodfile.lockの必要性_03

ここでpod installを実行すると、Podfile.lockを参照してライブラリを取得するため、最新版ではなく指定されている1.3.3をダウンロードしていきます。

他の人とライブラリのバージョンを揃えたり、使用しているライブラリを揃えるためにPodfile.lockは必要なんですね。

PodfileとPodfile.lockの必要性_04

もしAさんが間違ってpod updateを実行したとしましょう。

すると、インストール済みのライブラリも、Podfile.lockも1.4.0に更新されます。

あれれ、これだとあなたと状況が異なりますね。
でも、Gitで管理している以上、少なくとも変化が加わっていることはわかるので、間違いに気づけるわけです。

共通のライブラリを使うため、万が一更新しても間違いに気づける仕組みにするためPodfile.lockが使われているんですね。

PodfileとPodfile.lockの必要性_05

こちらの解説は、以下の動画を参考に作成いたしました。
動画の方がイメージしやすいと思うので、こちらもご覧ください(自動翻訳で見るのがオススメ)。

Podfileの書き方

Podfile の初期状態から少しだけ修正し、必要最低限の記載にしています。

上記は『SwiftyJSONの最新版』と、『Alamofireのバージョン3.0以上4.0未満』を使うように指定した書き方の例です。

target 'MyApp' do
  use_frameworks!
  pod 'SwiftyJSON'
  pod 'Alamofire', '~> 3.0'
end
記述例意味
> 0.10.1 より後のバージョン
>= 0.10.1以降のバージョン
< 0.10.1 より前のバージョン
<= 0.10.1 およびそれ以前のバージョン
~> 0.1.20.1.2 および 0.2 までのバージョン (0.2 以降を除く)
~> 0.10.1 および 1.0 までのバージョン (1.0 以降を除く)
~> 00 および 1.0 までのバージョン (1.0 以降を除く)

参考ページ:【Swift】ライブラリをインストールする際のPodfileファイルの書き方(note.com)
参考ページ:CocoaPods公式サイト[The Podfile]

CocoaPodsの定番ライブラリ

よく使われているライブラリを(私自身の備忘録も兼ねて)ご紹介します!

そのほかにもありましたら、Twitterで教えてください!

ライブラリ名特徴
AlamofireHTTP通信を行うための定番ライブラリ
CryptoSwift暗号化関連のライブラリ
FirebaseFirebaseの機能を簡単に実装できるライブラリ
FlexLayoutCSSのプロパティの一つであるFlex-Boxを踏襲し、
直感的にレイアウトを構築することができるライブラリ
KeychainAccessKeychainAPIの実装が簡単になるライブラリ
Nukeアプリで画像を取得→読み込み→表示までを効率的に実装できるライブラリ
ObjectMapperモデルオブジェクト(クラスと構造体)と、JSON間のデータ変換を簡単にするライブラリ
PinLayout自動レイアウトなしの非常に高速なレイアウトライブラリ
高速、簡単、直感的、など利点が多い。
SwiftyGifGIF画像を読み込むことができるライブラリ
Toast-SwiftUIViewオブジェクトクラスにトースト通知を追加することができるライブラリ
XLPagerTabStrip横スライドできるページャーを実装できるライブラリ
TOCropViewController画像を回転したり、切り取ったりする際に便利なライブラリ

Firebaseとは、Googleが提供しているGCPというクラウドサービスを、アプリ開発向けに特化し集約したプラットフォームのことです。

ユーザの管理や認証、アプリクラッシュの管理やPUSH通知など様々な機能を提供しています。

Keychain(キーチェーン)とは、ユーザIDやパスワード、クレジットカード情報といった機密情報を集中管理するしくみのことです。

iOSアプリの多くはこの機能に対応しており、キーチェーンに直接アクセスできるため、ログインが必要なサービスのユーザID/パスワードやクレジットカード番号の入力欄を自動的に埋めることができます。

このKeychainを使用するためには「KeychainAPI」が必要になります。

● Keychainとは
● KeychainとUserDefaultsとの違い

まとめ

CocoaPodsに関するまとめ
  • CocoaPods
    • iOSアプリ開発で使用するライブラリの管理を簡単にするためのツール
  • pod install
    • Podfile.lockを参照してインストールする(ない場合は生成)
  • pod update
    • Podfile.lockを参照せずにインストールする(lockファイルを更新)
  • Podfile.lock
    • 複数人での開発において、使用ライブラリやバージョンを統一するため

上記以外にもCocoaPodsの使い方、注意点などについて幅広く触れてご紹介してきました。

実際のiOSアプリ開発では、Xcodeと一緒に使うのでまだまだ使い方は奥深いです。

私も使いこなせているわけではないので、もっと勉強していきます💪

もし「ここ違うよ〜」といった指摘箇所があれば、お気軽にTwitterでご連絡ください!

タイトルとURLをコピーしました