Mac OSX で開発環境を構築するための環境構築 (Homebrew, Git, SVN, Ruby, Perl, Python)

  • 701
    Like
  • 0
    Comment
More than 1 year has passed since last update.

はじめに

OS X で最近流行のツールは Ruby や Python ベースのものが多いのですが
もともとインストールされている各処理系はバージョンが古いです。

その更新自体にこれから紹介する Homebrew 等を使っている記事が多く、
どこから手を付けていいか迷ったりしたので、まとめておきます。

目標

  • パッケージマネージャ Homebrew のインストール
  • システムデフォルトとは別に Git, JDK, Ruby, Perl, Python の最新版をインストール

大まかな流れ

  1. システムにプリインストールされている Ruby で Homebrew をインストール
  2. Homebrew から各種追加パッケージをインストール
  3. PATH を変更して Homebrew でインストールしたパッケージ群が使われるようにする

前提条件

  • AppStore より Xcode の最新版がインストールされている
  • Xcode のコマンドラインツールがインストールされている
    • まだの場合はターミナルで xcode-select --install

作業

Homebrew

最近流行のパッケージマネージャ。

各種パッケージの構成情報は GitHub を中心に取り扱われており、
今風な感じがイイですね。

さっそく本体をインストールしましょう。
公式ガイドに従ってワンライナーを実行します。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

パッケージのバージョンを切り替えたいケースに備えて、
homewbrew/versions レポジトリを追加しておきます。

brew tap homebrew/versions

Homebrew は /usr/local 以下にパッケージを導入していくので
環境変数 PATH を変更しておきます。

~/.bash_profile
export PATH=/usr/local/bin:$PATH

.bash_profile 以外にも .zshrc や /etc/paths など環境によって色々だと思いますが、
/usr/local/bin が優先される状態なら OK です。

よく使うコマンド

  • brew install <formula> -- パッケージをインストールする。
  • brew uninstall|remove|rm <formula> -- パッケージをアンインストールする。
  • brew upgrade [<formula>] -- パッケージ(省略時はすべて)を更新する。
  • brew update -- Homebrew 本体を更新する。
  • brew doctor -- Homebrew 本体の状態を診断する。

その他のコマンドや詳細なオプションは man brewbrew commands を参照。

Homebrew Cask

*.app, *.pkg, *.dmg で配布されている GUI アプリケーションを
Homebrew でインストール・管理できるようにする拡張。

今回は JDK のインストールに使用します。
そのほか SourceTree や Eclipse といった鉄板ツールも導入できますので、
Homebrew と一緒に整備しておくといいと思います。

こちらはパッケージの一つとしてインストールします。

brew install caskroom/cask/brew-cask

本体同様に caskroom/versions レポジトリがあるので追加しておきます。

brew tap caskroom/versions

TIPS

Brewfile というファイルに brew コマンドを列記し、
レポジトリ追加やパッケージ/アプリの一括インストールを行うことができます。

この Brewfile を共有することで、セットアップ手順を共通化できます。

~/Brewfile
# Add repositories
tap homebrew/versions || true
tap caskroom/cask || true
tap caskroom/versions || true

# Update Homebrew
update || true

# Install formulae
install brew-cask || true
install zsh || true
install wget || true

# Install Cask formulae
cask install google-chrome || true

末尾の || true は、エラーを無視して後続のコマンドを続行するためのものです。
tap , install ともに既存のものを繰り返した際にエラーになるため、つけておきます。
(現在はエラーではなく警告になっていた気がしますが、まぁ一応)

これを brew bundle コマンドで実行します。

brew bundle ~/Brewfile

参考リンク

Git, SVN, Java

# Git
brew install git

# SVN
brew install subversion

# JDK8
brew cask install java

# JDK7
brew cask install java7

おなじみの JAVA_HOME の設定をやっておきます。

Oracle JDK の場合でも /usr/libexec/java_home コマンドが利用できます。
JDK8 を使う場合は -v 1.8 、 JDK7 の場合は -v 1.7 とします。

~/.bash_profile
JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

Ruby, Python, Perl

これらは xxenv 系のプロダクトが流行ってるようなので、
それぞれ rbenv, pyenv, plenv を Homebrew でインストールし、
言語本体は各種 xxenv からセットアップします。

Ruby

rbenv, ruby-build のインストール

brew install rbenv ruby-build

ログイン時に rbenv が初期化されるように設定。

~/.bash_profile
eval "$(rbenv init -)"

rbenv で Ruby をインストールし、使用するバージョンを設定する。

# 最新版を確認
rbenv install -l

