2010モデルMacBookAirをEl Capitanにしたので、真っ新な状態からDjangoのlocal開発環境を構築した時の手順

自宅で2010モデルMacBookAir(OS X Mountain Lion)をずっと使っていたのですが、
最近、動作が激重になってしまったので、思い切ってEl capitanをクリーンインストールしました。
ついでなので、Django開発ができるように環境構築した手順をメモしておきます。

もともと下積み時代から使っていたPCという事もあり、インストールされているパッケージもmacportsやらhomebrewやらその他諸々いろんな方法で色んな場所にインストールされていて、まったく整理されていなかったので、今後はPCの容量圧迫を避けるためにmacportsはやめて、homebrewに統一して構築しました。

#bashrcをターミナル起動時に読み込ませる
まずはここから、bash_profileを下記のように編集して、ターミナル起動時にbashrcを読み込ませます。

```bash
$ vim .bash_profile

if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi
```

#Homebrewインストール
まず、先にXcodeをインストールします。
その後、ターミナルで下記コマンドを叩き、CommandLineToolsをインストールします。

```bash
$ xcode-select --install
```
![スクリーンショット 2016-05-25 1.19.52.png](https://qiita-image-store.s3.amazonaws.com/0/93763/326301ea-e52d-3b11-614f-4a2db5cecad5.png)

次に[公式サイト](http://brew.sh/index_ja.html)に乗っているコマンドでHomebrewをインストールします。

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

今後。Homebrewでインストールしたパッケージは ```/usr/local/Celler``` にインストールされます。
そして ```/usr/local/bin```にシンボリックリンクが作られる仕組みなので、コマンド用のPATH環境変数の中で```/usr/local/bin```が優先されているか確認します。

```bash
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
```
左から優先順になるので、この場合は```/usr/local/bin```が最優先になっている事が確認できました。
これで、Homebrewの準備は完了です。

#MySQLの準備
次に、web開発には欠かせないDBの準備としてmysqlをインストールします。

##mysqlをインストール
さっそく、mysqlをインストール

```bash
$ brew install mysql
```

インストールが完了したら、念のため動作確認します。
まずはmysqlを起動させます。

```bash
$ mysql.server start
Starting MySQL
.. SUCCESS!
```

問題なく起動したので、接続してみます。

```bash
$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.12 Homebrew

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye
```

接続確認も問題ないので、mysqlを停止します。

```bash
$ mysql.server stop
Shutting down MySQL
. SUCCESS!
```

##自動起動させる
毎回コマンドで起動させるのは面倒なので、PC起動時に自動でmysqlが起動するようにします。

Library/LaunchAgents にシンボリックリンクを作成し、ログインしたユーザーの権限で起動時にプログラムを実行するようにします。

```bash
$ ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
```
[Library/LaunchAgents についてはこちらが参考になりました](http://ka-zoo.net/2013/04/launchd-plist/)
>LaunchAgents ディレクトリにあるのはエージェントと呼ばれ、ログインしているユーザごとに起動されるプロセスである。

追加したエージェントの読み込み

```bash
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
```

では、登録されたか確認してみます。

```bash
$ launchctl list
~~~~snip~~~
17619    0    homebrew.mxcl.mysql
~~~~snip~~~
```
登録されていますね。
これで、毎回手動で起動させなくてもよくなります。

##sequelproダウンロード
コンソールからmysqlを操作するのもいいのですが、sequelproというToolでGUI操作すると便利なので、[公式サイト](http://www.sequelpro.com/download)からインストールしておきます。

必要な設定を入力したら、接続テストを行い、問題なければお気に入りに追加しておきます。
![スクリーンショット_2016-05-24_0_41_39.png](https://qiita-image-store.s3.amazonaws.com/0/93763/f7187e33-2487-2a4f-a82d-ba48eb7d8af4.png)

#Redisの準備
次にキャッシュ用ににRedisを入れておきます。
手順はmysqlの時とほぼ同じです。
##redisインストール
では、redisをインストールします

```bash
$ brew install redis
```
一応バージョンを確認

```bash
$ redis-server -v
Redis server v=3.2.0 sha=00000000:0 malloc=libc bits=64 build=dd22954a73c7ae64
```

mysqlの時と同じように起動確認してみます。

```bash
$ redis-server
17845:C 24 May 00:50:25.959 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
17845:M 24 May 00:50:25.964 * Increased maximum number of open files to 10032 (it was originally set to 256).
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.2.0 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 17845
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

17845:M 24 May 00:50:25.966 # Server started, Redis version 3.2.0
17845:M 24 May 00:50:25.966 * The server is now ready to accept connections on port 6379

^C17845:signal-handler (1464018637) Received SIGINT scheduling shutdown...
17845:M 24 May 00:50:37.986 # User requested shutdown...
17845:M 24 May 00:50:37.987 * Saving the final RDB snapshot before exiting.
17845:M 24 May 00:50:37.991 * DB saved on disk
17845:M 24 May 00:50:37.992 # Redis is now ready to exit, bye bye...
```

問題なく起動したので ```control + c```で終了します。

##自動起動させる
では、Redisも自動起動するようにLaunchAgentsにシンボリックリンクを作成します。

```bash
$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
/Users/user/Library/LaunchAgents/homebrew.mxcl.redis.plist -> /usr/local/opt/redis/homebrew.mxcl.redis.plist
```

追加したエージェントの読み込み

```bash
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
```

では、登録されたか確認します。

```bash
$ launchctl list
~~~~snip~~~
17843    0    homebrew.mxcl.redis
~~~~snip~~~
```
こちらも無事登録されてます。

では、接続確認。

```bash
$ redis-cli
127.0.0.1:6379>
```
問題ないので、これでRedisの準備も完了です。

#virtualenvでPythonの仮想環境を準備する
つぎに、円滑に開発を行う為にPythonの仮想環境を準備します。

##pip インストール
まずは、virtualenvをインストールするためのpythonのパッケージ管理システムのpipをインストールします。

```bash
$ sudo easy_install pip
```
pipでインストールされたパッケージはpython内のsite-packagesに置かれます。

##virtualenv インストール
では、次にpipでvirtualenvをインストールします。

```bash
$ sudo pip install virtualenv
```

##virtualenvwrapper インストール
次に、virtualenvを使いやすくするwrapperのvirtualenvwrapperをインストールします。
ちなみに[こちら](http://qiita.com/_rdtr/items/5f3a9a9e2cb5a24f284e)の説明がわかりやすいです。
>Virtualenvだけでも十分に簡単に使用できますが, wrapperを導入することで
各環境の管理, 切り替えが簡単になる
各環境に切り替えた時など特定のポイントで実行したい処理をフックとして記述できる
といったメリットがあるので, 入れる価値があると思います。Python3.x系にも対応。

```bash
$ sudo pip install virtualenvwrapper

OSError: [Errno 1] Operation not permitted: '/tmp/pip-tTNnKQ-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'
```
しかし、El CapitanではOSErrorになります。

これは、El Capitanにはpythonのsix-1.4.1が元々入っていて、それをアンインストールしようとするが、six-1.4.1はsudoでもアンインストールきないって事で起きるエラーらしいです。
なのでignore-installedでsixへの操作は無視して解決します。

```bash
$ sudo pip install virtualenvwrapper --ignore-installed six
```

これで、エラーが起きなかったので、```pip freeze```でインストールされたか確認します。

```bash
$ pip freeze
~~~~snip~~~
six==1.4.1
virtualenv==15.0.1
virtualenvwrapper==4.7.1
~~~~snip~~~
```
インストールされている事が確認できました。

##virtualenvを使用するための前準備

今後、仮想環境が置かれる場所として、virtualenvs用のディレクトリを作成しておきます。

```bash
$ mkdir ~/.virtualenvs
```

次にbashrcを編集して、環境変数の設定をします。

```bash
$vi ~/.bashrc

if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
    export WORKON_HOME=$HOME/.virtualenvs
    source /usr/local/bin/virtualenvwrapper.sh
fi
```
これはvirtualenvwrapperがインストールされていれば, WORKON_HOMEを設定してvirtualenvwrapper.shを実行するようにしています。

bashrc再読み込み

```bash
$ source ~/.bashrc
```

##バーチャル環境作成
準備ができたので、次にバーチャル環境を作成します。

今回は元々Macに入っているPythonを使用するため、プリインストールのpythonのpathの確認します。

```bash
$ which python
/usr/bin/python
```

pythonの確認

```bash
$ ls /usr/bin/ | grep python
python
python-config
python2.6
python2.6-config
python2.7
python2.7-config
pythonw
pythonw2.6
pythonw2.7
```
Macにはpython2.7とpython2.6があるようですが、今回はpython2.7を使用します。

では、python2.7をベースにバーチャル環境を作成します。
下記コマンドではmysiteが仮想環境の名前になります。

```bash
$ mkvirtualenv --python=/usr/bin/python2.7 mysite
```

頭に```(mysite)```がついている事がわかります。
これが、仮想環境に接続している事を表します。

```bash
(mysite) kinpira-no-MacBook-Air:~ user$ which python
/Users/user/.virtualenvs/mysite/bin/python
```
あと、先ほど設定したWORKON_HOME環境変数が通っているので、```.virtualenvs```ディレクトリ以下に環境ができている事が確認できます。

今回は仮想環境作成の際に作成された仮想環境に接続していますが、今後は[```workon 仮想環境名```]で仮想環境に接続できます。

#gitのカスタマイズ
これで環境的には整ったのですが、コンソール画面を見やすくするために色を設定しようと思います。

gitは元からMacに入っているのですが、gitを補完したりカスタムするための```git-completion```が　入っていなかったので、gitもHomebrewでインストールします。

```bash
$ brew install git
```

次に、```/usr/local/etc/bash_completion.d/```の中にgit-completion.bashのシンボリックリンクが置かれていることを確認します。

```bash
$ ls -l /usr/local/etc/bash_completion.d/
total 48
-rw-r--r--  1 user  admin  14040  5 24 00:08 brew
lrwxr-xr-x  1 user  admin     64  5 24 01:44 git-completion.bash -> ../../Cellar/git/2.8.3/etc/bash_completion.d/git-completion.bash
lrwxr-xr-x  1 user  admin     58  5 24 01:44 git-prompt.sh -> ../../Cellar/git/2.8.3/etc/bash_completion.d/git-prompt.sh
```

ちなみにHomebrewでインストールする前はシンボリックリンクが無いです。

```bash
ls /usr/local/etc/bash_completion.d/
brew
```

では、下記の様にbashrcを編集し、色と表示内容を変更します。

```bash
$ vim .bashrc

if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
    export WORKON_HOME=$HOME/.virtualenvs
    source /usr/local/bin/virtualenvwrapper.sh
fi

source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/git-completion.bash

GIT_PS1_SHOWDIRTYSTATE=true
export PS1='\[\033[36m\]\w\[\033[31m\]$(__git_ps1) \[\033[01;34m\]\$\[\033[00m\] '
```

PS1でホスト部分もカスタマイズしているので、bashrcを再読み込みするとこんな感じになります。
![スクリーンショット_2016-05-25_2_34_04.png](https://qiita-image-store.s3.amazonaws.com/0/93763/d4cc339f-49b1-7a0f-2eff-acdfe006f414.png)

あとはHOMEでgit configの設定をします。

```bash
$ cat .gitconfig

[user]
  name = kinpira
  email = kinpira@example

[core]
  excludesfile = ~/.gitignore
  autocrlf = input # CRLFを自動変換

[color]
# colorの設定(以下のコマンドは自動で色つける)
  ui = true
  status = auto
  diff = auto
  branch = auto
  interactive = auto
  grep = auto

[alias]
# gitコマンドのaliasを作成
  co = checkout
  ci = commit
  st = status
  b = branch
  a = add
  hist = log --pretty=format:\\\"%h %ad | %s%d [%an]\\\" --graph --date=short
```

するとgitの操作にも色がついて、コマンドも短縮されて、いい感じになりました。
![スクリーンショット 2016-05-25 2.50.59.png](https://qiita-image-store.s3.amazonaws.com/0/93763/58a41f91-0af2-8ebd-9cc1-fee3c11e4651.png)

#PyCharmのインストール
最後にpython用のエディターとして、PyCharmをインストールしておきます。
PyCharmは有償の Professional Edition と無償の Community Editionが存在します。
今回は[公式サイト](https://www.jetbrains.com/pycharm/download/)から無償版のCommunity Editionをダウンロードします。
PyCharmに関しては[こちら](http://qiita.com/yamionp/items/f88d50da8d6b548fc44c)が参考になります。

#試しにDjangoを動かしてみる
Djangoは[こちら](http://qiita.com/yu-sa/items/26e413987efa0debc9d7)から簡易プロジェクトを持ってきました。
PyCharmで開くとこんな感じで編集できます。

![スクリーンショット 2016-05-25 1.02.35.png](https://qiita-image-store.s3.amazonaws.com/0/93763/39603bdf-ea03-445c-fa4d-5d8e8c3485c8.png)

実際に動かして見て、ページが表示されました。
![スクリーンショット 2016-05-25 1.00.47.png](https://qiita-image-store.s3.amazonaws.com/0/93763/7b7319bc-fd30-c2fc-ff4e-7a3fae2140ad.png)

これで一通りの環境が整ったので、これでEl CapitanにlocalでDjangoを開発する環境が整いました。


#おまけ：El Capitan感想

ずっとMountain Lionで使ってきたわけですが、今回El Capitanにするという決断にいたるまで随分と葛藤しました^^;
PCが古いので、Updateした事でよりいっそう動作が重くなり、使い物にならなくなったらどうしようという不安があったのですが、いざEl Capitanにしてみたらかなり軽くなり安心しました。
といってもクリーンインストールしたわけなので、OSの恩恵なのかゴミがなくなったからなのかはわからないですが、2010モデルMacBookAirでも問題なく動作する事は間違いないです。


#最後に

今回は手動で環境構築をしましたが、今度はDockerかansibleとかで環境構築にトライしたいなと思います。