OS X El CapitanクリーンインストールからのJupyter環境構築

#環境
OS X El Capitan: 10.11.6
MacBook Pro (15-inch, Mid 2012)

#はじめに
El Capitanをクリーンインストールしたところから、Jupyterでのデータ解析環境を作るまでの流れをできるだけもらさず説明します。色々なやり方があると思いますが、各手順を選んだ理由もソースを示しながらいきます。
要は
Command Lint Tools for Xcode -> Homebrew -> pyenv (+bashの環境設定ファイル) -> Anaconda
の順で導入しました。
（初めて出る専門用語（？）は、最後の**用語**にまとめましたので、引っかかったら参考にしてください。）

#揃えるべき環境をバックキャスト
[Jupyter公式サイト](http://jupyter.readthedocs.io/en/latest/install.html)のオススメ通りAnacondaでインストールすることにします。
> For new users, we highly recommend installing Anaconda. Anaconda conveniently installs Python, the Jupyter Notebook, and other commonly used packages for scientific computing and data science. 
*（新たなユーザーにはAnacondaをインストールすることを強く勧めるよ。AnacondaはPython、Jupyter Notebookだけではなく、科学計算やデータサイエンスによく使われるパッケージもインストールするよ。）*

[Anaconda公式サイト](https://www.continuum.io/downloads)には、そこから直接ダウンロードする方法しか示されていませんが、以下のサイトを拝見して；
[「AnacondaでPythonの分析環境をまとめてインストール」](http://www.task-notes.com/entry/20151116/1447642800)
>Anaconda も通常の Python と同じく pyenv でインストール・管理ができます。こっちの方がインストールもさらに簡単ですし 2.x 系と 3.x 系を一緒に使えますのでおすすめです。

[「データサイエンティストを目指す人のpython環境構築 2016」](http://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c)
>↓こんな話もあるのでLinuxと同様にpyenvを挟んだほうがよさそうです。
[Anacondaを入れたらHomebrewの環境が吹っ飛んだ話](http://qiita.com/spiky00/items/3f3ca3a2092e531ea1ad)

pyenvでインストールすることにします。そのpyenvをインストールするには、GitHubからダウンロードするか、パッケージ管理ソフトであるHomebrewで簡単にインストールできるようです。
（https://github.com/hamukazu/pyconjp2015tutorial/blob/master/install_instruction.md より）

今までパッケージ管理ソフトに、MacPortsを使用していましたが、時代はHomebrewなので、その波に乗っかります（Homebrewがいい理由は[「MacPortsからHomebrewに乗り換えた」](https://project-flora.net/2015/07/09/post-728/)などを参考にして下さい）。[パッケージ数の多さではMacPortsやFinkにかなわない](http://macwiki.osdn.jp/wiki/index.php/リスト/UNIXパッケージ)ので、そちらに慣れている方はそれでも構わないとは思います。ただHomebrewとの共存は良くないようなので、どちらかで。

さてHomebrewのインストールには以下の環境が必要です。
>**Requirements**
An Intel CPU
OS X 10.9 or higher
Command Line Tools for Xcode: xcode-select --install, https://developer.apple.com/downloads or Xcode
A Bourne-compatible shell for installation (e.g. bash or zsh)

（https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/Installation.md より）

Command Line Tools for Xcode以外は環境が揃っているので、ここからやっと、インストール開始です。

#インストール
## Command Line Tools for Xcodeのインストール
ターミナルで
`$ xcode-select --install`
と入力。”Xcodeを入手する”か、”インストール”するか聞かれるので、”インストール”で問題ありません。この表現はわかりにくいですが、以下のサイトにも説明されています。
http://railsapps.github.io/xcode-command-line-tools.html
>The instructions in the alert box are confusing. You don’t need to “Get Xcode” from the App Store. Just click “Install” for the Xcode Command Line Tools.
*（アラートの説明は混乱させるよね。App StoreからXcodeを得る必要はなく、Xcode Command Line Toolsのためには、ただ”インストール”をクリックするだけだよ。）*

## Homebrewのインストール

[Homebrew公式サイト](http://brew.sh/index_ja.html)に説明されている通りにターミナルで
`$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"`
を入れるだけでインストール完了。
（管理者でログインしていないとインストールできないようです。）

アップデートされたEl Capitanではパーミッション関係でエラーの起こることがあります。以下のサイトを参考にして下さい。
[「【El Capitan】Mac OSX 10.11にHomebrewインストール」](http://qiita.com/aoioooii/items/c14922eede6a83a750da)

問題の無いこととバージョンの確認をして、早速アップデートもします。

```:
$ brew doctor
Your system is ready to brew.
$ brew --version
Homebrew 0.9.9 (git revision 604f; last commit 2016-08-02)
Homebrew/homebrew-core (git revision 8ffc; last commit 2016-08-02)
$ brew update
Updated 1 tap (homebrew/core).
```
（標準ユーザでログインしていると/usr/local/のパーミッションに関わるWarningが出ます。）

## pyenvのインストール
Homebrewでインストールします。

```:
$ brew install pyenv

（省略：依存パッケージのインストール）

==> Installing pyenv
==> Downloading https://github.com/yyuu/pyenv/archive/v20160726.tar.gz
==> Downloading from https://codeload.github.com/yyuu/pyenv/tar.gz/v20160726
######################################################################## 100.0%
==> Caveats
To use Homebrew's directories rather than ~/.pyenv add to your profile:
  export PYENV_ROOT=/usr/local/var/pyenv

To enable shims and autocompletion add to your profile:
  if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
==> Summary
🍺  /usr/local/Cellar/pyenv/20160726: 502 files, 2.2M, built in 5 seconds
```
注意（Caveats）にあるように、ここで環境設定ファイルをいじる必要が出てきます。一つ目の注意は、特に変更しなくても問題無いので無視します。二つ目の注意は、ターミナルの起動時に~/.pyenv/shimsのパスを通してくれたり補完機能を有効にしてくれたりするので必要です。
ここで少し戸惑うのが、**OS Xではbashの環境設定ファイルである.bash_profileや.bashrc（ファイルの説明は以下のテーブル参照）が自動的には作成されていない**ということです。

### bashの環境設定ファイルの作成
この段階でのホームはこのようになっています。

```:
$ cd ~
$ ls -a
.			.bash_history		Downloads		Public
..			.bash_sessions		Library
.CFUserTextEncoding	.pyenv			Movies
.DS_Store		Desktop			Music
.Trash			Documents		Pictures
```

ここに.bash_profileと.bashrcを作成します。

| ファイル | 概要 |
|:-:|:-:|
|.bash_profile|ログイン時に一度実行される環境設定ファイル。通常は環境変数を定義。|
|.bashrc|bashが別のシェルから起動した時に実行される環境設定ファイル。通常はエイリアスやその他の設定を記述。|
|.bash_history|コマンドの履歴ファイル。これは自動的に作成される。|

環境設定ファイルは複数あり、使用される順番は以下の通りです。
（1） bashがログインシェルとして起動された場合
1. /etc/profileを読み込む。
2. ~/.bash_profileが存在すればそれを読み込む。
3. ~/.bash_profileが存在せず、~/.bash_loginがあればそれを読み込む。
4. ~/.bash_profileも~/.bash_loginも存在せず、~/.profileが存在していればそれを読み込む。

（2）bashが別のシェルから起動された場合
1. ~/.bashrcのみが読み込まれる。

通常は.bash_profileで環境変数を定義し、.bashrcでエイリアスやその他の設定を記述します。環境変数は子プロセスに引き継がれますが、エイリアスなどは引き継がれないからです。ですので、ログインシェルとして起動した場合でも.bashrcの設定が反映されるように、.bash_profile内で.bashrcを読み込むようにします。
[「Macの.bashrcセットアップ」](http://karaage.hatenadiary.jp/entry/2016/03/30/073000)
このサイトも参考に両ファイルを作成してやります。

```:
$ touch .bash_profile .bashrc #空のファイルを作成。
$ open .bash_profile　#テキストエディットで.bash_profileを開く。
```
以下のように.bashrcが読み込まれるように記述して保存します。

```:.bash_profile
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi
```
`$ open .bashrc #同様に.bashrcを開く。`
pyenvインストール時の注意に出てきた内容を書き込み、ついでにお好みでエイリアスも設定して保存します。

```:.bashrc
alias ls='ls -F' #エントリを分類する記号を付加して表示。
alias mv='mv -i' #ファイルが上書きされるときは確認。
alias cp='cp -i' #同上
alias rm='rm -i' #削除の前に確認。
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
```

pyenvが動くことを確認します。（うまくいかなければターミナルを開き直してみてください。）

```:
$ ls -a #エイリアスで-Fを加えたため、分類する記号が付加されて表示される。
./			.bash_history		Desktop/		Music/
../			.bash_profile		Documents/		Pictures/
.CFUserTextEncoding	.bash_sessions/		Downloads/		Public/
.DS_Store		.bashrc			Library/
.Trash/			.pyenv			Movies/
$ pyenv version
system (set by /Users/hoge/.pyenv/version)
```

## Anacondaのインストール
インストールできるバージョンを確認します。

```:
$ which python #　一応インストール前のPythonの確認
/usr/bin/python　＃デフォルトのPythonの場所
$ python --version
Python 2.7.10 ＃デフォルトのPython
$ pyenv install -l
Available versions:
（省略）
  anaconda-2.0.1
  anaconda-2.1.0
  anaconda-2.2.0
  anaconda-2.3.0
  anaconda-2.4.0
  anaconda-4.0.0
  anaconda2-2.4.0
  anaconda2-2.4.1
  anaconda2-2.5.0
  anaconda2-4.0.0
  anaconda2-4.1.0
  anaconda3-2.0.0
  anaconda3-2.0.1
  anaconda3-2.1.0
  anaconda3-2.2.0
  anaconda3-2.3.0
  anaconda3-2.4.0
  anaconda3-2.4.1
  anaconda3-2.5.0
  anaconda3-4.0.0
  anaconda3-4.1.0
（省略）
```

anaconda2-2.4.0から2.x系のプレフィックスがanaconda2-*になったようです。なぜかanaconda-4.0.0という表示も見えますが・・・。
私は2.x系を使用しているのでその中で最新のanaconda2-4.1.0（2016/8/4時点）をインストールします。

```:
$ pyenv install anaconda2-4.1.0
Downloading Anaconda2-4.1.0-MacOSX-x86_64.sh...
-> https://repo.continuum.io/archive/Anaconda2-4.1.0-MacOSX-x86_64.sh
Installing Anaconda2-4.1.0-MacOSX-x86_64...
Installed Anaconda2-4.1.0-MacOSX-x86_64 to /Users/hoge/.pyenv/versions/anaconda2-4.1.0
```
インストールしたバージョンを確認します。

```:
$ pyenv versions
* system (set by /Users/hoge/.pyenv/version)
  anaconda2-4.1.0
$ which python  #読み込まれるPythonの場所
/Users/hoge/.pyenv/shims/python
$ python --version
Python 2.7.0  #まだ標準のPythonが立ち上がることになっている。
```

使用するPythonを、ここでインストールしたAnacondaに含まれるバージョンに変更します。

```:
$ pyenv global anaconda2-4.1.0
$ which python
/Users/hoge/.pyenv/shims/python
$ python --version
Python 2.7.11 :: Anaconda 4.1.0 (x86_64)  #Anaconda 4.1.0に含まれるPython 2.7.11が立ち上がる。
```

Anacondaに含まれるパッケージ管理ツールcondaとAnaconda、パッケージのアップデートを行う。

```:
$ conda update conda  #condaのアップデート
$ conda update anaconda  #Anacondaのアップデート
$ conda update --all  #Anacondaに含まれるパッケージのアップデート
```
アップデート後のPythonバージョンの確認。

```:
$ python --version
Python 2.7.12 :: Anaconda 4.1.1 (x86_64)
```

Jupyterが立ち上がることを確認。

`$ jupyter notebook`

ブラウザが立ち上がり、そこにJupyterの画面が見えれば成功。
長くなりました。お疲れ様でした。

#用語
- Anaconda
Pythonのディストリビューション。Python自身とともに主要ライブラリをまとめてインストールできます。
（python, jupyter, numpy, pandas, scikit-learn, scipy, seabornなど）

- conda
Anacondaに含まれる、パッケージ管理システム。環境管理システム。pipとも併用できるので、condaには入っていないライブラリはpipでインストールできる。

- pip
condaと同様に、pythonのパッケージ管理システム。condaは環境管理システムも兼ねるので、pipでしか入れられないライブラリを扱うとき以外はcondaでいい。
（http://conda.pydata.org/docs/_downloads/conda-pip-virtualenv-translator.html より）

- pyenv
pythonのバージョン管理システム。

- GitHub
Gitとはバージョン管理するためのツール。そのGitにチーム開発に適した機能を付け加えたサービスがGitHub。オープンソースソフトウェアの公開場所としても使われている。

- Homebrew
Mac上でソフトウェアの導入を単純化するパッケージ管理システム

- シェル変数
シェル内で使用する変数のこと。シェルの動作環境を設定するためにも使われる。シェルの動作を設定したり、現在の設定を確認するために使用されるシェル変数を「組み込みシェル変数」と呼ぶ。シェル内だけで有効。

- 環境変数
シェルから実行されるプログラムにも引き継がれていくシェル変数のこと。通常のシェル変数と区別するために、一般的に全部大文字で記述する。

- 環境変数PATH
コマンドの置かれているディレクトリがコロン「:」で区切られて格納され、「コマンド検索パス」などと呼ばれている。

- エイリアス
コマンドにオプションや引数を含めて別名をつけること。