HomebrewにおけるFormulaの作成方法

# 目標

Emacsを使ったタイピングソフト[TRR](https://code.google.com/p/trr22/)
をHomebrewで簡単に入れられるようにする。


# Homebrewについて

> Homebrew は「ユーザが自らパッケージをビルドして使用する」ことのメタファーで
> 「ビールを自家醸造して保存する・飲む」ことを意味しています。
> そのため、独特なキーワードを用いるので下記で表にしておきます。
>
> |キーワード   |本来の意味   |たとえ     |
> |:-----------:|:-----------:|:---------:|
> |Brew         |ビールを醸造する|makeする|
> |Homebrew     |自家醸造     |ユーザ自らがビルドする|
> |Celler       |セラー（ワインセラーとかのアレ）,ビール貯蔵庫|インストール（保存）先|
> |Keg          |樽,醸成用    |材料|
> |Formula      |調理法、手順 |ビルド方法・手順が書かれたスクリプト|

> [Quote: http://qiita.com/b4b4r07/items/6efebc2f3d1cbbd393fc#1-3](http://qiita.com/b4b4r07/items/6efebc2f3d1cbbd393fc#1-3)


# 作成手順

## Formulaのテンプレートの作成

```sh
$ # trrという名前で配布するFormulaを作成
$ brew create --set-name trr https://trr22.googlecode.com/files/trr22_0.99-5.tar.g://trr22.googlecode.com/files/trr22_0.99-5.tar.gz
```

## テンプレートの編集

createすると自動的に編集モードになりますが、以下でも編集可能です。

```sh
$ # brewのコマンドで
$ brew edit trr

$ # ファイルパスから
$ # $(brew --repository)は基本的には/usr/local
$ vim $(brew --repository)/Library/Formula/trr.rb
```

テンプレートは以下のように作られます。

```ruby
require "formula"

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

class Trr < Formula
  homepage ""
  url "https://trr22.googlecode.com/files/trr22_0.99-5.tar.gz"
  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 trr22_0.99`. 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
```

## インストールコマンドの追加

以下のようにshellコマンドを追加できます。

```ruby
system "sed -i -e \"s,old,new,\" Makefile" # ファイルの書き換え
system "make", "all" # make
```

# Homebrew TapsによるFormulaの公開
`brew tap [formula-tap-name]`でbrewでのインストールができるようにする方法です。  
この方法では非公式のものになるので、他の人が普段通り`search`や`install`を使ってインストール
をするには、まず`brew tap [formula-tap-name]`をする必要があります。  

1. [Github](https://github.com/)でhomebrew-[作成したFormula名]というリポジトリを作る。
(例: [Homebrew/science](https://github.com/Homebrew/homebrew-science))
2. 作成したリポジトリへ`[作成したFormula名].rb`を`push`
(例: `trr.rb`)

インストールをしてもらうときは、
`brew tap [Githubのユーザ名]/[作成したFormula名]`とすることで、`brew install [作成したFormula名]`などができるようになります。  
(例: `brew tap homebrew/science`)


# [Homebrew/homebrew](https://github.com/Homebrew/homebrew)リポジトリへのpull request
Tapでの公開だけでなく、公式リポジトリへの反映をリクエストすることができます。

## リクエスト方法

1. [Homebrew/homebrew](https://github.com/Homebrew/homebrew)をForkする。
1. `cd $(brew --repository) && git remote add [Githubのユーザ名] https://github.com/[Githubのユーザ名]/homebrew`
1. 変更をローカルリポジトリでコミット。
1. `git push [Githubのユーザ名] master`で変更をForkしたリポジトリへ反映。
1. [Github](https://github.com/)でpull requestを送る。

## リクエストが受理されるために

[Wikiに書かれている事項](https://github.com/Homebrew/homebrew/wiki/Acceptable-Formulae)などを守る必要があります。  
例としては以下の様なものがあります。

* `sudo`を使わない。
* インストールの際に追加されるファイルは基本的に`/usr/local/Cellar/[作成したFormula名]`以下に置く。