HighSierraへのアップデートを機にMacをクリーンインストールして1から環境構築したので備忘録

# HighSierraってFileSystem変わるんでしょ？ならクリーンインストールで！

というわけで軽いノリで私物のMBP2016 タッチバーなし USキーボードモデルをクリーンインストールしました。
これを機にミニマルな構成にしてしまおう。ということで設定ファイルとかインストールするツールとかも見直してあります。
実際にはゼロから環境を作り直したり新しいツールを導入したので結構時間がかかりました。

## じゃ、今までどんな環境使ってたの？

基本的にHomebrewとHomebrew-caskでアプリ突っ込んでました。
コード書くときはterminal.appでtmux+zsh+neovim(色々頑張って設定)でかっこよく作業っするぜ！みたいな感じで。
GUIアプリもVSCodeとかVirtualBoxとかその他便利ツール、快適になるツール関係たくさん入れたり。

## じゃ、今回環境どんな感じにしたの？

遊び心程度のおふざけは残しつつも、今自分がコード書いたりするのに必要十分な最小限の構成にして見ました。
設定ファイルの管理も面倒臭いので.zshrcと.vimrcだけで完結してほしいよね。くらいの気持ちで書いてます。

# 基本構成

今回の環境はGUIもCLIもミニマルで、管理ツールごと、アプリごとに目的や用途、作業内容を明確にすることを目的に、
Yak shaving上等の姿勢で多少の不便も許容するように構成しました。とはいえ基本的には使うツールを使うディレクトリに放り込んでプロジェクト単位で設定ファイル書けばアプリ作ったりとかに困るものではないはず...
なお、実際のクリーンインストールから再構成の最大の目的はCLIツールまわりのごちゃごちゃ感の払拭と、
普段使いエディタのVim(neovim)→VSCodeへの移行だったりするのでそのあたりが達成できて満足してたりはします。

## Mac側基本設定
この辺りは個人の好みもあるとおもうので参考程度に軽く書いておきます
###  言語設定
詰まった時に英語情報を参考にすると日本語でなんていうのかわからなくて困るので、
システム設定が英語ならそのまま適用できるなーと英語設定にしてあります。
訳がイケてないとダサいとか、システムの言語が日本語だと間抜けに見える(英単語ママでいいじゃんってなる)とか、
ディレクトリ名とかを基本英語で打っちゃって変換とかしなくていいようにするとか細々理由はありますが、
別に難しい単語もほとんどないしわかんない単語は即spotlightから検索してMac内蔵の辞書アプリでしらべるためあまり困らないです。
同じ理由でアプリとかも設定言語は英語を優先して使ってます。


### General
Sidebaricon size → Large
収まりいいしアイコン出てればわかるっしょ！という軽い理由で見た目重視のLarge設定。
英語設定だし読むのに脳みそ使うのも無駄なので幼稚園児チックにアイコンの絵柄で判断してます。

### Dock
下表示、大きくなるアニメーションを最大、基本表示サイズは少し小さめ、Dockを隠す設定ON
左にDockを置いたりアニメーションを切るのがパフォーマンスや作業効率を極めている人たちに普及しているようですが、
ミリ秒を争ったりするほどパフォーマンスが高くないので、割と一般的でMacってこれだよねーって感じの設定にしています。
とはいえ選択しやすいこと、画面を広く使えることは重要なので隠す設定と、マウスオーバー時の巨大化？設定はボケても使えるように極端に大きくするように設定してあります。

### Mission Control
ウインドウを並べ替えないように設定
並べ替えられると困ることの方が多かったので。

### Language and Region
英語を最優先言語、次点での優先言語に日本語を設定しています。
地域設定は日本、カレンダーは日曜始まり、グレゴリオ暦カレンダーで24時間表示を使用、セルシウス温度表示、日付とかの表示設定はユニバーサル？を設定
日付表示とかは見間違いが少ないという理由で英国表記
"Mon 07 Oct 2017 24:00"
のスタイルが好きなのですが、面倒なので初期設定のままにしてあります。

