Homebrewでバージョンを切り替える

Homebrewで前のバージョンのパッケージを使いたいことがあったので、手順をメモっておきます。

例としてScalaのバージョンを切り替えたい時はこんな感じになります。

バージョン確認

とりあえず現在のバージョンを確認。今回は2.9.1を使っていたので2.8.1に変えてみます。

takashabe@mba-2 ~ % brew info scala
scala 2.9.1
http://www.scala-lang.org/
/usr/local/Cellar/scala/2.9.1 (115 files, 27M)

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

http://github.com/mxcl/homebrew/commits/master/Library/Formula/scala.rb
takashabe@mba-2 ~ % scala -version
Scala code runner version 2.9.1.final -- Copyright 2002-2011, LAMP/EPFL

バージョン変更

brew versions Formulaすると使用可能なバージョン一覧が出てくるので、変更したいバージョンにgit checkoutします。

takashabe@mba-2 ~ % cd /usr/local 
takashabe@mba-2 /usr/local (master*) % brew versions scala
2.9.1    git checkout 43d80e3 Library/Formula/scala.rb
2.8.1    git checkout 711b753 Library/Formula/scala.rb
2.9.0.1  git checkout 65ae687 Library/Formula/scala.rb
2.9.0    git checkout 4002978 Library/Formula/scala.rb
2.8.0    git checkout fdb41a3 Library/Formula/scala.rb
2.7.7    git checkout 6a18e38 Library/Formula/scala.rb
2.7.6    git checkout a82e823 Library/Formula/scala.rb
2.7.5    git checkout e9dd256 Library/Formula/scala.rb
takashabe@mba-2 /usr/local (master*) % git checkout 711b753 Library/Formula/scala.rb 

あとはbrew upgradeすればバージョンが変更されてます。

takashabe@mba-2 /usr/local (master*) % brew upgrade scala
==> Upgrading scala
==> Downloading http://www.scala-lang.org/downloads/distrib/files/scala-2.8.1.final.tgz
File already downloaded in /Users/takashabe/Library/Caches/Homebrew
/usr/local/Cellar/scala/2.8.1: 114 files, 22M, built in 2 seconds
takashabe@mba-2 /usr/local (master*) % brew info scala
scala 2.8.1
http://www.scala-lang.org/
/usr/local/Cellar/scala/2.8.1 (114 files, 22M) *
/usr/local/Cellar/scala/2.9.1 (115 files, 27M)
http://github.com/mxcl/homebrew/commits/master/Library/Formula/scala.rb
takashabe@mba-2 /usr/local (master*) % scala -version
Scala code runner version 2.8.1.final -- Copyright 2002-2010, LAMP/EPFL

元のバージョンに戻す

元のバージョンに戻すときも基本的に同様の手順になりますが、既にHomebrewに存在するパッケージのバージョンを変更しようとするとbrew upgradeが上手く動いてくれず、/usr/local/binのシンボリックリンクが変更前のパッケージを指したままになったりして面倒なので一度brew cleanupしておきます。

takashabe@mba-2 /usr/local (master*) % brew cleanup scala
Removing /usr/local/Cellar/scala/2.9.1...
takashabe@mba-2 /usr/local (master*) % brew versions scala
2.9.1    git checkout 43d80e3 Library/Formula/scala.rb
2.8.1    git checkout 711b753 Library/Formula/scala.rb
2.9.0.1  git checkout 65ae687 Library/Formula/scala.rb
2.9.0    git checkout 4002978 Library/Formula/scala.rb
2.8.0    git checkout fdb41a3 Library/Formula/scala.rb
2.7.7    git checkout 6a18e38 Library/Formula/scala.rb
2.7.6    git checkout a82e823 Library/Formula/scala.rb
2.7.5    git checkout e9dd256 Library/Formula/scala.rb
takashabe@mba-2 /usr/local (master*) % git checkout 43d80e3 Library/Formula/scala.rb 
takashabe@mba-2 /usr/local (master*) % brew upgrade scala
==> Upgrading scala
==> Downloading http://www.scala-lang.org/downloads/distrib/files/scala-2.9.1.final.tgz
File already downloaded in /Users/takashabe/Library/Caches/Homebrew
==> Downloading https://raw.github.com/scala/scala-dist/27bc0c25145a8/completion.d/2.9.1/scala
######################################################################## 100.0%
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
/usr/local/Cellar/scala/2.9.1: 115 files, 27M, built in 3 seconds
takashabe@mba-2 /usr/local (master*) % brew info scala
scala 2.9.1
http://www.scala-lang.org/
/usr/local/Cellar/scala/2.8.1 (114 files, 22M)
/usr/local/Cellar/scala/2.9.1 (115 files, 27M) *

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

http://github.com/mxcl/homebrew/commits/master/Library/Formula/scala.rb
takashabe@mba-2 /usr/local (master*) % scala -version
Scala code runner version 2.9.1.final -- Copyright 2002-2011, LAMP/EPFL

無事切り替わりましたね。めでたしめでたし。
一時的に特定のバージョンを使いたい場合なんかで便利だと思います。

2012/08/11追記

既に複数バージョンが導入されていて、brew cleanupせずにバージョンを切り替えた場合は、brew unlink して brew link すればリンクを貼り直してくれます。
また、brew switch というコマンドでその辺をよろしくやってくれるようです。

External Commands · mxcl/homebrew Wiki · GitHub