お手軽に、なるべくCUIでmacの環境を移行する〜サーバサイドエンジニアの場合


# はじめに

使っていたmacを修理に出すことになった。
この機に、最低限の手順で開発環境を整える際に利用した行動をメモする。
基本的に homebrewとmas-cli で管理。

Brewfileなど、さらに自動化できる方法はあるが、
そのあたりの自動化ツールは1年もしたらオワコンになっていたりするので、
最低限の引っ越しができればいい、という人間が書いている。

## OS環境
- OS : OS X El Capitan v10.11.6

## その他、設定を移行するアプリケーション

- 利用する言語 : Ruby, PHP, Go
- 利用するシェル : bash, zsh, fish
- エディタ : emacs, atom
- 開発環境 : docker
- ターミナル環境 : iTerm2 + tmux
- キーボード設定 : Karabiner

# 利用するアプリケーションのインストール方法

![apps_flow.png](https://qiita-image-store.s3.amazonaws.com/0/14275/f9eea55e-61c8-7aef-f86a-c1b908256edb.png "apps_flow.png")

基本的には[mas-cli](https://github.com/argon/mas)を利用する。
homebrewと、brew caskも利用するが、できるだけmasを利用する。
masを利用する理由は、バージョンが古いものをインストールすることのリスクを減らすため。
http://queryok.ikuwow.com/entry/stop-brew-cask/


# rootlessを解除
いろいろと権限まわりでこまることが多そうなので、rootlessを解除する。

```
# mac起動時にCmd-Rを押しっぱなしにし、リカバリモードに
# ユーティリティ>ターミナルを選択し、ターミナル起動
$ csrutil status # 現在の設定がrootless状態か確認
System Integrity Protection status: enabled.

$ csrutil disable
Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.
```

# Xcodeのインストール

homebrewから各パッケージをインストールするため、まずはAppStoreからXcodeをインストールする。
Xcodeのインストールが終わったら、一度Xcodeを起動し、使用許諾に同意する。

# homebrewのインストール

[公式サイト](http://brew.sh/index_ja.html)に記載してあるとおりにインストールする。

```
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ sudo chown /usr/local
$ brew upgrade
$ brew update
$ brew doctor
```

# brewパッケージのインストール

```brew.sh

$ brew install zsh fish tig tree tmux reattach-to-user-namespace \ # 便利ソフト系
 mas \ # mas-cliでCommandLineからAppStoreアプリをインストール
 ansible fswatch jq docker-machine-nfs \ # 環境構築
 rbenv go glide homebrew/php/php70 homebrew/php/composer \ # 言語&バージョン管理
 openssl md5sha1sum nmap curl wget  # ネットワーク設定&調査系
 
 # fishの利用ができるようにする
 echo "/usr/local/bin/fish" >> /etc/shells
```

以下、自分の場合は事前にzshrcに設定してあるので問題ないが、
はじめて利用する場合は実行する必要があるもの。

```
export RBENV_ROOT=/usr/local/var/rbenv
rbenv init
export PATH=$PATH:/usr/local/opt/go/libexec/bin
```

brew caskでAppStoreに存在しないアプリケーションをインストール

```
# ユーティリティ
$ brew cask install google-chrome firefox \
google-japanese-ime karabiner duet shiftit \
iterm2 virtualbox vagrant atom docker-toolbox sequel-pro \ # 開発環境構築
betterzipql qlimagesize qlmarkdown quicklook-json quicklook-csv # quicklook改善
```

# mas-cliを利用してAppStoreからインストール

現在利用しているApplicationをmasを利用してインストールする。
インストールのコマンドは以下のとおり。

```
$ mas install <アプリケーションID>
```

masでのインストールには、Mac App Storeのidが必要なので、
以下のコマンドで、現在利用しているアプリケーションのIDを抜き出し、installしていく。

```
$ mdfind "kMDItemAppStoreHasReceipt=1" | while read a;do echo $(mdls -name kMDItemAppStoreAdamID -raw "$a") $(echo $a|awk '{n=split($0, tmp, "/")}{print tmp[n]}');done | sort -k2

411246225 Caffeine.app
1024640650 CotEditor.app
449589707 Dash.app
406056744 Evernote.app
1013985479 File Spy.app
682658836 GarageBand.app
409183694 Keynote.app
896624060 Kobito.app
539883307 LINE.app
748212890 Memory Monitor.app
409203825 Numbers.app
409201541 Pages.app
928940999 PasteBox.app
976996075 PixelScheduler.app
568494494 Pocket.app
948415170 Pushbullet.app
425955336 Skitch.app
803453959 Slack.app
425424353 The Unarchiver.app
414298354 ToyViewer.app
410628904 Wunderlist.app
497799835 Xcode.app
865500966 feedly.app
408981434 iMovie.app
723185815 iZip Viewer.app
```

まだインストールしていない場合は、各アプリページのidXXXXの数字部分を抜き出す。
以下のURLなら、`406056744`の部分。

https://itunes.apple.com/jp/app/evernote-memo-web-peji-wen/id406056744?mt=12

# Emacsをインストール

evmを利用して複数バージョンが利用できるようにする。
最新版でなくても良い場合は、`brew install evm`で利用可能。
[新しくリリースされたemacs-25.1とemacs-24.5を共存させる](http://qiita.com/tomoyamachi/items/8cd397f7d8d267a01f10)

emacsのビルド時には、Xcode Command Line Toolsが必要なので、以下のコマンドからインストールするのを忘れない。

```
$ xcode-select --install
```

# dotfilesなどで設定を引き継ぐ

自分の場合はこれ。
https://github.com/tomoyamachi/dotfiles

いまだに.emacsファイルがあるなどあまり健全ではない。
MakefileやBrewfileをdotfiles内に入れている人もいるけど、
自分は、後々どこに何のファイルがあるのかわからなくなったり、書式を都度忘れそうなので、あまり書かない方針。

# その他、移行前に保存しておきたい設定ファイル
## iTerm2 + tmuxセッションの設定
itermのプロフィール設定で、各tmuxのセッションを登録しておくと、移行するときにとても便利。
今後、別記事でまとめる予定。

### 移行前

[Preferences > General > Preferences]から
「Load preferences from a ccustome folder or URL」にチェックし、Dropbox内を対象とする。「Save Current Settings to Folder」 を選択し、現在の設定を保存しておく。

### 移行後

移行先のマシンで、同じフォルダから設定ファイルを読み込む。
tmuxセッションをプロフィールに保存して、ショートカットなどを設定しておくと、本当にそのまま移行できるのでおすすめ。

## Karabinerの設定

キーバインドなどは、基本的にKarabinarに設定しておき、
設定ファイルを書き出しておく。

### 移行前

各種設定の書き出し。

```
$ /Applications/Karabiner.app/Contents/Library/bin/karabiner export > ~/Dropbox/karabiner.sh
```

### 移行後

設定ファイルの読み込み。

```
$ sh ~/Dropbox/Karabiner.sh
....
```

## .ssh/config

Dropboxなどに入れておく。

# まとめ
知らない間に、かなりCUIで構築できるようになっていて、時代の流れの速さを感じた。
またきっと来年には新しいモダンな管理方法ができているのだろう。