Objective-C, Swift用のライブラリ管理ツール「CocoaPods」を導入しよう

投稿者 : OSCA

[PR] 関東地方の美しい夜景を観にいこう。 夜景サイト「夜景散歩」で夜景スポットを検索

ライブラリ管理ツールとは

 Objective-C や Swift を用いて iOS や Mac のアプリケーションを作成する際に、それぞれの言語の標準の機能だけでアプリケーションを作成することは少ないのではないでしょうか。 Objective-C や Swift 標準の関数やクラスよりも簡単に処理を記述できるライブラリがインターネットには数多く公開されていますので、それらを利用することが多いでしょう。
 それらのサードパーティ・ライブラリを利用する場合には、ライブラリのソースコードを GitHub などからダウンロードしてきてプロジェクトに追加するわけですが、利用したいライブラリごとに一つ一つ手動で追加するのはとても面倒くさい作業です。 利用したいライブラリをできるだけ自動的にプロジェクトに追加できたら、とても便利だとは思いませんか? それを実現してくれるのがライブラリ管理ツールです。

ライブラリ管理ツール「CocoaPods」とは?

 Objective-C, Swift 向けのライブラリ管理ツールにはいくつかありますが、とても人気があって多く利用されているライブラリ管理ツールが、本稿で解説する「CocoaPods」です。

利用イメージ

 本稿の後半で詳細は説明しますが、まずどのくらいライブラリ管理が楽になるかをイメージしてもらうため、ざっと利用イメージを述べます。
 プロジェクトに Podfile というファイルを追加して、利用したいライブラリを次のように記述します。 利用したいライブラリ名とバージョン番号を一覧で記述するイメージです。 次の例では Alamofire 3.0, SwiftyJSON 2.3 を利用したいライブラリとして記述しました。

target 'MySampleApp' do
  pod 'Alamofire', '~> 3.0'
  pod 'SwiftyJSON', '~> 2.3'
end

 これだけで準備は完了で、あとはコマンドラインから pod install コマンドを実行するだけです。 そうすると CocoaPods が自動的にインターネットから指定したライブラリをダウンロードしてプロジェクトに追加してくれます。 このように本来の目的とは関係のないライブラリ管理作業を減らしてくれることが CocoaPods の利点です。

CocoaPods をインストールしよう

 CocoaPods を利用するイメージは湧きましたか? それではさっそく CocoaPods をインストールしてみましょう。
 CocoaPods 自体は Ruby 言語で作成されており、Ruby のライブラリ管理ツール RubyGem でインストールします。 「Objective-C, Swift 用のライブラリ管理ツールを、Ruby のライブラリ管理ツールでインストールする」とは、少し奇妙に感じるかもしれませんネ。 「それでは先にその RubyGem をインストールしないといけないのでは?」と思うかも知れませんが、Ruby は MacOS にもともとインストールされていますので、何もせずに RubyGem を利用することができます。 もし MacOS にデフォルトでインストールされている Ruby ではなく、もっと新しいバージョンの Ruby を使いたい場合などは、「Homebrewで rbenv と Ruby をインストールする手順」などを参考にして導入してください。

 はじめに、インストールされている RubyGem が最新のバージョンになるように Ruby 自身をアップデートしましょう。 次のコマンドで RubyGem をアップデートできます。

$ sudo gem update --system

 RubyGem で CocoaPods をインストールします。 次のように gem install コマンドで cocoapods を指定してインストールします。 CocoaPods を動作させるのに必要な他のライブラリも同時にインストールしてくれます。

$ sudo gem install cocoapods
(略)
Parsing documentation for cocoapods-1.1.1
Installing ri documentation for cocoapods-1.1.1
Done installing documentation for i18n, thread_safe, tzinfo, concurrent-ruby, activesupport, nap, fuzzy_match, cocoapods-core, claide, cocoapods-deintegrate, cocoapods-downloader, cocoapods-plugins, cocoapods-search, cocoapods-stats, netrc, cocoapods-trunk, cocoapods-try, molinillo, CFPropertyList, colored, nanaimo, xcodeproj, escape, fourflusher, gh_inspector, cocoapods after 17 seconds
26 gems installed

 2016年12月末現在、Ruby 2.4.0 では依存ライブラリのコンパイルに失敗して CocoaPods がインストールできませんでした。 Ruby 2.4.0 がまだリリースされたばかりなので、対応していないものがあるようです。 Ruby 2.3.3 であればインストールできました。
 Ruby を rbenv でインストールしている場合は、gem install の後に rbenv rehash コマンドの実行が必要な場合がありますので、忘れずに実行してください。 rehash が完了すると、~/.rbenv/shims/pod が作成されて pod コマンドが利用できるようになります。

 これで CocoaPods がインストールできました。 インストールできたことを確認するため、CocoaPods のバージョンを pod –version コマンドで表示してみます。 次の例のように表示できればOKです。