### Security&Privacy
ディスク暗号化とファイアウォールでステルスモードON
あとは特に。必要に応じてファイアウォール設定を厳しくしたりするといいかと思います。

### Spotlight
デフォルトのまま。

### Notification
デフォルトのまま。

### Display
スケーリング解像度で最大になるように選択
NightShiftはスケジュールをオフにして、色温度を最も低くオレンジに振る
→night shiftはとにかく目の負担を下げる方向で設定して、スケジュールじゃなくて通知センターから手動でオンオフを切り替えています。
自宅では常時ONで写真とか映像見るときだけオフくらいの使い方してます。

### EnergySaver
デフォルトのまま。

### Keyboard
キーリピートを最速に、再入力までの時間を真ん中より一つ右に
キーリピート開始までの時間を自分のタイピングスピードに合わせて誤爆が減る程度に設定しつつ、
キーリピート自体は最速にすることで自分の最大限のタイピングスピードでサクサク入力できます。
自分の作業効率が上がった機になるのでオススメ

Fnctionキーを通常のF1~F12として使用をON
基本音量とか明るさ調節なんて頻繁には行わないのでFn+F1~F12で対応してます。
逆にF10とかめっちゃ使うからね。文章書いてる時とかソースにコメント入れる時とか。

CapsLock→Ctrlに設定
こんな扱いやすい位置にある記号キーをCapsLockで使うのは悪です。Ctrlにしましょう。
ちなみにCtrlもCtrlのままなので、大文字はShiftを押しながら入力しています。

SpotlightショートカットとIMEの入力切替ショートカットを入れ替え
Mac歴が長い人は日本語入力切替はCmd+Spaceですよね？
ということで入れ替えてあります。

### Mouse
使ってないので設定なし。
Mac系ノートを使ってるのにマウスを使うと右手の移動距離がすごいことになります。
非効率的なのでマウスを投げ捨ててトラックパッドを使うかキーボードショートカットを使いましょう。
作業効率が跳ね上がります。

### TrackPad
全てのチェックをオン、カーソル移動スピード最速、クリックの硬さを一番軽く
ページの戻る進むを指三本でのスワイプ、画面切替を四本指スワイプ
この辺りは好みだと思いますが、自分の設定はこんな感じです。

### それ以外
特に変更した覚えがないので省略



# GUIで入れてあるソフト群
### Google Chrome
モバイルなのでバッテリー持ちを気にしてメインブラウザはSafariですが、
あたりまえに開発時に使うブラウザはChrome、Safariで動かないサービスとか今だに残っているFLASHなサイトを動かすのもChromeなのでChromeは必須アイテムです。
他もそうですが、GUIアプリは今回全部Homebrew-caskを使わずウェブから落としてきてます。
最近のソフトは自動で最新にアップデートしてくれるためbrewで管理するよりかってにあげてくれた方が楽ですし。

### VisualStudioCode
とりあえず設定周りを紹介するのは省略して別の機会にしますが、
最近の高機能GUIエディタ系の中では基本機能が揃っていてかつ動作が快適なため、
大抵の状況では困らないと思います。
組み込みのターミナルもgitもちゃんと動くため基本的にはこいつとブラウザがあればウェブ系開発できる感じ。
それを補う拡張機能とか入れれば完璧ですね。とりあえずVim拡張とcodeコマンドでターミナルからVSCodeを開く設定はしました。

### Docker for Mac
開発時にサーバーVM用意するのとか面倒くさいためDocker導入。
パフォーマンスが悪いとか聞いてますがコンテナでリリースとかまだやったことがないのであまり気にせず普通にいらなくなったら捨てれるVMとして使ってます。

### Slack
必須アイテム。
会社のチームとプライベートのチーム全部のSlackチームに参加
連絡はここから取ってください状態。
通話アプリとかメッセージングアプリをMac側にいれてないためiMessage,Facetime以外の捕まる連絡手段がslackです。
通話もできるしね！
こちらはAppStore版を使っていたのですが、最新版のリリースが遅いためウェブから直接落としたものに今回から変更しました。
日本語文字化けバグで豆腐人間になっていた期間が長すぎたので。


