シンプルにMacでのプログラミング環境構築考えてみた。

最近MacBook Pro2017を購入したので環境構築を考え直してみました。
>ドットファイル周りはgithubなどを使って管理したほうがいいのですが、今回はパソコンを初めて買って今からプログラミングしたいなと思っている方にも参考になればと思うのでやめておきます。

# コンセプト

- **シンプルに構築する**
- **後々自分で変更が効かせられるようにする。**

# 基本設定

- 3本指ドラッグ
`System Preferences`→`Accessibility`→`Mouse&Trackpad`→`Trackpad Options`→`Enable dragging`→`three finger drag`に設定。この3本指ドラッグですが、今のところ旧型のMacBookProのトラックパッドのほうが効きがいい。
- Tap to clickにチェックなどなどTrackPadの設定
- Keyboard設定
    - Key Repeat: Fast
    - Delay Until Repeat: Short
    - Shortcuts: USキーボードを使っているので`Select the previous input source`に`Command+Space`を設定.
    - ショートカットはまだまだ変えているのですが、書ききれないので基本的にこれさえ変えればという設定だけ載せます。
- capslockキーをcontrolキーに変える：USキー配列なので設定。
- controlをESCに変える：タッチバーが予想以上に使いにくいので。jisの方はcapslockか何かをESCにしたほうがいいかもしれない。

# 普通にインストールしたアプリ

**チェック**を入れてないものはなんとなく入れたアプリ

