理系学生日記

おまえはいつまで学生気分なのか

homebrew のサブコマンド一覧1 (a-i)

どうせみなさんは遊び呆けていて homebrew ドキュメントなんて読まないだろうから、結果として brew install とか brew info とかしかできないだろうし、遊ぶこともできず働き続けるぼくがみなさんのために man brew を読み解いています。

基本的には man brew の意訳になりますが、ぼくが注釈を入れた部分は「補足」というブロックに記載しています。

audit

$ brew audit [formulae]

指定された formulae が、Homebrew のコーディングスタイルに適合しているかどうかをチェックする。新たな formula を submit する前にこのコマンドを実行しておくこと。
もし、formulae が指定されなかった場合は、全ての formulae がチェックされる。
audit は、エラーを見つけると 非ゼロ でコマンドを終了する。これは、pre-commit hooks を実装するときに有用である。

cat

$ brew cat formula

formula のソースを表示する。

$ brew cat dsd | head -4
require "formula"

class Dsd < Formula
  homepage "http://wiki.radioreference.com/index.php/Digital_Speech_Decoder_%28software_package%29"

cleanup

$ brew cleanup [--force] [-ns] [formulae]

インストールされた全ての formulae、あるいは指定された formulae について、cellar から全ての旧バージョンを削除する。デフォルトでは、keg-only (後述) な brew については、他のソフトウェアが当該のバージョンに直接リンクしてあるかもれないので、古いバージョンであっても削除しない。加えて、download-cache からの古いダウンロードファイルも削除する (この文よくわからない)。

--force が指定された場合は、keg-only であっても古い brew は削除される。
-n が 指定された場合は、何が削除されるかを表示するが、実際には削除を行わない。
-s が指定された場合は、キャッシュから、最新版を含むダウンロードファイルを削除する。ただし、インストール済 formula のダウンロードファイルについては削除されない。これらも削除する場合は、

$ rm -rf $(brew --cache)

を実行すること。

補足

なお、keg-only については、以下のとおり。

What does keg-only mean?

It means the formula is installed only into the Cellar, it is not linked into /usr/local. This means most tools will not find it. We don’t do this for stupid reasons. You can link the formula in still if you need to with brew link.

(訳: Cellar だけにインストールされ、/usr/local にはリンクされていない formula のこと。これは、ほとんどのツールが当該の formula を見つけることができないことを意味する。(?) brew link を使えば、リンクすることはできる。

https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/FAQ.md

commands

$ brew commands
Built-in commands
--cache
--cellar
--env

ビルトイン、および、外部コマンドの一覧を表示する。

config

$ brew config
HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew.git
HEAD: d06562ba9c50cf37d72851381e7c16cabbde37ba
Last commit: 2 hours ago
HOMEBREW_PREFIX: /usr/local

デバッグに有用となる、homebrew およびシステム設定を表示する。もしあなたがバグレポートを提出した場合、(未提出なら)この情報を要求されるだろう。

create

$ brew create <URL> [--autotools|--cmake] [--no-fetch] [--set-name <name>] [--set-version <version>]

URL でダウンロード可能な formula を作成し、エディタで開く。homebrew は formula の名前、バージョンを自動的に導出するが、それができない場合は、あなた自身がテンプレートを作る必要がある。wget の formula が良い例だ。完全なチートシートは以下で参照できる。

$(brew --repository)/Library/Contributions/example-formula.rb

--autotools が指定された場合は、Autotools-style でビルドする形式のテンプレートが作成される。--cmake が指定されると、CMake-style でビルトするテンプレートが作成される。
--no-fetch が指定されると、homebrew は URL をキャッシュにダウンロードせず、そのため SHA-1 を formula に書き込むこともしない。
--set-name、--set-version はそれぞれに引数を採り、あなたが作ろうとするパッケージの名前、バージョンを明示的に指定することができる。

補足

実際に http://www.google.co.jp を引数として実行すると、以下のような ruby スクリプトができる。

require "formula"

# Documentation: https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Formula-Cookbook.md
#                /usr/local/Library/Contributions/example-formula.rb
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!

class WwwGoogleCo < Formula
  homepage ""
  url "http://www.google.co.jp"
  sha1 ""

  # depends_on "cmake" => :build
  depends_on :x11 # if your formula requires any X11/XQuartz components

  def install
    # ENV.deparallelize  # if your formula fails when building in parallel

    # Remove unrecognized options if warned by configure
    system "./configure", "--disable-debug",
                          "--disable-dependency-tracking",
                          "--disable-silent-rules",
                          "--prefix=#{prefix}"
    # system "cmake", ".", *std_cmake_args
    system "make", "install" # if this fails, try separate make/make install steps
  end

  test do
    # `test do` will create, run in and delete a temporary directory.
    #
    # This test will fail and we won't accept that! It's enough to just replace
    # "false" with the main program this formula installs, but it'd be nice if you
    # were more thorough. Run the test with `brew test www.google.co`. Options passed
    # to `brew install` such as `--HEAD` also need to be provided to `brew test`.
    #
    # The installed folder is not in the path, so use the entire path to any
    # executables being tested: `system "#{bin}/program", "do", "something"`.
    system "false"
  end
end

deps

$ brew deps [--1] [-n] [--union] [--tree] [--all] [--installed] formulae

formulae の依存関係を表示する。複数の formula が引数として指定されると、--tree、--all、--installed が指定されない限り、それらの依存関係の共通集合を表示する。

--1 が指定されると、再帰的な依存関係ではなく、1 段目の依存関係のみを表示する。
-n が指定されると、topological order で依存関係を表示する。
--union が指定されると、共通集合ではなく、formula の依存関係の和集合を表示する。
--tree が指定されると、依存関係をツリー状に表示する。
--all が表示されると、全 formulae の依存関係を表示する。
--installed が指定されると、インストール済の全モジュールの依存関係を表示する。

$ brew deps --tree wget
wget
|- xz
|- openssl
|  |- makedepend
|  |  |- pkg-config

diy

$ brew diy [--name=<name] [--version=<version>]

homebrew ではないソフトウェアに対するインストールの prefix を自動的に決定する。
このコマンドの出力を使うことで、自身のソフトウェアを Cellar にインストールし、brew link で homebrew のプレフィックスにリンクすることが可能になる。
オプションである --name= と --version= はそれぞれ 1 つの引数を採り、インストールしようとしているパッケージの名前とバージョンを明示的に指定することができる。

補足

このコマンドの詳細については、
https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/FAQ.md の "Can I install my own stuff to /usr/local ?" を参照のこと。

doctor

$ brew doctor

あなたのシステム上の潜在的な問題をチェックする。Doctor コマンドは、問題を見つけると非ゼロのステータスで終了する。

edit

$ brew edit

編集のため、homebrew の全てを開く。

補足

実際に実行してみたが、Emacs の dired で /usr/local が開いた。。。

edit

$ brew edit formula

formula をエディタで開く。

fetch

$ brew fetch [--force] [-v] [--devel|--HEAD] [--deps] [--build-from-source|--force-bottle] formulae

指定された formulae のソースパッケージをダウンロードする。tar ボールの場合は、その SHA1、SHA-256 のチェックサムも表示する。

--HEAD あるいは --devel が指定された場合は、安定バージョンではなく、指定されたバージョンをダウンロードする。
-v が指定され、URL が CVS を示している場合は、verbose モードで VCS チェックアウトを行う。これは、VCS のキャッシュが update されることを確認するのに有用。
--force が指定されたら、前回キャッシュされたバージョンは削除の上、リフレッシュされる。
--deps が指定されると、指定された formulae の依存もダウンロードされる。
--build-from-source が指定されると、bottle ではなく、ソースがダウンロードされる。
--force-bottle が指定されると、OS X の現時点のバージョンのものがあればそれがダウンロードされる。

home

$ brew home

ブラウザで、homebrew のホームページが開く。

home

$ brew home formula

ブラウザで formula のホームページが開く。

Info

$ brew info formula

formula の情報が表示される。

Info

$ brew info --github formula

ブラウザで、formula の Github History ページが開かれる。
ローカルで formula の履歴を満たい場合は、brew log -p を実行すること。

info

$ brew info --json=<version> (--all|--installed|formulae)

formulae の JSON 表現を表示する。現時点では、version としては v1 のみを指定できる。
--all が指定されると全ての formulae の情報が、--installed が指定されると、インストール済の全 formulae の情報が表示される。
JSON を使った例については、https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Querying-Brew.md を参照すること。