はじめに
結城智久(@TomohisaYuuki)です。
Macで開発環境を構築しようとして調べていると、homebrewを使ってインストールするのがデファクトスタンダードなように見受けられます。
ですが、どうしてHomebrewを使うのか?パッケージ管理システムってどういうものなのか?正直よく分かっていませんでした。
この記事ではパッケージ管理システムについて基本的な事柄を整理し、Homebrewの使い方をまとめます。
パッケージ管理とは
配布形式との関係
パッケージの配布には大きく分けて以下の2つの配布形式があります。
1. バイナリ形式
コンパイル済みのファイルを配布する。
- 配布者:様々な環境に合わせたファイルの作成・動作確認を行う必要があり、膨大な労力がかかる。
- 利用者:配布されたファイルをインストールするのみ。知識や技術が不要で労力もかからない。
2. ソースコード形式
未コンパイルのソースコードを配布する。
上記の通り、配布形式がバイナリ形式の場合はあまり問題はありませんが、ソースコード形式の場合は利用者がある程度自分で作業しなくてはなりません。これらの形式を自動で判別し、必要であればコンパイル・ビルドを自動で行ってくれる仕組みがパッケージ管理システムの機能の一つです。
インストール時の問題解決
ソフトウェアをインストールするとき、以下の事象が発生することがあります。
- ソフトウェアAを利用するにはソフトウェアBが必要(ソフトウェアの依存関係)
- ソフトウェアCによってインストールされるファイルDが、すでにソフトウェアEによってインストールされている(ソフトウェアの競合関係)
少数のソフトウェアであれば一つ一つ対処すればいいですが、多くのソフトウェアの依存・競合関係を手動で管理するのはかなりの手間がかかります。
これらを自動で管理する仕組みがパッケージ管理の機能の一つです。
まとめるとパッケージ管理とは、ソフトウェアのインストール・アンインストール・更新やこれらに伴う煩雑なソフトウェアの管理作業のことで、このような仕組みを提供しているツールをパッケージ管理システムと言います。
パッケージ管理の仕組み
とてもざっくりした説明
そもそもパッケージとは以下をひとまとめにしたファイルです。
- アプリケーションの実行プログラム/ソースの本体orURL
- 設定ファイル
- 共有ライブラリ
- ソフトウェアを構築するのに必要な開発用ファイル
- ドキュメント
- メタデータ
パッケージに含まれるメタデータの中には以下が含まれています。
Homebrewの仕組み
インストールの仕組み
以下のサイトの「仕組み」の項で[brew install」を行ったときの処理の流れが解説されています。
blog.mothule.com
各種用語と詳しい仕組み
パッケージの取得先や配置先、各種用語や詳しい仕組みは以下のサイトがとてもわかり易かったです。
blog.ottijp.com
Macにおけるパッケージ管理システム
Macのパッケージ管理システムとして有名なものにHomebrewとMacportsがあります。
いろいろな方が言っている両者の違いについての情報をまとめたのが以下の表です。
比較項目 | Homebrew | Macports |
配布形式 | ソースコード | バイナリ(バイナリが無い場合はソースコードをビルド) |
既存のソフトウェアの利用 | なるべく既存を利用 | 新たにインストール |
インストールにかかる時間 | 短 | 長 |
システムへの最適化度合い | 高 | 低 |
公式リポジトリのパッケージ数 | 少 | 多 |
インストール可能なユーザ | 一般ユーザ | スーパーユーザ(管理者権限sudoが必要) |
パッケージのインストール先 | /usr/local | /opt/local |
コンパイラ | clang | clang |
インストールの所要時間の比較
MacPortsはビルド済みのバイナリファイルを配布するため個々のパッケージのインストール所要時間は短く済むのですが、Macに導入済みのソフトウェアを無視して対象パッケージが依存するソフトウェアを新規インストールします。
一方Homebrewはソースコードからのビルドが基本なので個々のパッケージのインストール所要時間は長くなりますが、極力Macに導入済みのソフトウェアを利用する作りです。
そのため、総合的にはHomebrewのほうがパッケージのインストール所要時間が短く済む傾向にあるようです。またビルドを行うことで自分の環境に最適化されるメリットもあります。
扱えるパッケージ数の比較
扱えるパッケージ数はMacportsに比べてHomebrewは少ないようです。しかし、これはMacportsとHomebrewの公式リポジトリを比較した場合。
Homebrewのリポジトリは公式のGithubリポジトリだけでなく、ユーザーが自分のGithubリポジトリをシェアする仕組みになっています。
つまり、gitコマンドがアクセスできるところならどこでもリポジトリとして扱えます。
また、GUIアプリの管理ができる拡張機能Homebrew-caskもあり、公式リポジトリしか存在しないMacportsより広い範囲のパッケージを管理することができます。
上記のメリットから、MacportsよりもHomebrewが選ばれているようです。
Homebrewの使い方
HomebrewとHomebrew-cask
Homebrewと似た名前のHomebrew-caskなるものがあるのですが、それぞれの特徴を以下に示します。
Homebrew
Homebrew-cask
基本的なコマンド
分類 | 処理 | Homebrewコマンド | Homebrew-caskコマンド |
パッケージの操作 | パッケージを探す | brew search [検索ワード] | brew search —cask [検索ワード] |
パッケージをインストール | brew install [パッケージ名] | brew cask install [パッケージ名] | |
パッケージをアンインストール | brew uninstall [パッケージ名] | brew cask uninstall [パッケージ名] | |
Homebrewでインストール済みのファイルを表示 | brew list | brew list —cask | |
インストール済みパッケージのサマリーを表示 | brew info [パッケージ名] | brew cask info [パッケージ名] | |
パッケージを有効化 | brew link [パッケージ名] | - | |
パッケージを無効化 | brew unlink [パッケージ名] | - | |
更新のあるパッケージを確認 | brew outdated | brew outdated —cask | |
更新があるパッケージを再ビルド | brew upgrade [パッケージ名] | brew upgrade —cask [パッケージ名] | |
Homebrew本体の操作 | バージョン確認 | brew -v | - |
Homebrewの更新 | brew update | brew update —cask | |
設定を見る | brew —config | - | |
問題がないかチェック | brew doctor | brew doctor --verbose | |
コマンドのヘルプを表示 | brew help [コマンド名] | brew cask help [コマンド名] |
おわりに
パッケージ管理とHomebrewについてだいぶ理解が深まりました。
パッケージ管理に限りませんが、指示されたとおりにコマンドを叩くだけで便利な機能を使うことができてしまいます。
その背後でどのような仕組みで動作しているのか、コマンド一つ一つの意味や類似ソフトウェアに対する優位性もちゃんと理解しながら使っていくようにしたいものです。