GUIアプリで使ってるのは以上です。
実際にはChromeとかSafariに導入してる拡張機能とかVSCodeに導入してる拡張機能とかもあるのでそっちも紹介すべきですが別にクリーンインストールからの環境構築関係ないので省略


# CLIで入れてあるソフト群
### Homebrew
基本的にこいつでパッケージ管理をしています。こいつで導入しているソフト群とかはこのあと別記載します

### Anyenv
本当はこいつもbrewで入れたかったのですが、brewにformulaないのと自分でtapできるようにするのもなぁ...と思って別枠で入れることにしました。
env系で言語のバージョン管理を全て行ってます。
Anyenv,Anyenv-git,Anyenv-update導入済み。

# ここで色々問題
HomebrewからいろんなソフトやツールをMacにインストールするのですが、
python3が必要とか、このgemが必要とかこのnode-packageが必要とか言い出すツールがたくさんいるため、
HomebrewとAnyenvのインストールができたら先にAnyenvをつかって各種言語をグローバルにインストールする必要があります。
主にneovimが要求してくるpython3ですが。
基本、言語は*envで導入し、グローバルで使えるように設定しておきます。
というわけで、node8.5.0、PHP7.1, Ruby2.4.2, Python3 3.6.2, Python2 2.7.13を入れておきました。
基本的にグローバルで使うものはこの人たち（のnpmとかgemとかpipとかcomposerとか）を利用して入れます。
そろそろmacOSはデフォルトでPython3,Python2,nodeあたり入れておいて欲しいなぁ

## Homebrewで導入したもの
ここまでやってやっとコマンドライン環境を整える作業に入れます。

### git
とりあえず必須ツールですね。

### zsh, zplug
fishは導入を断念したためzshです。
zplugでプラグインを追加して管理

### neovim
メインエディタの座を奪われました。絶賛init.vimとdein.toml,dein_lazy.toml構築中ですが面倒臭いのでneovimを諦めるかもしれません。コマンドラインで使うエディタがsystemデフォルトのvimになりつつあるし...

### screenfetch
かっこよかった。以上。
.zshrcに書いておくとシェル立ち上げ時にかっこよく現在のマシン情報が出るので状態把握しつついい感じにしたくて導入


# 以上
こんなかんじにしてものすごく導入されているソフトとかプラグイン数を削ってみました。
また、シェルやvimの拡張も全部入りパッケージどーん！(oh-my-zsh,prezto,editorsconfig,vim-bootstrap)ではなく、
とりあえず一つづつ自分で設定を触るようにしてみました。
シェルは最低限のことができればいいし、vimはメインエディタをVSCodeにしてみたのであまり高機能にしなくてもよくなったので。

参考に今の.zshrcと.vimrcを以下に貼り付けておきます。割とこれで十分すぎた。




```vim.vimrc

"Base config
set nocompatible
set fileformats=unix,dos,mac
set fenc=utf-8
set nobomb
set nobackup
set noswapfile
set autoread
set hidden
set showcmd
set showmode
set backspace=indent,eol,start
set ambiwidth=double
set history=10000
set clipboard=unnamed,autoselect
set whichwrap=b,s,h,l,<,>,[,],~
set mouse=a
set ruler
set list
set listchars=tab:»-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
set wrap
set number
set laststatus=2
set title
set cursorline
set virtualedit=onemore
set virtualedit=block
set smartindent
set visualbell
set showmatch
set wildmode=list:longest
nnoremap j gj
nnoremap k gk

"Tab config
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4

"Search, highlight settings
set ignorecase
set smartcase
set incsearch
set hlsearch
set wrapscan
nmap <Esc><Esc> :nohlsearch<CR><Esc>

```

```zsh.zshrc

################################################################################
## export
################################################################################

export XDG_CONFIG_HOME="$HOME/.config"
export ZPLUG_HOME=/usr/local/opt/zplug
source $ZPLUG_HOME/init.zsh

################################################################################
## anyenv setup command
################################################################################

if [ -d $HOME/.anyenv ] ; then
    export PATH="$HOME/.anyenv/bin:$PATH"
    eval "$(anyenv init -)"
    # tmux対応
    for D in `\ls $HOME/.anyenv/envs`
    do
        export PATH="$HOME/.anyenv/envs/$D/shims:$PATH"
    done
fi

################################################################################
## zplug plugin 
################################################################################

# initialize zplug
source ~/.zplug/init.zsh

# set plugins here

zplug "mafredri/zsh-async", from:github
zplug "sindresorhus/pure", use:pure.zsh, from:github, as:theme
zplug "supercrabtree/k"
zplug "zsh-users/zsh-autosuggestions"
zplug "zsh-users/zsh-syntax-highlighting", defer:3
zplug "zsh-users/zsh-completions"
zplug "zsh-users/zsh-history-substring-search"
zplug "junegunn/fzf-bin", as:command, from:gh-r, rename-to:fzf
zplug "junegunn/fzf", as:command, use:bin/fzf-tmux
zplug "peco/peco", as:command, from:gh-r, use:"*amd64*"
zplug "b4b4r07/dotfiles", as:command, use:bin/peco-tmux
zplug "b4b4r07/zsh-gomi", as:command, use:bin
zplug "b4b4r07/enhancd", use:enhancd.sh
zplug "mollifier/anyframe"
zplug "mollifier/cd-gitroot"

# install plugins
    if ! zplug check --verbose; then
        printf 'Install? [y/N]: '
        if read -q; then
        echo; zplug install
    fi
fi

zplug load --verbose

################################################################################
## autoload settings
################################################################################

autoload -Uz add-zsh-hook
autoload -Uz compinit && compinit -u
autoload -Uz url-quote-magic
autoload -Uz vcs_info

################################################################################
## zle setting
################################################################################

zle -N self-insert url-quote-magic

################################################################################
## zsh basic setup
################################################################################

setopt auto_list
setopt auto_menu
setopt auto_pushd
setopt extended_history
setopt hist_ignore_all_dups
setopt hist_ignore_dups
setopt hist_reduce_blanks
setopt hist_save_no_dups
setopt ignore_eof
setopt inc_append_history
setopt interactive_comments
setopt no_beep
setopt no_hist_beep
setopt no_list_beep
setopt magic_equal_subst
setopt notify
setopt print_eight_bit
setopt print_exit_value
setopt prompt_subst
setopt pushd_ignore_dups
setopt rm_star_wait
setopt share_history
setopt transient_rprompt

################################################################################
## exports
################################################################################

export CLICOLOR=true
export LSCOLORS='exfxcxdxbxGxDxabagacad'
export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=36;01:cd=33;01:su=31;40;07:sg=36;40;07:tw=32;40;07:ow=33;40;07:'
export EDITOR=vim
export HISTFILE=~/.zhistory
export HISTSIZE=1000
export SAVEHIST=1000000
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8
export LANG=en_US.UTF-8

################################################################################
## completion
################################################################################

zstyle ':completion:*' completer _complete _match _approximate
zstyle ':completion:*' group-name ''
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' use-cache true
zstyle ':completion:*' verbose yes
zstyle ':completion:*:default' menu select=2
zstyle ':completion:*:descriptions' format '%F{yellow}-- %d --%f'
zstyle ':completion:*:options' description 'yes'

################################################################################
## Aliases
################################################################################

alias vi='vim'
alias k='k -a'
alias la='k -a'
alias ll='k -a'
alias ls='k -a'

################################################################################
## Screenfetch
################################################################################

screenfetch -E


```

.zshrc側にはfzfとかpecoがいますが、
使ってみて便利だけどなくても死なないなと思ったので削除検討中です。
.zshrcは使ってみた名残が残りっぱなし...

.vimrcはまだ削っていいなって設定が残っていますが、プラグインとかも使わないでいいなってなってそこそこシンプルにできたかなーと思っているので、zshrcもこのくらいシンプルになるように現在いらないものを捨てまくる作業中です。
実質kとpure以外はとりあえず入れてみたシリーズ状態なのでいらないのかも