新しいMacbookを買ったので環境構築についてまとめてみた

# はじめに

先日Macbook Proを新しく買ったので、環境構築について自分なりにまとめてみました。
後々の自分や、似た方々のためのHow To記事ぐらいにするつもりだったのですが作業量が多かったので途中からただのメモ書きになっており、後半読みにくくなっているのは予めご理解ください。

また自分がもろもろ手を出しがちな人なので、人によってはこの通りにすると余計なものがたくさん入ってしまうということがあります。これに沿って環境構築をしたいという方はそちらも念頭において使用してください。

# 環境構築

## 購入したもの

- Macbook Pro 15inch 2017 フル積み
- 英字キーボード、Touch Bar

## 手順

### 1. GUIソフトのインストールその１

以下のあたりをとりあえず入れていく

- Xcode
  - 再起動するフェイズが入る、多分ここはバージョンとか時期によりそう
  - GitHubとデベロッパーアカウントにはログインしておくとよい。
- Chrome
  - 起動してデフォルトのブラウザに
  - ログインして設定は引き継ぐ
- Google日本語入力
  - 入れた後、デフォルトの日本語を削除
- Karabiner Elements
  - 設定画面を開きANSIを選択
  - Simple Modificationsにcaps_lock -> left_controlを設定
  - Complex Modificationsのimport more rules from internetからfor japanese (rev. xxx)を探してimport
  - 「コマンドキーを単体でおした時〜」をEnableに
  - [Karabiner-Elements - 左右commandキー単独をかな英数キーにGUIで設定できるようになってた！ - ngzmのブログ](http://ngzm.hateblo.jp/entry/2017/07/08/185537)
- iTerm2
- オフィス関連などApple純正アプリ
  - 実はAppStoreの購入済みの画面にいって「受け取る」をクリックする必要があるみたい

これで設定がしやすくなる。IMEまわりは標準の日本語入力は使いにくいのと、英字キーボードのため。

###  2. コマンドラインの設定以外を整えていく

設定はこだわりたいので後回しで、ひとまず入れていく。こっちはそこそこ手順が決まる

#### 2-1. Homebrewとzshの投入

- homebrewをまず検索してホームページからインストールスクリプトをコピー＆実行
- `brew install zsh`を実行。もともと入ってるそうだけどbrewで管理するとアップデートができるのでこちらにしてみる。
- zshをプライマリにしたいのでシステム環境設定のユーザーとグループからユーザーを右クリックして詳細オプションを表示。ログインシェルを`/usr/local/bin/zsh`にする。
- [【Mac】ログインシェルの変更方法について (chsh, chpass) - TASK NOTES](http://www.task-notes.com/entry/20150117/1421482066)
- brew caskを使うため`brew tap caskroom/cask`もついでにしておく

これがベースになる。Preztoなども設定したいがそれは設定フェイズにまわして次に進んだ。

#### 2-2. 各種プログラミング言語の環境をセットアップしていく

[新Macbook環境構築計画＆メモ一覧 · GitHub](https://gist.github.com/touyou/6791aac54a6c6d3d26a2e25ac503c245#file-links-md)にまとめているリンクを参考に主要言語のパッケージマネージャ的なものたちを入れた。

ひとまず2018年時点でPython,Ruby,Haskell,OCaml,Goを使う場合は以下のコマンドを叩く。

`brew install python python3 rbenv ruby-build haskell-stack opam go`

Rustに関しては`rustp`というのを入れるといいらしいのでそのために以下を実行する（面倒ならbrewでもよさそう）

`curl https://sh.rustup.rs -sSf | sh`

こちらは[Rust の初期環境構築 【2017年版】 - A Memorandum](http://etc9.hatenablog.com/entry/2017/08/29/002720)を見ながらやるとよさそう。

~~TeXに関しては`brew install ghostscript`と`brew cask install mactex`を実行する。そして最後に`sudo tlmgr update --self --all`でオーケー。~~

(2018/04/18 更新)上の方法だと日本語が入っていなかったり確かにGUI使わないんだよなぁという気分になったので[ここ](https://qiita.com/ryosebach/items/bea8e8b084b07eaf88ae)を参考にするように変更した。
日本語も使う場合は[この記事](https://qiita.com/ken0nek/items/f98f88c9c45d8499786e)がよい

(2018/04/30 更新)basictexがアップデートされるとそのたびにパッケージが更新されてしまうらしい（？）
なので、TeXのアップデートが走ったら

```sh
sudo tlmgr update --self --all
sudo tlmgr install uplatex latexmk collection-langjapanese latexindent
```

を行う。ちなみに`latexindent`はPerlのライブラリへの依存が高く、しかも普通のCPANでは解決できないので

`brew install cpanm`

をして`sudo cpanm Hoge::Hoge`を必要なものに対して行わなければならない。そこらへんの詳しい必要なものはlatexindentのリポジトリに記載されている。

(2018/05/15 更新)LaTeXのバージョンが上がると時々latexmk向けの環境が壊れる場合がある（フォーマットファイルとかが古いバージョンのまま更新されてくれない）
その場合は環境の設定にもよるが、以下のコマンドを実行する

```
fmtutil-user --all
```

ここまでできたら、各環境をより細かく入れていきたいので編集用にまず`brew install vim --with-lua`でvimを一旦導入。一旦というのはカスタマイズに応じてもう少しオプションが必要な可能性もあるから。
そして.zshrcをいじりたいのでこの時点でPreztoを設定してしまうことにした。コマンド的には以下

```
$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
```

これは基本的にzpreztoのREADMEからとってくればいいが、lnを走らせる時すでに.zshrcなどがあるとpreztoが自動生成してくれる.zshrcを使えないので一回削除してから入れると便利

そうしたらパスを順次追加していく。zshだとパスは以下のように.zshrcに追加していくと便利。GOPATHは[これからGoを始める人のためのTips集 | The Wacul Blog](http://blog.wacul.co.jp/blog/2014/08/22/go/)の通りにすると後々いいらしい。

```sh
export GOPATH=$HOME/.go/lib:$HOME/.go/projects
path=(
  $HOME/.rbenv/bin(N-)
  $HOME/.cargo/bin(N-)
  $HOME/.go/lib/bin(N-)
  $HOME/.go/projects/bin(N-)
  $path
)
```

他にはPythonの環境として、２系はvirtualenvが別途必要になるので`pip install virtualenv`だけ走らせた。
またHaskellはstackのみ入れたので`stack setup`で必要なものをいれてあげる。
OCamlに関しては`brew install hg darcs`をやった後に`opam init`を実行してあげる。ここでopamは勝手に`zshrc`に追記してくれる。その後

```sh
eval `opam config env`
```

する。
あとは追加で`brew install rlwrap`してOCamlのエイリアスを貼っておくと使いにくいインタプリタが使いやすくなる。
[OCamlの環境構築[Mac OS X] - Qiita](https://qiita.com/oshuya/items/dd0faa707c5baf54249d)に基本従って最後まで設定しきった。

(追記:2018/03/11)
gccがMacはclangのエイリアスになってしまっているので、bits/stdc++.hなどが使えない。
その為brewでgccを入れ直すとよく、今現在brewで入れられる最新バージョン`brew install gcc6`をする。[macにgcc5.3をインストール - Qiita](https://qiita.com/akameco/items/b081f05757eef4360108)を参考にした。

~~最後、シンボリックリンクをつけてあげるが。現在は以下。~~

`sh
ln -s /usr/local/bin/gcc-6 /usr/local/bin/gcc
ln -s /usr/local/bin/g++-6 /usr/local/bin/g++
`
~~ただ、これでもまだgccはclangエイリアスのままになってしまう。パスを入れ替えても効きそうにない上、全体で優先順位が変わってしまうとXcodeでCを使うときが怖い気がしたのでzsh上のエイリアスにすることにした。つまり.zshrcに以下を追記した。~~

`sh:.zshrc
alias gcc='/usr/local/bin/gcc'
alias g++='/usr/local/bin/g++'
`
~~もちろんもとからこれをするというならシンボリックリンクの過程はいらないかも。~~

(2018/05/15 追記)
最初からそもそも

`sh:.zshrc
alias gcc='/usr/local/bin/gcc-8'
alias g++='/usr/local/bin/g++-8'
`
とやるほうがバージョンが変わったときに気づきやすくてよい。

### 3. もろもろインストール祭り

ちょっと複雑なフェイズが終わったのでCUI/GUIともにもろもろを入れていく。多分順番をつけるのが面倒になっただけ。

- GUI
  - virtualbox, FileZilla ... ここらへんはCaskでインストール管理ができる。なので`brew cask install virtualbox filezilla`とする。VirtualBoxは途中で設定のセキュリティとプライバシーに出てくる許可ボタンを押してやらなきゃならないから、コマンド実行してからまた再度実行しなおすみたいなフローが発生した。
  - Android Studio ... かなり便利になったのでダウンロードした後は起動して進めていけばいいっぽい。最後に設定からGitHubにだけログインした。
  - Unity ... VSCodeが使えるのでMonoDevelopを外して代わりにAndroidとiOS、WebGLのサポートを追加した
      - さらにVSCodeでIDE的機能を使うためには `brew cask install dotnet`、`brew install mono`を入れておく必要がある
  - Processing ... 入れるだけ
  - Sketch.app ... 少しライセンスの移動などを考えれば良い。
  - Atom, VSCode, Franz, Mendeley, Boostnote、Abstract, AppCleaner ... ノー思考
  - Evernote, Affinity, One Drive, Memory Cleaner, Alfred, Disk Diag, Display Menu, LadioCast ... ここらへんは本当にAppStoreから入れるだけなのでもっとノー思考
  - Zeplin ... 一旦ログインしてから浮き輪をクリックするとダウンロードする場所へのリンクがある
  - Maya ... ライセンスを持っている場合、ログインするとダウンロードできる
  - Adobe ... とりあえずライセンスを購入するまではCleative Cloudのマネージャーだけ入れておく
- CUI
  - Pod ... `sudo gem install cocoapods`
  - Carthage ... `brew install carthage`。最初実行するとxcodebuildのパスがうまく設定できてなくて`sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer`とすることで治った。
  - carthage-input-files ... [GitHub - ken0nek/CarthageInputFiles: You don't have to type framework paths each time when using Carthage](https://github.com/ken0nek/CarthageInputFiles)を見る。これはCarthageを便利に使うため。インストールにswift package managerを利用しているため、インストールする前にXcodeを一度開いてコマンドラインツールなどが使える状態にしておく必要がある。また一度デバッグしないとデベロッパー使用の許可のポップアップが出てこないので何かしらをビルドして許可することでインストールできる状態になる。
  - SwiftLint ... `brew install swiftlint`
  - brew rmtree ... `brew tap beeftornado/rmtree`。これはBrewの依存関係をうまく扱いつつ整理できる便利ツール。
  - brew-file ... `brew install rcmdnk/file/brew-file`としてその後.zshrcに以下を追記する。
  `
  if [ -f $(brew --prefix)/etc/brew-wrap ];then
    source $(brew --prefix)/etc/brew-wrap
  fi
  `
  - nodebrew ... `brew install nodebrew`
  - node.js ... `nodebrew install-binary latest`をする。[買いたてのＭacにNode.jsとnpmをインストール - Qiita](https://qiita.com/taketakekaho/items/dd08cf01b4fe86b2e218)ここを見ればわりと安心。
  - [Commitizen by commitizen](http://commitizen.github.io/cz-cli/) ... なんで急にnodeを入れだしたかというとこれのため。意外と使えるgitのツール
  - tig, gibo...gitのブランチをコマンドライン上で見れるtigとgitignore生成のgiboはどっちもbrewで入れられるので`brew install tig gibo`で。
  - hub ... GitHubにリポジトリを作成できるhubもbrewで入れる
  - Docker ... Docker for Macがあるので`brew install docker`と`brew cask install docker`を両方実行する
  - deploygate ... `sudo gem install deploygate --no-document`
  - clang-format ... `brew install clang-format`で。C/C++のコード整形を行うため。
  - lolcat ... `brew install lolcat`で。ただただ楽しいやつ。
  - swiftenv ... 基本[ここ](https://swiftenv.fuller.li/en/latest/installation.html)を見る。他のバージョンも入れたくなった事態が発生したため。
  - OpenMPI ... [ここ](https://qiita.com/kaityo256/items/ae9329dae24ea8828ae0)を参考に。ただ、Brewだとなにやらうまくいかなかったので手動makeのほうをおこなった。

インストールしたものは立ち上げていってログイン処理などを行った。特にWebからのは一度許可を出さなければなので開いておくとよいかも。
Franzはログインするとタブは復元してくれるが、中身のログイン情報は引き継いでくれないのでそこもコツコツとする。

### 4. 設定祭り

ここまででかなり環境として整ってきた。ライセンスなどは一応やるだけなのでまた厄介な設定に入っていく。

まずPowerlineが好きなのでそれのセットアップをする。[Zsh+Preztoを設定し、powerline対応のthemeを設定する - Tbpgr Blog](http://tbpgr.hatenablog.com/entry/2015/10/27/001323)にやり方は載っているのでこれをそのままやっていく。最後にバージョン依存らしきコピーコマンドを実行しているが、これは代わりにインストール後これを実行してねとメッセージがでてくるのでそれをコピーして実行すればいい。
zprezto側は.zpreztorcで設定する。これはもともとsorinというテーマになっているのでこれで検索してあげて、themeっていういかにもそれらしき所のsorinをpowerlineに書き換えてやればいい。
ついでにここで必要な設定をコメントアウトしてあげるとzshがより便利に使える。
特にmoduleは便利で[Preztoでzshをいい感じに使う - スプーキーズのちょっとTech。](http://labs.spookies.co.jp/entry/2016/04/08/184610)にあるように自分の好きなものをとりあえず有効にしておけば後々感動することになるかもしれない。

GitHubとパソコンのSSHの紐付けはすごく簡単になっていて、XcodeでGitHubアカウントにログインすると紐付けする方法がHTTPかSSHか選べて、そこでSSHを選択するとなんとGUI上で鍵を生成することができてしまう。元々GitHubとのヒモ付のためのSSH Keyなのでこれを設定しておけばターミナル上のgitでもGitHubとつながっているということになる。
ただ、別にこれでgit全体の設定が終わったということではないらしく、[Gitをインストールしたら真っ先にやっておくべき初期設定 - Qiita](https://qiita.com/wnoguchi/items/f7358a227dfe2640cce3)はやっておく必要があった。

色味も設定してあげたいが、Railscastsがなんとなく好きなので、それを使用していく。まずiTerm2用に[GitHub - therealechan/railscasts-iterm2: railscasts color for iterm2](https://github.com/therealechan/railscasts-iterm2)があるのでダウンロードしてきてプロファイルのカラー設定からインポートし設定する。
[GitHub - mbadolato/iTerm2-Color-Schemes](https://github.com/mbadolato/iTerm2-Color-Schemes)でまとめてダウンロードしてきて好きなものを設定するでもいいと思う。

Xcodeにも[GitHub - skywinder/xcode-themes: Color themes for Xcode](https://github.com/skywinder/xcode-themes)のようなリポジトリがある。こちらの追加はちょっとだけ面倒で自分でフォルダをつくり、そこにコピーしてやらなければならない。ここらへんのやり方はリポジトリのREADMEの一番下を見てやればいい。

ちょっと脇道にそれてiTunesについて、CDで入れた曲がいっぱいあったのでそれを入れたかったけど、Automaticary Add to iTunesっていうそれっぽいフォルダに入れると日本語がことごとく文字化けしていく（英語設定にしてたからかも）
なのでこの場合はMusicというフォルダを自分でつくってしまい直接放り込むほうがよさそう。それが一番はやい。

またカラーパレットとしては[Some color pallets with Apple Color List (.clr) format · GitHub](https://gist.github.com/chsh/f9bcb00a22cb5c5a7477757632917d25)を導入しておくと一気にいろんな色がいろんなアプリケーションで使えるようになっていい。

Unityに関して、エディタをVSCodeにする場合C#のプラグインには[.NET and C# - Get Started in 10 Minutes](https://www.microsoft.com/net/learn/get-started/macos)が必要になる。

### 5. 最大の難関vim

まずひとまずdeinを入れる。これはREADMEに従えば大丈夫。
そしてプラグインの管理は[dein.vimでプラグイン管理のはじめ方 - Qiita](https://qiita.com/sugamondo/items/fcaf210ca86d65bcaca8)などを参考にtomlファイルに外出しするとよい。

プラグインとしてはまず見た目まわりとしてnerdtree,devicon,railscats theme,airlineなどを入れた。Airlineに関しては[vim-airlineを入れる - Qiita](https://qiita.com/myouga/items/2f241731c16cf09273ff)とか[マイvim設定を修正（vim-airlineで格好いいvimライフ） - Qiita](https://qiita.com/park-jh/items/5f796eec85d5ab272136)を見るといいかも。

そして.vimrcは[dotfiles/.vimrc at master · touyou/dotfiles · GitHub](https://github.com/touyou/dotfiles/blob/master/.vimrc)のようになった。もともと使ってたやつを整理しつつバグを目でつぶした感じ。

`$MY_VIMRUNTIME`や`fileTypeIndent`あたりは便利。

### 6. なんだかいろいろやったけど...

ひとまずは[GitHub - touyou/dotfiles](https://github.com/touyou/dotfiles)を更新したのでこちらに大体はのっている。zpreztoの管理だけ面倒だったが、forkしてoriginとは別にtouyouという名前でリモートリポジトリを登録し、コミット＆プッシュした状態をsubmodule化することで解決した。