Macの開発環境をzshで良い感じにする

このエントリーでは、Macの開発環境をzshで良い感じにする記事です
今年からシステムエンジニアからWebエンジニアへキャリアチェンジし、今まで使ってきた開発環境がガッツリ変わりました。
今回は、同僚や記事を参考にして自分なりに設定した開発環境の設定をご紹介します

**この記事はまだ荒削りな内容のため近いうちに内容を修正追加する予定です🙇**

## 環境
macOS Sierra 10.12.6

## コマンドラインツールのインストール(アップデート)
まずは、AppストアからXcodeをインストールをしてください
インストール後、下記のコマンドを実行しコマンドラインツールのインストールをしましょう

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

## homebrewのインストール

[公式ページ](https://brew.sh/index_ja.html)を確認の上、以下を実行

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

## gitのインストール
この記事ではgitのコマンドを多用するためgitをインストールします

```zsh
$ brew install git
```

## zshのインストール

### zshをインストールする

```bash
$ brew install zsh
```

### ログインシェルの変更する

`$vi /etc/shells`でviを立ち上げて一番下の行に`/usr/local/bin/zsh`(Homebrewでインストールしたzshのパス)を追加する

```diff:/etc/shells
+ /usr/local/bin/zsh
```

`$ chsh -s /usr/local/bin/zsh`でシェルを変更する

### preztoをインストールする
zshを設定するフレームワークとして[oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)が有名ですが、今回は軽量である[prezto](https://github.com/sorin-ionescu/prezto)をインストールします
公式の通り以下を実行

```zsh
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
```

※すでに、zshの設定ファイルがある場合はねんのため退避させておきましょう
`$mkdir ~/zsh_backup`
`$mv .zlogin .zlogout .zprofile .zshenv .zshrc ~/zsh_backup`

zshの設定ファイルを作成します

```zsh
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
```

### デフォルトで立ち上げあがるエディタをvimに変更する
このままの設定だと`git merge`した時になどに立ち上がるエディタが`nano`というエディタが立ち上がります。
そのため、vimが立ち上がるように修正します

```diff:~/.zprofile

#
# Editors
#

- export EDITOR='nano'
+ export EDITOR='vim'
- export VISUAL='nano'
+ export VISUAL='vim'
export PAGER='less'
```

### テーマを適用する
今回は試しにこちらのテーマを適用します

```diff:~/.zpreztorc
+ zstyle ':prezto:module:prompt' theme 'agnoster'
```

## zsh-completions
zshの補完を強化するためにzsh-completionsをインストールします
https://github.com/zsh-users/zsh-completions

[公式](https://github.com/zsh-users/zsh-completions#user-content-manual-installation)の通り以下を実行する

### インストール

```
$ brew install zsh-completions
```
### .zshrcに設定を追加

```diff:~/.zshrc
+ fpath=(path/to/zsh-completions/src $fpath)
```

zcompdumpをリビルドする

```
$ rm -f ~/.zcompdump; compinit
```

## peco
ターミナルで今まで実行したコマンドの履歴を呼び出せるようにするためにpecoをインストールします
https://github.com/peco/peco

### インストール

```zsh
$ brew install peco
```

### 設定

ctrl+rで呼び出せるようにするのと同じコマンドを重複して表示させないように設定します

```diff:~/.zshrc
+ #peco
+ function peco-history-selection() {
+     BUFFER=$(history 1 | sort -k1,1nr | perl -ne 'BEGIN { my @lines = (); } s/^\s*\d+\*?\s*//; $in=$_; if (!(grep {$in eq $_} @lines)) { push(@lines, $in); print $in; }' | peco --query "$LBUFFER")
+     CURSOR=${#BUFFER}
+     zle reset-prompt
+ }
+ zle -N peco-history-selection
+ bindkey '^R' peco-history-selection
```

## ghq
ghqは予め設定したルートリポジトリにgit cloneをしたり、リポジトリの一覧を表示するなどの管理ができるツールです
https://github.com/motemen/ghq

### インストール

```zsh
$ brew install ghq
```

### ルートリポジトリの設定
```diff:~/.gitconfig
+[ghq]
+  root = ~/設定したいディレクトリ
```
こうすることで、`~/設定したいディレクトリ`へ移動しなくても`ghq get リモートリポジトリURL`で予め設定したルートリポジトリにリポジトリがクローンされます

## tmux
端末多重化ソフトウェアと呼ばれるもので、これを入れると複数ウィンドウでのターミナル操作が便利になります

### インストール

```zsh
$ brew install tmux
```

### .tmux.confの設定
tmuxのインストールが終わった後は自分のホームディレクトリ(`~/`)直下に`.tmux.conf`という設定ファイルを作成し、設定を記入していきます
設定は以下の記事を参考に`prefixキーをC-aに変更する`を`C-q(Ctrl+q)`に変更したものを利用しております
[達人に学ぶ.tmux.confの基本設定 - Qiita](https://qiita.com/succi0303/items/cb396704493476373edf)

```diff:~/.tmux.conf
- # prefixキーをC-aに変更する
+ # prefixキーをC-qに変更する
- set -g prefix C-a
+ set -g prefix C-q
```

### 使い方
まずは普通にターミナルを立ち上げます。その後に`tmux`コマンドを実行し、tmuxを立ち上げます。
すると以下のような画面になると思います。
<img width="1194" alt="スクリーンショット.png" src="https://qiita-image-store.s3.amazonaws.com/0/131669/f5976b2d-9e66-8408-4995-77149547f4fd.png">

#### ペイン(領域)分割
`tmux`を立ち上げた状態ででprefixキー(今回の場合、`Ctrl+q`)を**押した後**に、`|`(パイプ)キーを押すと縦の方向で別の領域を立ち上げることができます。
(※**prefixキーを押しながらではありません**)
さらにprefixキーを押した後に`"`(ダブルコーテーション)キーを押すと横の方向で別の領域を立ち上げることができます。
結果として以下のように1つのウィンドウで3つの領域に分割することができました。
今まではターミナルのウィンドウやタブを複数立ち上げていましたが、キレイに分割されて大分見やすく、便利になりましたね。

<img width="1194" alt="スクリーンショット2.png" src="https://qiita-image-store.s3.amazonaws.com/0/131669/384b6403-b321-5eb7-2134-e9b3b2dcb2d1.png">

#### ペイン移動
各ペインの移動はprefixキーを押した後に方向キーを押すか、各ペインに対してマウスクリックをすれば移動ができます。

他にも色々なコマンドがあるので調べてみてください。

---

以上となります。
今度はこれをスクリプト化したいですね。
そちらは別の機会に書こうと思います。

## 参考記事
https://dev.classmethod.jp/tool/zsh-prezto/
https://qiita.com/shepabashi/items/f2bc2be37a31df49bca5
https://qiita.com/succi0303/items/cb396704493476373edf