- [x] [GoogleChrome](https://www.google.co.jp/chrome/browser/desktop/index.html)
- [ ] [GoogleChromeCanary](https://www.google.co.jp/chrome/browser/desktop/index.html)
- [x] [Google日本語入力](https://www.google.co.jp/ime/)
- [x] XCode & CommandLineTool
- [x] [JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
- [x] [iterm2](https://www.iterm2.com/) 
- [x] [homebrew](https://brew.sh/index_ja.html)
- [x] [Atom](https://atom.io/)
- [x] [VisualStudioCode](https://code.visualstudio.com/)
- [x] [AndroidStudio](https://developer.android.com/studio/index.html?hl=ja)
- [x] [AndroidStudioPreview](https://developer.android.com/studio/preview/index.html?hl=ja)
- [ ] intellij
- [ ] [Dash](https://kapeli.com/dash_ios)
- [x] [Alfred](https://www.alfredapp.com/)
- [x] Slack
- [x] LINE
- [ ] PopClip: instant translateを使うために入れた。
- [ ] Instant translate
- [ ] [CheatSheet](https://www.cheatsheetapp.com/CheatSheet/)

## Chromeで入れたほうがいい拡張機能

- Instant Translate

選択した英語（単語から文章でもなんでも）を日本語に翻訳してくれる便利拡張機能。
これがあるのとないのとでは公式ページを理解するスピードが全然違います。

使い方はwebページでわからない英語の文があったら選択して`Shift`+`T`

# homebrewについて

**なんでもhomebrew管理からの脱却**
> 何をどこで管理しているのかをはっきりさせる。
> 構築を考える上で、上記のことに気を使えば`brew update`などで出るエラー内容を予測できると考えた。

## homebrewで入れたもの

チェックが付いているもの以外はお好み

- [x] git `brew install git`
- [x] zsh `brew install zsh`
- [ ] emacs `brew install emacs`
- [ ] tmux `brew install tmux`
- [ ] peco `brew install peco`

> pecoの設定は後ほど[リンク](https://qiita.com/pfavill/items/d48c6fa6985b4a007834#peco%E3%81%AE%E8%A8%AD%E5%AE%9A)

- [ ] docker `brew install docker` & `brew cask install docker` 
- [ ] go `brew install go`
- [ ] kotlin `brew install kotlin` 個人的にやっているプログラミング言語。

> とりあえず試したいプログラミング言語はbrewでinstallすると良いと思います。バージョン管理が頻繁に必要な場合、`rbenv`,`pyenv`や`anyenv`などを検討されると良いと思います。その場合、PATHに気をつける。


## bashからzshへ

`$ sudo emacs /etc/shells` or `$ sudo vi /etc/shells`

以下を追加

```
/usr/local/bin/zsh
```
以下のコマンドを実行

```shell-session
$ chsh -s /usr/local/bin/zsh
$ exec $SHELL
```


## zshに色をつけよう

> このへんのプラグインはたくさんあって何にすればいいのかわからない場合が多い。
> 実際、使って見ないとわからない事も多い。
> 色々使ってみた感想、結局oh-my-zshが一番かんたんにセッティングできた。
> 他のものを使ってみたいという方にはzplug、preztoなどのgithubを見るといいと思う。
> 個人的にはzplugのREADMEがめちゃくちゃキレイで読みやすかった。ただ、zplugはプラグインをよく選ばないと読み込み速度が遅くなるのでその辺を注意しなければいけないと思った。
> 今回はてっとり早く構築したいのでoh-my-zshをインストールしたいと思う。
> ~~zplugに関するコメントをもらったので後日zplugについて追記するかもしれません。~~

zplugの記事を書きましたのでoh-my-zshではなくzplugで設定されたいかたは[こちらの記事](http://qiita.com/pfavill/items/300f8b83520e56766f22)を参考にしてください。
zplugのほうがギーク向けなのでなんでもいいという人にはoh-my-zshでいいと思います。

### oh-my-zshをインストール
- https://github.com/robbyrussell/oh-my-zsh

`.zshrc`をすでに書いている人は以下のコードを実行すると上書きされるので退避しておくとよい。

```shell-session
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
```
何をやっているのか気になる方はinstall.shを見るといいと思います。
**Git**で管理することになります。
ここでgitという言葉を聴いたことのない方はUdemyの[もう怖くないGit！チーム開発で必要なGitを完全マスター]を見るといいと思います。有料ですが、gitのことをわかりやすく動画で説明してくれています。

ホームディレクトリに色々ドットファイルが作られていることを確認する。
`$ ls -a`

`$ emacs .zshrc` or `vi .zshrc`

色々バババと書いてある。themeの記述を変えるといい感じになる。カスタマイズ系は公式githubを参考にカスタムする。

以下を追加。homebrewのpath
`export PATH=/usr/local/bin:$PATH`

#### pecoの設定
```scm
# peco
function peco-history-selection() {
    BUFFER=`history -n 1 | tail -r  | awk '!a[$0]++' | peco`
    CURSOR=$#BUFFER
    zle reset-prompt
}

zle -N peco-history-selection
bindkey '^R' peco-history-selection
```

起動コマンド→`Ctrl`+`r`

### powerline themeを入れる場合の注意点
powerlineという有名なthemeがあります。自分もEmacsのカスタムで入れています。
これには特殊なフォントを使うのでそれをインストールする必要があります。
これもほとんどの場合、公式ページなどに書いてあるのですが、よく読み飛ばしてしまう場合があるので書いておきます。
[powerline/fonts](https://github.com/powerline/fonts)

- クイックインストール

```shell-session
$ git clone https://github.com/powerline/fonts.git --depth=1
$ cd fonts
$ ./install.sh
$ cd ..
$ rm -rf fonts
```

自分は`D2Coding for Powerline`というフォントを使っています。

## iterm2をいい感じにする。

おすすめtheme: [Dracula](https://draculatheme.com/iterm/)

> なんか癖になる色。自分はAtomやVScodeにもDraulaを使っています。
> エディタのthemeは統一すると見やすくなることもあります。

iterm2のカスタムは人によって変わるので調べて自分の使いやすいように変えると良い。

- 変更方法

この辺は適当にZipをダウンロード＆解凍
itermの`Preferences`→`Profiles`→`Color`→右下の`ColorPreset`→`import`をクリック先程解凍したフォルダからthemeファイルを選択
以上の作業をすれば`Color Presets`で選択可能になる。

- 背景透明化

`Preferences`→`Window`→`Transparency`

操作方法などはググって慣れるしかない。

## ここからはWEB系プログラムで使う設定
Node.jsのインストール

> 今のフロントエンドでは欠かすことのできないNode.js、そのバージョン管理には様々なものが使われています。`nvm`,`nodebrew`,`ndenv`など。プロジェクトによってバージョンの変わるNode.jsをhomebrewや公式のZipなどでインストールしてしまうと後々めんどくさいことになります。

さて、`nvm`,`nodebrew`,`ndenv`などたくさんあるバージョンの中でどれを入れればいいのか。これには好みなどが左右します。

- 管理しやすそうなのは`nodebrew`です。ですが、perlを使用しているところを見ると無駄に重そうという印象。
- ndenvは.node-versionというファイルを使用することで自動的に変更できる(README読んだだけ)。
ですが、更新が止まっているっぽいので保留。
- nvmは公式の情報も一番多かったのでこれに決めました。


### nvmのインストール
https://github.com/creationix/nvm

色々インストールの仕方がありますが、できるだけ**Git**で管理したいため、[Git install](https://github.com/creationix/nvm#git-install)を使用します。

ホームディレクトリに移動
`$ cd`

以下のコマンドを実行

```shell-sessionion
$ git clone https://github.com/creationix/nvm.git .nvm
$ cd .nvm
$ git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
```
.zshrcに以下を追加

```scm
# node
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
```

nodeのバージョンをインストール
`$ nvm install v7.9.0`

バージョンを指定する
`$ nvm alias default 7.9.0` & `$ nvm use v7.9.0`

ここまで終わったら`node -v` & `npm -v`

で確認。

以上になります。

## Androidアプリ開発で使うコマンドを使えるようにする。

最近Android開発を趣味で勉強しているので付け加えてみた。

> DroidKaigi2017の[コマンドなしでぼくはAndroid開発できない話](https://academy.realm.io/jp/posts/droidkaigi17-android-development-with-commandline/)の動画を見ると、とても参考になります。ありがとうございました。

```scm
# android
export ANDROID_DIR=$HOME/Library/Android/sdk
export PATH=$PATH:${ANDROID_DIR}
export PATH=$PATH:${ANDROID_DIR}/platform-tools
export PATH=$PATH:${ANDROID_DIR}/tools
```

こんな感じで設定。
後は`adb-peco`とか入れればいいと思います。
まだまだなのでこれから勉強がんばります。


# まとめ

2年か3年前に[anyenv](http://qiita.com/pfavill/items/f500e46444c86a6f8e6a)の記事を書きました。「いいね」をくれた方ありがとうございます。

今回は**homebrew**で管理するもの、**git**で管理するものの区別を意識して環境構築しました。
**git**を使うので、bashからzshにかえ、ブランチなどをわかりやすく表示したりすることにしました。
なんとなくこれ使うとかではなく、公式とか見てよく検討し何故それを使うのかを自分の中で納得できれば構築後、すごく満足しますよね。
とかインフラエンジニアっぽい事言ってみる。笑（インフラエンジニアではないのですが。。。）
全く関係ないことだけど、MacBook Proのタッチバーめっちゃ使いにくい。（泣）