mainvisual

Homebrewとは、Unix環境で動作し、様々なソフトを管理することの出来る、 パッケージ管理マネージャです。現在、私の環境ではこれだけのパッケージをbrewで管理をしています。

ansible       fontconfig	     gperftools		libidn	       node	    pyqt5	 spdylay
arpack	      freetype		     gradle		libmetalink    nodebrew     python	 sqlite
augeas	      gawk		     graphicsmagick	libmpc	       numpy	    python3	 ssh-copy-id
autoconf      gcc		     graphviz		libpng	       octave	    qhull	 stlink
automake      gcc-arm-none-eabi      gstreamer		libressl       opencv	    qrupdate	 stunnel
bash	      gd		     gumbo-parser	libssh2        opencv3	    qscintilla2  suite-sparse
bazel	      gdb		     hdf5		libtasn1       openexr	    qt		 suite-sparse421
binutils      gdbm		     heroku		libtiff        openjpeg     qt5		 szip
bison	      genromfs		     heroku-toolbelt	libtool        openssl	    readline	 ta-lib
boost	      gettext		     hub		libusb	       openssl@1.1  redis	 tbb
boost-python  gflags		     icu4c		libusb-compat  p7zip	    remarshal	 transfig
c-ares	      ghostscript	     ilmbase		libvo-aacenc   pcre	    rename	 tree
cairo	      gist		     imagemagick	libxml2        pdf2svg	    ruby	 ttygif
cmake	      git		     isl		libyaml        pdflib-lite  s3cmd	 ttyrec
composer      git-lfs		     jansson		little-cms2    phantomjs    scala	 unison
coreutils     gl2ps		     jbig2dec		lmdb	       php56	    scapy	 unixodbc
curl	      glib		     jemalloc		lua	       pidcat	    sdl		 veclibfort
dfu-util      glog		     jpeg		luajit	       pixman	    sdl2	 vim
dialog	      glpk		     json-c		mercurial      pkg-config   sdl2_image	 watchman
dnsmasq       gmp		     kconfig-frontends	metis	       plotutils    sdl2_mixer	 webp
eigen	      gnu-getopt	     lame		mono	       pngquant     sdl2_ttf	 wget
epstool       gnu-indent	     leveldb		mpfr	       poppler	    sdl_image	 x264
ethereum      gnu-sed		     libav		mysql	       portmidi     sdl_mixer	 xvid
faac	      gnu-tar		     libdnet		nasm	       postgresql   sdl_ttf	 xz
ffmpeg	      gnuplot		     libestr		nettle	       protobuf     siege	 youtube-dl
fftw	      gnutls		     libev		nghttp2        pstoedit     sip		 zsh
findutils     go		     libevent		nkf	       pstree	    sl
fltk	      gobject-introspection  libffi		nmap	       pyqt	    snappy

brewパッケージのただインストールを簡潔に行なうものではありません。 もちろん、インストール作業を簡単にする仕組みも備えていますが、 その他にもパッケージのバージョン管理、ライブラリのリンク管理、 Macシステム内部の構造スキャニング機能など、もはやMacの一部では無いかと思えるような 多くの機能を備えています。

以前はMacPortなども有名でしたが、ビルドをローカルで行ない、 インストールライブラリの設定の自由度が向上したHomebrewがよく使われるようになりました。

パッケージマネージャとは

ソフトウェアやライブラリの導入を単純化するパッケージ管理システムのひとつです。 特にHomebrewでは、boostなどC++ライブラリのインストールも行なうことが出来ます。 この場合boostは、コマンドは存在しないのでpkg-configなどを使い、ライブラリを使用することが出来ます。

以下のように特徴があります。

  • インストール方法を共通化する
  • パッケージの依存関係を解決する
  • ソフトウェアごとの関連ファイル(設定ファイルなど)を管理する
  • ソフトのアンインストール時に、関連ファイルなども消去出来るように管理する
  • ソフトのバージョン管理を容易にする

パッケージマネージャがソフトをインストールするときの種類

パッケージ管理マネージャがソフトをインストールするのに、2つの方法があります。

  1. バイナリをダウンロードして、パスの通っている場所に配置する。
  2. ソースコードをダウンロードしてビルドしてスの通っている場所に配置する。

1.」は、予めビルドしたのを取得するだけなので、早くインストールすることができます。 「2.」は、自分でビルドしなければならないので、時間はかかりますが、 ビルド時にオプション選択をしてビルドすることが出来ます。 例えば、GUPを使う機械学習ライブラリなどがあります。

パッケージ管理マネージャのラインナップ

現在、Macのパッケージ管理マネージャといえば、主に次の3つがあります。

  • Homebrew (2. のビルド型)
  • MacPort (1. の取得型)
  • fink (1. の取得型)

今から、パッケージ管理を始めるのであれは、 特に理由がない限り、Homebrewを使うべきでしょう。

ざっとした特徴は次のようになります。

~~ Homebrew MacPorts fink
既存のソフトウェアへの影響 なるべく既存を利用 新しくインストールする 新しくインストールする
sudo権限 不要 必要 必要
パッケージのインストール先 /usr/local /opt/usr 不明
扱えるパッケージ数 少ない 多い 不明
インストールにかかる時間 少ない 多い 不明
システムへの依存度 大きい 小さい 不明

余談ですけど、finkはは自分自身もアンインストール出来るみたいです。(謎)

Homebrewとは?

前章でも話したとおり、Homebrewはパッケージ管理マネージャです。

Homebrewは、何かのソフトをインストールする時、 ソースをダウンロードして、それをビルドします。 そして、/usr/local/Cellar/<パッケージ名>でバイナリが管理され、 /usr/local/bin/に、シンボリックリンクが張られます。

Homebrew には、自家醸造 という意味があります。 これは、「ソースコードを自らビルド(醸造)する」ということを 「ビールを自家醸造して保存する・飲む」ということになぞらえたものらしいです。

キーワード 本来の意味 たとえ
Brew ビールを醸造する make する
Homebrew 自家醸造 ユーザ自らがビルドする
Cellar セラー(ワインセラーのなどのセラー。ビール貯蔵庫) インストール(保存)先
Keg 樽、醸成用 make 材料
Formula 調理法、手順 ビルド方法・手順が書かれたスクリプト

基本操作

ここでは、とりあえず覚えておけば大丈夫といった内容をまとめます。

  • インストール

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  • パッケージを探す

    brew search <パッケージ名>
    
  • パッケージ・インストール

    brew install <パッケージ名>
    
  • パッケージの有効化・無効化

    brew unlink <パッケージ名> # 一時的に無効にする。
    brew link <パッケージ名>   # 有効にする。
    
  • インストールしたすべてのパッケージを操作する場合

    brew list -1 | while read line; do brew unlink $line; done # 一時的に無効にする。
    brew list -1 | while read line; do brew link $line; done   # 有効にする。
    
  • パッケージ一覧の更新

    brew update   # formula を更新
    brew upgrade  # 更新があるパッケージを再ビルドする
    
  • リンク切れになっているものを消去

    brew prune
    
  • インストールされたパッケージの問題をチェック

    brew doctor
    
  • brewの設定確認

    brew --config
    

まとめ

そもそもパッケージ管理マネージャとは何をするものなのか。 といった、基本的なものについて考える良い機会となりました。

調べていくうちに、Homebrewの他にも、いろいろなパッケージ管理マネージャがあることを知りましたし、 Homebrewの他にも、finkとい、聞き慣れないパッケージ管理マネージャがあったと勉強になりました。

参考資料

以下の記事を参考に作成しました。