Posted at

homebrewとは何者か。仕組みについて調べてみた

More than 3 years have passed since last update.


はじめに

いつも使っているMac book

パッケージマネージャーはbrewを使っています。

いつも何気なく使っているbrewですが、よくわかっていないのにネットの情報をコピペ→実行してしまうときがあります。

今回はそんなhomebrewについてちょっと調べてみました。


homebrewとは?パッケージ管理システムとは?

wikipediaによるとこうなっています。

「Mac OS Xオペレーティングシステム上でソフトウェアの導入を単純化するパッケージ管理システムのひとつである」

実行ファイルや設定ファイル、ライブラリetcを一つのファイルとしてまとめているものをパッケージと呼びます。

パッケージ管理システムとはこのパッケージのインストール(アンインストール)作業を一元的管理するものです。パッケージやライブラリの依存関係などが管理できます。

ちなみにパッケージ管理には、


  1. バイナリを取得するもの

  2. ソースコードを取得してビルドするもの

のパターンがあるみたいです。

1バイナリとはソースコードを予めビルドした成果物を配布していることを指すようです。

なので1バイナリは2ビルドよりも早くインストールできる特徴を持っているようです。

それに対して2ビルドは、自分のmacでビルドするので自分のmacに最適化出来る特徴を持っているようです。

macを使う方であればmacportsfinkを使っている場合もあるかと思います。少し前まではmacportsが人気だったりしたようですね。


他のパッケージ管理システムとの違いは?

homebrewmacportsの比較をされている記事があったので紹介させて頂きたいと思います。

 
 homebrew 
 macpors 

バイナリ/ビルド
基本ビルド
結構バイナリ

既存のソフトウェアへの影響
なるべく既存を利用
新しくインストールする

インストール可能なユーザ
一般ユーザ
スーパーユーザ(管理者権限)

パッケージのインストール先
/usr/local
/opt/usr

パッケージ数
少ない
多い

インストールにかかる時間
少ない
多い

システムへの依存度
大きい
小さい

コンパイラ
clang
clang

macportsはバイナリがない場合にビルドするというハイブリット形式らしいです。homebrewでは基本ビルドのようで。

インストール時のユーザもhomebrewでは一般ユーザで可能ですが、macportsでは管理者権限がないと実行出来ないのですね。

扱えるパッケージ数もhomebrewの方が少ないようです。

コンパイラはclangですが、他のパッケージ管理システムではgccとかもあるようです。

結果的に、どちらがいいのかという点についてですが、homebrew`では依存関係でインストールされるソフトが少ないから人気が高まってきているのではないかと記事では考察されていました。パッケージ導入時のシステムへの負担や、インストールにかかる時間が比較的少なくて済むようです。

とは言え、一長一短な気もするので使う方の好みであるとは思います。

ちなみにhomebrewの場合パッケージは/usr/localの中のCellarというディレクトリにインストールされます。そしてインストール時にbinにリンクされるという仕組みになっているようです。まとめるとこんな感じ。


  • /usr/local/Cellar コマンド実体

  • /usr/local/bin   コマンドのエイリアス


homebrewについて

さて、本題のhomebrewについて紹介したいと思います。

homebrewが何者かを知る上でですが、「homebrew」という名前そのものにヒントがあったことに今更気づきました。

記事にあった表を引用して紹介します。

キーワード
本来の意味
たとえ

brew
ビールを醸造する
makeする

homebrew
自家醸造
ユーザ自らがビルドする

celler
ビール貯蔵庫
インストール(保存)先

keg
樽、醸成用
make材料

formula
調理法、手順
ビルド方法、手順が書かれたスクリプト

brewというのは「醸造する」という意味にあたるんですね。(今更)

ということで、homebrewとは「ユーザが自らパッケージをビルドして使用する」ことのメタファーで「ビールを自家醸造して保存する・飲む」ことを意味しているのです。

手順(調理法formula)通りにパッケージをビルド(醸造)して保存(/usr/local/cellerに格納)して、使う(/usr/loca/binにリンク)ってことのようです。

そういうたとえあるとわかりやすいたちです自分。はい。


homebrewのインストール

ここまで記事呼んでhomebrewを使っていない方はいますでしょうか?

下記コマンドでインストールしましょう。homebrewrubyで書かれています。


bash

$ ruby -e "$(curl -fsS http://gist.github.com/raw/323731/install_homebrew.rb)” #homebrewのインストール



homebrewの基本操作

基本操作を載せて置きたいと思いますので、困ったら確認してみましょう。


  • パッケージ検索


bash

$ brew search <パッケージ名>



  • パッケージインストール・アンインストール


bash

$ brew install <パッケージ名> #インストール

$ brew remove <パッケージ名> #アンインストール


  • パッケージの有効化・無効化


bash

$ brew link <パッケージ名> #有効化

$ brew unlink <パッケージ名> #無効化


  • パッケージ一覧の更新


bash

$ brew update #formuls(手順書)の更新

$ brew upgrade #更新があるパッケージを再ビルド


  • パッケージされたリストの表示


bash

$ brew list



  • デッドリンクになっているものを削除


bash

$ brew prune



  • インストールの問題をチェック


bash

$ brew doctor



  • brewの設定確認


bash

$ brew --config



brewコマンド一覧

homebrewの使い方一覧をまとめていた記事を見つけたので紹介させていただきたいと思います。


  • brew install foo fooをインストール

  • brew install --HEAD foo fooのHEADバージョンをインストール

  • brew install --force --HEAD foo fooの新しいHEADバージョンをインストール

  • brew search インストール可能なすべてのformulaを表示

  • brew search foo インストール可能なformulaからfooを検索

  • brew search /foo/ 正規表現fooを検索

  • brew list インストール済みのformulaeを表示

  • brew list foo fooのインストールしたファイルを表示

  • brew info --github foo foo formulaのGithub履歴ページをブラウザで表示

  • brew info インストール済みのHomebrewパッケージのサマリーを表示

  • brew info foo インストール済みのfooのすべての情報を表示

  • brew home HomebrewのWebサイトをデフォルトブラウザで表示

  • brew home foo fooのWebサイトをデフォルトブラウザで表示

  • brew update HomebrewのformulaeとHomebrew自体をアップデート

  • brew remove foo fooのアンインストール

  • brew create [url] ダウンロード可能なファイルのURLのformulaを生成して$BREW_EDITORか$EDITORで指定されているエディタで開く

  • brew create url-of-tarball --cache formulaを生成して、tarballをダウンロードする。md5をformulaテンプレートに追加する。

  • brew create --macports foo どのようにfooをインストールするか調べるために、MacPortsパッケージ検索ページでfooを検索する。

  • brew create --fink foo Finkで同様のことを行う。

  • brew edit foo formulaを$HOMEBREW_EDITORか$EDITORで開く

  • brew link foo fooのインストールされたファイルのHomebrew prefixシンボリックリンク作成する。(Homebrewでインストールすると自動的に行われる。DIYインストールを行った場合に有用。

  • brew unlink foo Homebrew prefixシンボリックリンクを削除する。

  • brew prune Homebrewprefixからデッドシンボリックリンクを削除する。

  • brew outdated 利用可能なアップデートバージョンが存在するformulaを表示する。新しいバージョンをインストールするにはbrew install fooを実行する。

  • brew upgrade 利用可能なアップデートバージョンが存在するformulaをすべてアップグレードする。

  • brew --config Homebrewのシステム設定を表示する

  • brew --prefix Howebrew prefixのパスを表示する。(普通は /usr/local)

  • brew --prefix (formula) インストールされたformulaのパスを表示する。

  • brew --cellar Homebrew Cellarのパスを表示する。(普通は /usr/local/Cellar)

  • brew --cache Homebrew キャッシュダウンロードのパスを表示する。(普通は ~/Library/Caches/Homebrew)

  • brew doctor インストールの一般的な問題をチェックする。

  • brew audit すべてのformulaeのコードとスタイルの問題を検査する。

  • brew cleanup foo インストールしたすべてもしくは特定のformulaeの古いバージョンをcellarから削除する。すべての場合はbrew cleanupを実行する。


おわりに

homebrewについて概要がわかっただけでもだいぶ進歩しました。パッケージ管理システムを全部比べたらなにか面白いことがわかるかもしれないのでどなたか比較検証よろしくお願いします(自分ではやらない)。ご参考にどうぞ。

何か間違いがあればコメントして頂けると幸いです。


参考記事

今回は多くの記事を参考に記事を描かせていただきました。ありがとうございました。


homebrewの仕組みについてまとめておく

http://takuya-1st.hatenablog.jp/entry/20111224/1324750111

MacPortsとhomebrewの違いについて

http://osanai.org/57/

MacPortsより使いやすい!?パッケージ管理システムhomebrewの使い方

http://tukaikta.blog135.fc2.com/blog-entry-183.html

パッケージ管理システムhomebrew

http://qiita.com/b4b4r07/items/6efebc2f3d1cbbd393fc

MacOSXのパッケージ管理システム

http://www.slideshare.net/TomohikoHimura/ss-20115472