$ pod --version
1.1.1

 最後に CocoaPods の初期設定コマンド pod setup を実行します。 (処理にかなり時間がかかる場合があります)

$ pod setup
Setting up CocoaPods master repo
(略)
Setup completed

 これで初期設定も完了です。

CocoaPods を利用してみよう

 それではさっそく CocoaPods を利用してみましょう。 ここでは使い方を学ぶために XCode で Swift の「Single View Application」を作りました。 プロジェクト名は「Sample」にしました。 プロジェクトを作成したら、プロジェクトのフォルダに移動します。

$ cd Sample
$ ls -l
total 0
drwxr-xr-x 7 user staff 238 12 31 11:35 Sample
drwxr-xr-x 5 user staff 170 12 31 11:35 Sample.xcodeproj
drwxr-xr-x 4 user staff 136 12 31 11:35 SampleTests
drwxr-xr-x 4 user staff 136 12 31 11:35 SampleUITests

 プロジェクトに CocoaPod の設定ファイルを追加するため、pod init コマンドを実行します。 すると Podfile というファイルが作成されます。

$ pod init
$ ls -l
total 8
-rw-r--r-- 1 user staff 419 12 31 11:42 Podfile
drwxr-xr-x 7 user staff 238 12 31 11:35 Sample
drwxr-xr-x 5 user staff 170 12 31 11:35 Sample.xcodeproj
drwxr-xr-x 4 user staff 136 12 31 11:35 SampleTests
drwxr-xr-x 4 user staff 136 12 31 11:35 SampleUITests

 作成された Podfile の中身は次のようになっています。 このファイルに前述のようにプロジェクトで必要としているライブラリを追記していくわけです。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'Sample' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for Sample

  target 'SampleTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'SampleUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

 ここでは例として Almofire という通信ライブラリをプロジェクトで利用できるように9行目に追記しました。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'Sample' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for Sample
  pod 'Alamofire'

  target 'SampleTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'SampleUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

 利用するライブラリの追記が終わったら、pod install コマンドを実行し、プロジェクトにライブラリを追加します。

$ pod install
Analyzing dependencies
Downloading dependencies
Installing Alamofire (3.5.1)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `Sample.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
(略)

 コマンドの実行が完了すると、プロジェクトにいくつかのファイルが増えているのがわかります。 この中に Sample.xcworkspace というワークスペースファイルがあります。

$ ls -l
total 16
-rw-r--r-- 1 user staff 447 12 31 11:51 Podfile
-rw-r--r-- 1 user staff 215 12 31 11:53 Podfile.lock
drwxr-xr-x 8 user staff 272 12 31 11:53 Pods
drwxr-xr-x 7 user staff 238 12 31 11:35 Sample
drwxr-xr-x 5 user staff 170 12 31 11:35 Sample.xcodeproj
drwxr-xr-x 3 user staff 102 12 31 11:53 Sample.xcworkspace
drwxr-xr-x 4 user staff 136 12 31 11:35 SampleTests
drwxr-xr-x 4 user staff 136 12 31 11:35 SampleUITests

 CocoaPods を利用するプロジェクトでは、今後プロジェクトを開く際には、ワークスペースファイルである Sample.xcworkspace を実行してプロジェクトを開く必要があります。 Sample.xcworkspace を指定して XCode を開き直してください。 すると Navigator の表示は次の図のように Pods というプロジェクトが追加されて表示されます。

 以上により、プロジェクト Sample で CocoaPods で利用したライブラリを利用できるようになります。 例えば本稿では Alamofire を利用できるように設定したので、次のように Alamofire をソースコード内で import することができるようになりました。

import Alamofire

終わりに

 本稿では Objective-C や Swift 向けのライブラリ管理ツール「CocoaPods」の導入手順について解説しました。 皆様のお仕事のお役に立てれば幸いです。

Swiftのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca