Mac OS X Lion で Ruby on Rails の開発環境を1から構築

初級者向け。Ruby on Rails 向けにMax OS X Lion のターミナル環境を整える方法をメモ。unixとbashの基本的なコマンド (cd, ls, mv, cp, mkdir, touch, find, locateなど)とパイプ、環境変数ぐらいは知っている前提。

追記: Macを一から設定するのであれば以下も参考にするといい。既に使っている人にもきっと発見がある。
http://kidomah.hatenablog.com/entry/2013/07/31/235916

##iTerm
タブが使えたりと、デフォルトのターミナルよりも便利なので、まずはitermをインストール。http://www.iterm2.com/ からダウンロードしてインストールする。

##シェル
シェルはデフォルトのbashのままにした。

*zshはさらに強力で非常に楽しそうだが ( http://news.mynavi.jp/column/zsh/001/index.html )、これ以上環境構築で遊んでしまうのは時間的に不利なのと、ネット上の情報のほとんどがbashを前提としているので (違いはほとんどないけれど)、遊ぶのはまた今度。正直、zshのコマンドプロンプト設定のために .zshrc にバイナリを書き込まないといけないというところで引いた。

以下すべてbashが前提。bashの設定ファイルは、ホーム (cd ~ で移動できる) 直下に .bash_profile と .bashrc の2通りがあるが、設定は基本的に.bashrcで行う。 .bash_profileには以下だけを書いておき、.bashrcが読み込まれるようにしておけばよい 

```
# -*- sh -*-
source .bashrc
```
- 1行目の#以降は、これがシェルスクリプトであることをエディタに認識させるための識別子。後述の Sublime text 2 は拡張子かこれを使用して認識してくれるので、なくてもよいがあった方が面倒がない。

##シェルの基本設定
- 安全のために,bashrcに以下を追加。転ばぬ先の杖。

```
alias rm='rm -i'
set -o noclobber
```
rm -i は削除時に警告を出す。yと入力しないと削除されない。ただしrm -fとすると警告は出なくなる。
set -o noclobberは、シェルのリダイレクト先ファイルを上書きしようとすると警告して中止する。ただし >! とか >>!とすると警告は出なくなる。

- root用の設定
locateコマンド用のupdatedbを手動で実行するときぐらいしかsuすることはないと思うけど。
```

- rootのときにプロンプトを変える

.bashrcに以下を追加する。なぜかこうしないとsuしたときに自動でbashrcが読み込まれない。この辺りの素直でなさは今ひとつ。

```
alias su='sudo bash --rcfile /var/root/.bashrc'
```

さらに以下も追加する。好きにカスタマイズすればよい。
- ログイン名: カレントディレクトリ (gitブランチ) $ というフォーマット
- rootになったときに文字が赤くなる。
- root用の updatedbエイリアスもここで追加。
- 通常モードの __git_ps1 云々は後述のgitで使用するもので、現在のgitブランチを表示する。


```
if [ $UID -eq 0 ]; then
	PS1='\[\033[1;31m\][\u \W]$ '
	#root用エイリアス
	alias updatedb='/usr/libexec/locate.updatedb'
else
	PS1='\[\033[32m\]\u:\[\033[34m\]\W\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
	#PS1='\[\033[0m\][\u \W]$(__git_ps1 "(%s)")$ '
fi
```
次に /var/root/.bashrcから ~/.bashrc にシンボリックリンクを張るか ~/.bashrc を /var/root/.bashrcにコピーする

最終的に以下のような感じになる
![スクリーンショット 2013-05-27 21.56.24.png](https://qiita-image-store.s3.amazonaws.com/0/20266/e41242da-d870-81af-892a-5b9cc30e92db.png "スクリーンショット 2013-05-27 21.56.24.png")


- lsコマンドを便利に
以下を .bashrc に追加。llと打つだけでリスト表示。やめられない。

```
alias ll='ls -l'
alias l='ls -a'
```

- find コマンドを便利に
これで、find hoge* などと打てばカレントディレクトリ以下で hoge*を検索してくれる。邪道と呼ぶ人もいると思うけど、自分はカレントディレクトリの下だけを検索したい場合がほとんどなので。
追記: 普通のfindをしたくなることもあるので、aliasをsearchに変えた。
```
alias find='find . -name'
```

- cdコマンドを便利に
これで、cdするたびにカレントディレクトリがpushで蓄えられ、pで1つ前のディレクトリに移動できる。flushすれば蓄えた履歴を削除できる。

```
#pushd, popd
alias cd='pushd'
alias p='popd'
alias flush="dirs -c"
```
こうしたことで、逆にディレクトリの移動は最小限にしか行わないようになった。

- z コマンド

z foobarなどと入力すればよく使った中でfoobarに最も近いディレクトリを推定してcdしてくれる。単にzと打てばコマンド履歴を表示する。
http://d.hatena.ne.jp/typosterr/20130126/1359176957

##bashのカラー化あれこれ
楽しくもあり面倒でもある。

- solarized
http://ethanschoonover.com/solarized

白背景黒背景のいずれにも美しくマッチするカラースキーム。これを以下にどしどし適用する。詳細は略。

1. iTerm
2. sublime text 2 (次項)
3. bash
4. vim (万一のため、デフォルトのテキストエディタはあえてsublime text 2 ではなく vim にしてある) 

追伸: その後solarizedの色使いがだんだん鼻についてきたので、railscasts (https://github.com/rickharris/vim-railscasts )のカラースキームに統一した。

- gdircolors
http://qiita.com/items/101ef023124072b9c73f

gdircolorsを使用して solarlizedのカラースキームを導入

lsコマンドで表示されるファイル/ディレクトリなどをカラー化

- generic colouriser
http://kassiopeia.juls.savba.sk/~garabik/software/grc.html

tracerouteやsyslogなどをカラー化する

- ls に色を付ける

.bashrc に以下を追加

```
export CLICOLORS=1
export LSCOLORS=Bxcxcxdxbxegedabagacad
alias ls='ls -G'
```
- grep に色を付ける

.bashrc に以下を追加

```
export GREP_OPTIONS='--color=auto'
```

- GNU Source-highlight

less に色を付ける

http://nippondanji.blogspot.jp/2011/11/less.html

- man に色を付ける

.bashrcに以下を追加

```
export MANPAGER='less -R'
man() {
	env \
		LESS_TERMCAP_mb=$(printf "\e[1;31m") \
		LESS_TERMCAP_md=$(printf "\e[1;31m") \
		LESS_TERMCAP_me=$(printf "\e[0m") \
		LESS_TERMCAP_se=$(printf "\e[0m") \
		LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
		LESS_TERMCAP_ue=$(printf "\e[0m") \
		LESS_TERMCAP_us=$(printf "\e[1;32m") \
		man "$@"
}
```

## The Silver Searcher
grepより圧倒的に速くディレクトリ内のファイルを検索してくれる。homebrewで簡単にインストールできる。
http://blog.glidenote.com/blog/2013/02/28/the-silver-searcher-better-than-ack/

##sublime text 2
超お勧めテキストエディタ。軽くて機能拡張が恐ろしく充実している。これを知って一瞬でemacsを捨てた(でもキーバインドはemacsにした)。emacsと違ってエディタに徹し、シェルに成り代わろうなどという野望を持っていないのがよい。

有料だが無料のまま使用できる(払ってあげよう)。
http://mnemoniqs.com/web/sublimetext2/

command + Shift + p (コマンドパレットを開く) は必ず覚えておくこと。
ここで installとタイプすれば膨大な機能拡張をインストールできる。

追伸: 唯一残念なのが日本語の検索。http://naze.chibicode.com/sublime-search-japanese/ に従って日本語をまともに検索できるようにしよう。「次を検索」は⌘-G。

*ところで、たとえvimを使う人でもemacsの基本的な移動のキーバインド (ctrl + f, b, p, n、ctrl-dの削除、ctrl-Kの行末までのカット、ctrl-Yのyank) だけは覚えておく方がいい。vimのjkilのダイヤモンドキーはせいぜいvimぐらいでしか使えないけど、emacsのカーソル移動キーバインドは、bashのみならず、Macのメモ帳やchromeのアドレスバーやevernoteなど、かなり多くの場所でそのまま通用する。ctrl-KとYは、別腹のクリップボードとしても使える。
Macの場合コマンドキーという強い味方があるので、sublime text 2 をemacs風キーバインドにしてもMacのキーバインドとバッティングしないのがありがたい。

##Command Line Tools
XCodeはRoRでは使わないが、xcodeで追加インストール可能なCommand Line Toolsに依存する可能性があるので、必ずインストールすること。
- xcodeに追加してインストールする方法
http://www.cse.kyoto-su.ac.jp/~oomoto/lecture/program/tips/Xcode_install/
- Command Line Toolsのみをインストールする方法
http://blog.livedoor.jp/dankogai/archives/51814209.html

##HomeBrew
Mac OS X で unix 系ソフトウェアを簡単に管理できる homebrewをインストール。同種のもので MacPortsがあるが、homebrewが流行りのようなので。
http://www.karakaram.com/install-homebrew-mac
(この手順に従い、ついでにgitもインストールしておく)
上の手順にもあるが、homebrew用に以下を .bashrcに追加しておく。こうすることで homebrewでインストールしたコマンドを実行するときにフルパスを入力しなくてよくなる。
```
export PATH=/usr/local/bin:${PATH}
```

*MacPortsは複数台のMacで環境を同期するには便利らしい
https://twitter.com/dankogai/statuses/108455016448274432
https://twitter.com/dankogai/statuses/222165436333178880

##git
近年急速に普及したバージョン管理ツール。従来のcvs/rcs/subversionよりも軽い。Linuxカーネルの管理用に開発された。
上のHomeBrewの手順で一緒に導入する。
gitについては、以下のドキュメントが最もお勧め。git用の有名なリポジトリであるgithubの使い方についても十分な解説がある。
http://git-scm.com/book/ja/
バージョン管理自体どうしても複雑な概念になってしまうので、このドキュメントは不精せずに全部読んでおくことを勧める。
###tig
gitのコマンドライン用管理ツール。スペルをひっくり返しただけ。お勧め。

http://blog.yuyat.jp/archives/557

HomeBrewでインストールする。

```
brew install tig
```

###P4Merge
git向けの GUI diffツール。

http://git-scm.com/book/ja/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA#外部のマージツールおよび-Diff-ツール

### git gui
文字通りgitのGUI版管理ツール。気が向いたらインストール。
http://git-scm.com/downloads

## rvm

http://d.hatena.ne.jp/mrgoofy33/20110518/1305649544

複数バージョンのrubyとgemsetを管理できる。他に rbenvというもっと軽い管理ツールもあるのだけれど、http://ruby.railstutorial.org/ がrvmを使用して解説しているのでそれに合わせた。

rubyと ruby on railsもここでインストール。自分はruby2.0.0-p195とruby on rails 4.0.0-rc1をインストールした。

追記: その後rbenvに変更。理由は軽いのと、rvmより簡単であること。
http://memo.yomukaku.net/entries/ApoFwmf に従う。rbenvのrehash自動化の方法もここにある。

## gem あれこれ
ここからは gem を存分にインストール。多すぎるので代表的なものだけ。

- pry

極めて強力な ruby インタラクティブ実行環境。絶対入れるべし。
http://labs.timedia.co.jp/2011/12/rubyist-should-use-pry.html

後はひとまず以下を実行。
- gem i unicode_utils
- gem i bundler
	(http://www.rubylife.jp/rails/ini/index2.html)
- gem i compass
- gem i compass-rails

## Ruby on Rails の良リンク
後はひたすら以下のチュートリアルとリンク集を参考に突き進む。
http://railstutorial.jp/
http://pgnote.net/?p=1913

## アプリケーション・テンプレートの作成
ひととおりやってみたら、次は以下を参考にRailsのアプリケーション・テンプレートを作ることをお勧めする。
rails newの後に毎回もぞもぞ手動でgemを設定したりしていると時間がもったいないし、設定忘れや間違いの元にもなるので、気に入ったgemと設定はテンプレートに常備してアプリをどんどん作り捨てられる体制を整えよう。

http://qiita.com/tachiba/items/26b2e9dc271bd8e6907d
http://qiita.com/fakestarbaby/items/01c46a273725d0a48b36

テンプレートは最初は人のをパクって使う。どうせすぐカスタマイズしたくなるので問題ない。

自分は http://www.ohmyenter.com/?p=371 を参考にテンプレートを作ってみた。
https://github.com/hachi8833/rails4.0_template で参照できるけど、データベース周りは自分の環境に思い切り依存しているし、git-flowとかは人によっては要らない設定だと思うので参考までに。

テンプレートをgithubに置くのであれば、パスワードを直にテンプレートに書かないように注意すること。

##RubyMine
とここまでやっておいて、RubyMineに惹かれつつある。
ターミナルでの作業を知ってからの方がIDEのありがたみがわかるかもしれない。
http://www.jetbrains.com/ruby/
追記: RubyMine確かに凄い。最強。ただしいきなり使いこなすのはかなり大変。コマンドラインとSublime Textに慣れてから導入する方がよい。

## Dash
http://kapeli.com/dash 異常に強力なオフラインドキュメント検索ソフトウェア。有料だけど無料でも使える (無料だとランダムに表示を待たされる)。絶対インストールすべし。