# インストール
rbenv install 2.1.1

# グローバルで使用するバージョンを設定してリンク更新
rbenv global 2.1.1
rbenv rehash

確認

ruby -v

ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]

失敗する場合の回避策

(2014/05/08現在) readline 6.3.3 だと rbenv install 2.x.x が失敗する模様

readline のバージョンを確認

brew info readline

readline: stable 6.3.3 (bottled)
...
()

brew versions で readline フォーミュラの過去バージョンを探す。

このコマンドは廃止予定のようですが、まだ homebrew/versions リポジトリに
readline が入ってないのでとりあえずこれで。

brew versions readline

Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
  https://github.com/Homebrew/homebrew-versions
6.3.3    git checkout 1294240 Library/Formula/readline.rb
6.2.4    git checkout 0181c8a Library/Formula/readline.rb

6.2.4 に戻す(過去のフォーミュラでインストールする)。

cd /usr/local
git checkout 0181c8a Library/Formula/readline.rb
brew install readline

再度 Ruby のインストールを試行

rbenv install 2.1.1
rbenv global 2.1.1
rbenv rehash

インストールできたら readline およびそのフォーミュラを最新に戻しておく。

過去版を checkout したままだと readline.rb が detached head 状態なので
brew update 等をした時に「捨てちゃまずそうなモノがあるよ」と怒られます。

cd /usr/local
git reset --hard
brew install readline

Python, Perl

pyenv, plenv は rbenv を模倣したものなので、
基本的にやることは Ruby のケースと同じです。

brew install pyenv plenv perl-build

xxenv 初期化の設定

~/.bash_profile
eval "$(pyenv init -)"
eval "$(plenv init -)"

本体のインストールと設定

## Python
# バージョン確認
pyenv install -l

# インストール
pyenv install 3.4.0
pyenv install 2.7.6

# 使用するバージョンの設定とリンク更新
pyenv global 3.4.0
pyenv rehash

## Perl
# バージョン確認
plenv install -l

# インストール
plenv install 5.19.11

# 使用するバージョンの設定とリンク更新
plenv global 5.19.11
plenv rehash

確認

python --version

Python 3.4.0
perl -v

This is perl 5, version 19, subversion 11 (v5.19.11) built for darwin-2level

xxenv を使うと、各種 **/bin には手動で PATH を通す必要がありません。
xxenv init - によって、設定しているバージョンの実行ファイルへのリンクが
~/.xxenv/shims 以下に作成/自動更新されるためです。
ここへのパスは同コマンドによって通されます。

Python 関係の警告について

ここまでの状態で再度 brew doctor を実行すると、 Python 関係の警告が2つ表示されます。

まず1つ目

Warning: python is symlinked to python3
This will confuse build scripts and in general lead to subtle breakage.

これについては、 Homebrew and Pythonに記述されている通り
実行コマンド python が常に Python2 を指すようにしておきます。

pyenv global 2.7.6 3.4.0

これによって、実行コマンドが python または python2 だと Python2が実行され、
python3 だと Python3 が実行されるようになります。

しかし、場合によってはデフォルトが Python3 のほうが都合が良いかもしれません。
そんな場合は、限られた範囲で Python3 をデフォルトにするのが良いと思います。

  • Python3 を使いたい シェルセッションで一時的に alias python=python3 とする
  • 特定のディレクトリで pyenv local 3.4.0 としておく
    (同ディレクトリに生成される .python-version ファイルを消すまで持続します)

続いて2つ目

Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:

    /Users/yourname/.pyenv/shims/python-config
    /Users/yourname/.pyenv/shims/python2-config
    /Users/yourname/.pyenv/shims/python2.7-config
    /Users/yourname/.pyenv/shims/python3-config
    /Users/yourname/.pyenv/shims/python3.4-config
    /Users/yourname/.pyenv/shims/python3.4m-config

私の稚拙な意訳ですが

システムまたは Homebrew の管理外のディレクトリに *-config ファイルが見つかったよ。多くの ./configure スクリプトはこういう名前のファイルを探してコンパイル&リンク時のフラグを決定するよ。
これらがシステムや Homebrew の同名スクリプトを上書きしてるとややこしいことになるけど大丈夫かい?

…といった感じでしょうか?

これについては pyenv の Issue#42 に回答があり、

Because pyenv is using shims to inject commands into $PATH, this is not avoidable in pyenv.

ということで、 pyenv の性質上回避することができません。

pyenv が管理してくれているため、ややこしいことにはなりませんので無視できます。
(警告が表示されること自体はあきらめるしかありません)


以上です。