Homebrewで旧バージョンのパッケージをインストールしたい

## はじめに

`Homebrew`を使ってインストールしたパッケージで、旧バージョンのパッケージを利用したい場合に少々面倒だったのでメモを残します。

## 前提

Homebrewのバージョン`1.0.0`で、インストール先やディレクトリ構成が変わりました。
以前の構成での旧バージョンのインストールについて書かれている記事はありますが、大変参考にさせてもらいつつ現在のバージョンにあった形で書かせていただきました。

この記事は`Homebrew`のバージョン`1.1.0`の時点で書かれています。(※`1.3.1`でも確認&更新済)
また、古い`protobuf`のインストールを行うことを目的にしています。

## ローカルに旧バージョンがある場合

`brew info`で確認できます。

```zsh
$ brew info protobuf
protobuf: stable 3.1.0 (bottled), HEAD
Protocol buffers (Google's data interchange format)
https://github.com/google/protobuf/
/usr/local/Cellar/protobuf/3.0.2 (250 files, 15.8M)
  Poured from bottle on 2016-11-16 at 21:33:15
/usr/local/Cellar/protobuf/3.1.0 (253 files, 16M) *
  Poured from bottle on 2016-11-16 at 21:32:14
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/protobuf.rb
==> Dependencies
Build: autoconf ✔, automake ✔, libtool ✔
==> Options
--c++11
	Build using C++11 mode
--universal
	Build a universal binary
--with-test
	Run build-time check
--without-python
	Build without python support
--HEAD
	Install HEAD version
==> Caveats
Editor support and examples have been installed to:
  /usr/local/Cellar/protobuf/3.1.0/share/doc/protobuf
```

`*`印のものが現在利用しているバージョンです。
`brew switch`でバージョンの切り替えが可能です。

```zsh
$ brew switch protobuf 3.0.2
Cleaning /usr/local/Cellar/protobuf/3.0.2
Cleaning /usr/local/Cellar/protobuf/3.1.0
15 links created for /usr/local/Cellar/protobuf/3.0.2
```

## ローカルに旧バージョンがない場合

`Formula`のバージョンを遡ってインストールします。
まず`homebrew-core/Formula`に移動します。

```zsh
$ cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
```

コミットログを確認します。

```zsh
$ git log protobuf.rb
```

目的のバージョンのコミットを探します。例えば`protobuf`の`2.6.1`をインストールしたい場合。

```zsh
commit a7df562c5f84dc26218055fc5a7bbcc839c17319
Author: BrewTestBot <brew-test-bot@googlegroups.com>
Date:   Sun Apr 17 13:40:27 2016 +0100

    protobuf: update 2.6.1 bottle.
```

上記のログがそれっぽいので、チェックアウトします。

```zsh
$ git checkout a7df562c5f84dc26218055fc5a7bbcc839c17319 protobuf.rb
```

インストールの前に、現在のパッケージを`unlink`しておきます。

```zsh
$ brew unlink protobuf
Unlinking /usr/local/Cellar/protobuf/3.0.2... 15 symlinks removed
```

パッケージを`install`します。
`HOMEBREW_NO_AUTO_UPDATE`に`1`を設定しないと、勝手に`homebrew`がアップデートしてしまって古いバージョンのパッケージをインストールすることができません。詳しくは[こちら](https://github.com/Homebrew/brew/issues/1670)。

```zsh
$ HOMEBREW_NO_AUTO_UPDATE=1 brew install protobuf
==> Downloading https://homebrew.bintray.com/bottles/protobuf-2.6.1.el_capitan.bottle.5.tar.gz
######################################################################## 100.0%
==> Pouring protobuf-2.6.1.el_capitan.bottle.5.tar.gz
==> Caveats
Editor support and examples have been installed to:
  /usr/local/Cellar/protobuf/2.6.1/share/doc/protobuf
==> Summary
🍺  /usr/local/Cellar/protobuf/2.6.1: 121 files, 6.8M
```

うまく行ったらバージョンを確認。

```zsh
$ protoc --version
libprotoc 2.6.1
```

`Formula`のバージョンはもとに戻しておきます。

```zsh
$ git reset --hard
HEAD is now at af33827 mlt: update 6.4.1 bottle.
```

バージョンを戻したい場合は`brew switch`を使います。

```zsh
$ brew switch protobuf 3.1.0
Cleaning /usr/local/Cellar/protobuf/2.6.1
Cleaning /usr/local/Cellar/protobuf/3.0.2
Cleaning /usr/local/Cellar/protobuf/3.1.0
15 links created for /usr/local/Cellar/protobuf/3.1.0
```

## 参考にさせてもらった記事

[Homebrewで旧バージョンをインストールする方法(brew verionsはもう使えない)](http://qiita.com/honeniq/items/778cc08d2db78e6774d8)