Homebrew

かねてからmacOSでユーザーランドで動くパッケージ管理ソフトとして開発者に親しまれてきたツールだが、2019年にLinuxにも正式に対応した。

関連ページ:

Getting Started

macOS

  • デフォルトで /usr/local にインストールされる

Linux

https://docs.brew.sh/Homebrew-on-Linux

  • デフォルトで /home/linuxbrew/.linuxbrew にインストールされる

参考:

Documentation

https://docs.brew.sh/

brewコマンド

create

Formulaの雛形を作成する。

brew create [Options] URL

# 例
brew create https://github.com/progrhyme/shelp/archive/v0.5.0.tar.gz
## カスタムのTapを指定し、Golang向けの雛形を作る
brew create --go --tap progrhyme/taps -v https://github.com/progrhyme/shelp/archive/v0.5.0.tar.gz
Option機能
-v, –verbose冗長ログを表示

Contribution

ガイド:

メモ:

  • 基本的には、ふつうにGitHubでforkして、featureブランチを作成してPull Requestを送る
  • ローカルでHomebrewを展開したディレクトリが作業ツリーになる。そこで自分のforkしたリポジトリもremoteに追加する
  • ローカルでtestを行ってからPRを送るべし

Formulaの作成・更新

NOTE:

  • homebrew-coreに取り込まれるには、ある程度ツールのレピュテーションが必要らしい。参考記事参照。GitHubリポジトリの場合、 <20 forks, <20 watchers and <50 stars だとNGだとか
    • そんなときはbrew tapを使う方式にすればいいっぽい

参考:

Formulaの書き方

Tips:

  • sha256 の値はLinuxだと sha256sum コマンドで求められる
    • または、空欄にしておいて brew fetch --force すると正しい値を表示してくれるそうだ
  • bottle do ... end ブロックは、botが自動で足してくれるらしい。

Linuxbrew

https://github.com/Homebrew/linuxbrew-core/blob/master/CONTRIBUTING.md

2020-06-15現在、Linuxbrewは1日に1回はHomebrewをマージしてるから、Formulaの追加や更新はHomebrew側にした方がいいって書いてある。

Tap

メモ:

  • Third-Party Repositoriesのことだそうだ。
  • 非公式のツールをbrew管理にできる仕組み。

参考:

Ruby API

https://rubydoc.brew.sh/

Formula

https://rubydoc.brew.sh/Formula.html

bin.install

https://docs.brew.sh/Formula-Cookbook#bininstall-foo

任意のファイルを bin/ に移して、実行ビットを立てる(chmod 0555)。

Examples:

def install
  # fooをインストール
  bin.install 'foo'
  # bar.pyをbarにリネームしてインストール
  bin.install 'bar.py' => 'bar'
end

.on_linux

https://rubydoc.brew.sh/Formula.html#on_linux-class_method

Linuxでのみ実行されるブロックを作る。

on_linux do
  depends_on "linux_only_dep"
end

.on_macos

macOSでのみ実行されるブロックを作る。

on_macos do
  depends_on "mac_only_dep"
end

.version

https://rubydoc.brew.sh/Formula#version-class_method

.version(val = nil)  Object

基本はURLからautodetectしてくれるので、それが上手く行かないときに指定するそうだ。

OS

https://rubydoc.brew.sh/OS.html

Examples:

if OS.mac?
  # for macOS installation
elsif OS.linux?
  # for Linuxbrew installation
end

Homebrew Bundle

https://github.com/Homebrew/homebrew-bundle

Rubyのbundlerのように、brewでインストールするパッケージをBrewfileという構成ファイルにまとめる。

オプションなしで実行した場合、カレントディレクトリの Brewfile を参照する。

SYNOPSIS:

# Brewfileに基づいてパッケージインストール
brew bundle [install] [OPTIONS]
# Brewfileに入ってないパッケージを削除する
brew bundle cleanup [--force] [OPTIONS]
# インストールされているパッケージリストをBrewfileに書き出す
brew bundle dump [OPTIONS]

オプション:

オプション意味
--global~/.Brewfile を見に行く
--file <File>Brewfileを指定する

参考:

Brewfile

Example:

tap "homebrew/bundle"
tap "homebrew/core"

# macOSでcaskを使う
tap "homebrew/cask"
cask_args appdir: "/Applications"
cask "google-chrome"

brew "bash"
brew "zsh"
brew "git"
brew "vim"
brew "tmux"
brew "direnv"
brew "jq"
brew "the_silver_searcher"
brew "coreutils"

NOTE: