macのセットアップメモ

# なにこれ
macを新しくしました。
いや、厳密には「新しいやつやるから古いやつ返せ」というお達しを放置していたら期限が来てしまい、使ってたPCが回収されてしまったので、強制的に全部新しく構成する必要が出てしまいました。
で、環境については個人的にやっておきたいこととか結構あって、思い出しながらやってたら、なんかもうかなり大変だったので手順をまとめます。

# 手順１： macそのものの設定
## OS自体を最新に
確実に不要なショートカットは全部Dockから除外して（Safariもいらんけどcheromeとか入れるまではレギューラー扱い）、砂漠を眺めます。

<img width="５００" alt="スクリーンショット 2019-02-15 11.51.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/926dc2cb-20b5-b5c9-6fbe-e8f684d30280.png">

わぁ綺麗（白目）。いつのバージョンだよ。
最新版をインストールして再起動します。

<img width="５００" alt="スクリーンショット 2019-10-13 19.15.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/fc1bdd85-413a-8b57-5197-8701be447fd4.png">
お、今回は綺麗な島ですね。
## キーの設定
`システム設定` > `キーボード` > `キーボード`
入力は最速を是とするスタイルなので一番右に。

<img width="780" alt="スクリーンショット 2019-02-15 12.00.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/a936403b-ab7a-263e-5425-3bfeaef4a384.png">

`修飾キー`を押して、キーを設定します。
普段USキーを使っているのですが、まず使わないCapsLockがこんな押しやすいところにあるのが許せないのでCommandキーに変更。
<img width="780" alt="スクリーンショット 2019-02-15 11.59.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/0163889d-09d4-827a-5afd-0409000bd6ea.png">


## 標準ショートカットの全除外
`システム設定` > `キーボード` > `ショートカット` > `サービス`

こんなもん全部いらないです。
というか`CMD+Shift+L` でsafariが起動して喜ぶ人いるんですかね？
![スクリーンショット 2019-10-17 12.04.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/437d9324-473e-c179-8d1f-ca4a95b9a0f9.png)


旧人類なのでライブ入力は利用しません（最速を是とするとか書いたばかりなのにね）。
<img width="780" alt="スクリーンショット 2019-10-13 16.19.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/ad63e991-545d-4cf6-657b-490f88471598.png">
入力モード切替えが`ctrl+space`だとIDEによっては補完とショートカットが被って面倒なので、古いスタイルであるところの`command+space`に変更。
<img width="780" alt="スクリーンショット 2019-10-13 19.24.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/55bcbc8b-c384-9924-c93e-36ced328bad8.png">

spotlight検索が少し性能が上がったらしいので、飽きるまでは`alt+space`をspotlightに変更。
<img width="780" alt="スクリーンショット 2019-10-13 19.24.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/8a39f33a-517d-8f47-7ef8-cbb39e22c0a1.png">

[当日追記]
使いにくい。Alfred入れました。


## 諸々ダウンロード
絶対抜けあるけど、とりあえずパッと思い出せるものだけ。
<img width="882" alt="スクリーンショット 2019-10-13 17.09.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/ff77b054-d225-e80c-8beb-7ec0e2d88659.png">


# 手順2: 開発環境
## HomeBrew
[HomeBrew](https://brew.sh/index_ja) をインストールします。
公式の手順通り

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

を実行。
途中でパスワードを聞かれるので入力。

```bash
==> /usr/bin/sudo /usr/bin/xcode-select --switch /Library/Developer/CommandLineTools
Password:
```

Xcode周りでいろいろポップアップするので全部同意。
<img width="573" alt="スクリーンショット 2019-10-13 19.12.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/532e69e8-98f8-1715-e4fc-1519643cd52f.png">
<img width="752" alt="スクリーンショット 2019-10-13 19.12.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/7e6e0140-e866-fb51-5fa8-572cc955d895.png">

`==> Installation successful!` が出たらとりあえずOK。
一応確認。

```bash
$ brew -v
Homebrew 2.1.13
Homebrew/homebrew-core (git revision e058; last commit 2019-10-13)
```

## fish shell
普段使ってる標準shellのfishをインストールします。
`brew`でインストールしてバージョン確認、デフォルトシェルの切替えを行ないます。

```bash
$ brew install fish
$ which fish
/usr/local/bin/fish    # これをコピー
$ sudo vim /etc/shells # コピーしたディレクトリをこのファイルの末尾に追加
$ chsh -s /usr/local/bin/fish
Changing shell for ***.
Password for ***: パスワード
```

この状態でターミナルを再起動すると、トップに`Welcome to fish, the friendly interactive shell` と出てfishが起動します。

### プロンプトの変更
私は普段、`[現在時刻]:今のディレクトリ > `というプロンプトにしています。
初期設定のプロンプトはごちゃごちゃ使いにくいので修正します。

```~/.config/fish/functions/fish_prompt.fish
function fish_prompt --description 'Write out the prompt'
	set color_cwd $fish_color_param
    set suffix '>'
    if test -z $WINDOW
        echo (set_color $color_cwd)'['(date "+$c2%H$c0:$c2%M$c0:$c2%S")']'(set_color normal):(set_color $fish_color_cwd)(prompt_pwd)(set_color normal)" $suffix "
    else
        echo (set_color $color_cwd)'['(date "+$c2%H$c0:$c2%M$c0:$c2%S")']'(set_color normal)'('(echo $WINDOW)')'(set_color $fish_color_cwd)(prompt_pwd)(set_color normal)" $suffix "
    end
end
```

### コマンドの作成
先に[peco](https://github.com/peco/peco)をインストールしておきます。
pecoが何かについては公式を読んでください。神ツールです。

```bash
$ brew install peco
```

#### History
コマンド履歴の一覧を取得しpecoで選択、実行できるようにします

```~/.config/fish/functions/peco_select_history.fish
# `peco_select_history (option: args)` or `ctrl+r`
function peco_select_history
  if test (count $argv) = 0
    set peco_flags --layout=bottom-up
  else
    set peco_flags --layout=bottom-up --query "$argv"
  end

  history|peco $peco_flags|read cmd

  if [ $cmd ]
    commandline $cmd
  else
    commandline ''
  end
end
```

#### Process Kill
起動しているコマンドの一覧を取得し、pecoで選択してkillできるようにします。

```~/.config/fish/functions/peco_kill.fish
# `peco_kill (option: args)` or `ctrl+k`
function peco_kill
  if test (count $argv) = 0
    set peco_flags
  else
    set peco_flags --query "$argv"
  end

  ps ax -o pid,time,command | peco $peco_flags | awk '{print $1}' | xargs kill
end
```

#### sshを簡単にできるように
~/.ssh/config、あるいは指定ファイルから環境を指定してsshできるようにします。

```~/.config/fish/functions/sshc.fish
# `sshc (option: file_name)`
function sshc
    set conf "$HOME/.ssh/config"
    if test (count $argv) = 0
        echo 'default'
    else
        set conf $argv[1]
        echo $conf
    end
    set host (grep 'Host ' $conf | awk '{print $2}' | peco)
    if test $conf
        echo "ssh -F $conf $host"
        ssh -F $conf $host
    end
end
```

#### ショートカット作成
`config.fish`に登録してあげればOK。

```~/.config/fish/config.fish
function fish_user_key_bindings
    bind \cr 'peco_select_history'
    bind \ck 'peco_kill'
end
```

## node
nodeを入れnで管理します。

```bash
$ brew install node
$ npm install -g n
$ sudo n latest
```

## go
```bash
$ brew install go
$ cd `適当なgoプロジェクト`
$ go run ***
# 依存関係のインポートが始まってプログラムが動けばOK
go: finding github.com/**/** v*.*.*
go: finding github.com/**/** v*.*.*
go: finding github.com/**/** v*.*.*
...
```

・・・と、これ系の処理は無限に発生するので必要が出てき次第、順次インストール。

## vim
最速で設定するのはVim Bootstrapに任せてます

```bash
# vim
$ curl 'https://vim-bootstrap.com/generate.vim' --data 'langs=go&langs=javascript&langs=rust&langs=scala&langs=typescript&langs=python&langs=html&langs=ruby&editor=vim&frameworks=vuejs' > ~/vimrc

# nvim
$ curl 'https://vim-bootstrap.com/generate.vim' --data 'langs=go&langs=javascript&langs=rust&langs=scala&langs=typescript&langs=python&langs=html&langs=ruby&editor=nvim&frameworks=vuejs' > ~/.config/nvim/init.vim
```

・・・で、nvimはいいのですが、標準のvimはクリップボードが使えないので~~役に立たない~~使いにくいです。
使いやすいように対応します。

```bash
# 今のvimはどれだっけ？
$ which vim
/usr/local/bin/vim

# 邪魔っす。無慈悲に名前変更
$ sudo mv /usr/local/bin/vim /usr/local/bin/old_vim

# 新しくvimを取得
$ brew install vim

# clipboard使えるか確認
$ /usr/local/Cellar/vim/***/bin/vim --version | grep clip

# linkを貼って元のファイルに上書き
$ sudo ln /usr/local/Cellar/vim/***/bin/vim /usr/bin/

# 切り替わってますね
$ ls -la (which vim)
 /usr/local/bin/vim -> ../Cellar/vim/***/bin/vim

# 更新完了
$ vim --version | grep clipboard
+clipboard         +keymap            +printer           +vertsplit
+emacs_tags        -mouse_gpm         -sun_workshop      -xterm_clipboard

# .vimrcの適当なところに `set clipboard+=unnamed` を追加
```

# 3. 各種アプリの設定

## Vidual Studio Code
### codeコマンドの追加
`code` で実行できるようにします。
1. VSCode起動
2. `Command + Shift + P`
3.  `>Shell Command: Install 'code' command in PATH`
を実行
<img width="332" alt="スクリーンショット 2019-10-14 17.06.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/8fa27920-c65e-3129-edc5-ccb840c72d13.png">

### VSCode内のターミナルをfishに変更
zshが標準で開いてしまい困るので（zshの設定を入れればいいだけの話だけど）、fishを使うように変更します。
1. `command + ,` で環境設定を開く
2. 検索窓に　`terminal.integrated.shell.osx`を入れる
<img width="930" alt="スクリーンショット 2019-10-14 19.12.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/8dad2be5-07a5-c5a7-5d77-fc554d9d8edb.png">
3. settings.jsonが開くので以下のように変更

```settings.json
{
    "terminal.integrated.shell.osx": "/usr/local/bin/fish"
}
```

## JetBrain製品
こちらもzshが開いてしまうのでfishに変更。
`環境設定` → `Terinal` → `shell path`
ここでfishのパスを指定。
<img width="1133" alt="スクリーンショット 2019-10-14 19.22.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/fb4ea6ee-2a42-88bd-76a0-074336e1f16b.png">

## Karabiner-Elements
カジュアルに動かなくなっていて困った。

以下のように警告文が出るので、`karabiner_grabber`と`karabiner_observer`の両方を許可してあげればいいのだけど・・・
<img width="1112" alt="スクリーンショット 2019-10-15 14.11.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/a8d29cf4-527a-1526-a2ca-82703e9e0042.png">

`karabiner_grabber`しか候補に出てこない
<img width="780" alt="スクリーンショット 2019-10-15 14.12.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/9970ed3d-c207-bd83-b428-08dda5d53806.png">

幸い該当のファイルはどちらも同じディレクトリ（`/Library/Application\ Support/org.pqrs/Karabiner-Elements/bin`）に入っているので、右クリックなどでファイルの場所を開き、ドラッグアンドドロップで入れてあげればOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/3bbe8c44-ff1b-48cf-42e4-8c5993651723.png)

後は好きに設定（よくキモいと言われる設定）
<img width="1112" alt="スクリーンショット 2019-10-15 14.38.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/271a291e-853a-10f0-992f-b9a365c5aa7e.png">


## clippy
とりあえず100項目くらいあれば困らんやろ精神。
<img width="592" alt="スクリーンショット 2019-10-13 19.34.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/22a078f2-e6a1-f42e-fdc7-adcefdb76916.png">

## Shiftit
上寄せとか下寄せってあんま使わないんですよね。
Windowsぽいようなそうでもないような設定にします。
<img width="520" alt="スクリーンショット 2019-10-15 2.44.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287363/d0ec93d3-c7d7-9481-9162-626267cd55d8.png">

# まとめ
今回はどうしてもやらざるをえない状況におかれてしまったので頑張ったけど、正直なところ大人しく移行アシスタントとか使ったほうが絶対に楽。
すごい時間かかった二度とやらん:frowning:

ただ、不要なファイル~~や、消えていいんだかどうだかわからんファイルとか~~が綺麗さっぱり消えてるので、環境自体はすっきりした:relaxed: