まだMacで消耗してるの?


この記事はRE:CODEアドベントカレンダーの6日目の記事です。
[Rustを業務で1年使ってみてわかったこと](https://qiita.com/AtsukiTak/items/0ecba19f3518c23d2bf3) <- 前 : 次 -> [CPUを複数持つアーキテクチャNUMAとnumactlの説明](https://qiita.com/bokotomo/items/5352b8ceb6ccb70390c8)

普段の開発マシンとしてのLinuxについて紹介します。


**あくまでもLinuxカスタムしてみると楽しいよ、っていう記事です。決してアンチMacであったりアンチ某氏といった意図はありません。**

# で、まだLinuxつかってないの?[^1]
Macユーザーの皆さん、こんにちは。最近はパスワードなしでログインできたり[^2]、ファイル共有出来なくなったり[^3]と、独自規格をひた走るmacOSですが、いかがお過ごしでしょうか。

僕自身もかつてはMacユーザだったので、Macが開発端末として使いやすいことはわかってます。ただ、"Windowsはクソ"だとか"Apple最高"だとかそういった声に惑わされ、Mac以外を開発端末として使って来なかったので、無意識のうちに、開発環境とはこういうものだ、と思い込んでいた節もあります。
Macしか使ってこなかったみなさん。ここでひとつ、デスクトップ環境としてのLinuxを使ってみるのはいかがでしょうか。
なるべく楽しさを伝えたく、画像・gifメインの記事になっています。

# デバイス・OS
- ThinkPad X1 Carbon 5th Gen
  - 16GB memory
  - 512GB SSD
- Ubuntu 16.04
- zen-kernel

Macをやめた理由はApple Careが切れていたのもあったのですが、マザボがダメになった時の修理代金が結構高かったので、買い換えてもいいなと思った為です。  
実際ThinkPadにしてMacのほうが良かったな、と思う点もあるのですが、今のところ変えてよかったと感じています。  

本当はGentooを入れる予定だったのですが、ThinkPadが届いた翌日がバイトで、Windowsを消すのに手間取っていたらGentooのビルドが出社に間に合わず泣く泣くUbuntuを入れました。。 そこからカスタマイズして今に至ります。
なので落ち着いたらGentooにすり替える予定ではいます。

## UI
普段の画面はこんな感じになってます。タイル型WMとナビゲーションバーを一本入れてます。 DEは利用してません。
タイル型wmとランチャーによって、ブラウジング以外でマウスを使うことがほとんど無くなりました。
![Screenshot from 2017-12-05 20-52-24.png](https://qiita-image-store.s3.amazonaws.com/0/122050/08d2adfe-d88c-a033-0d63-4656c0eab3a4.png)

### [i3wm](https://i3wm.org/)
![wm.gif](https://qiita-image-store.s3.amazonaws.com/0/122050/5e2c77d6-f7de-8f3e-2a30-cba425de610c.gif)

こちらを改良したi3-gapsというウィンドウマネージャ(WM)に手を加えて利用しています。タイル型WMはこのgifを見ていただくとわかると思うのですが、アプリケーションを立ち上げる度にレイアウトを分割してくれるので、ウィンドウ同士が重ならず便利です。

### [polybar](https://github.com/jaagr/polybar)  
ナビゲーションバー。i3barやyabarなどこれ系は色々あるのですが、
- IPC
- カスタムモジュールの導入の容易さ
 
からこちらを利用しています。CIの結果やGitHub上でアサインされたIssueの件数を表示するスクリプトなどをくっつけて使ってます。
![Screenshot from 2017-12-05 23-15-31.png](https://qiita-image-store.s3.amazonaws.com/0/122050/426de3d3-df8f-da38-cbb4-127c24108bfb.png)


### [rofi](https://github.com/DaveDavenport/rofi/)
![rofi.gif](https://qiita-image-store.s3.amazonaws.com/0/122050/ee90bd25-0a81-e7bd-2ee6-8e20399112e5.gif)
MacでいうところのSpotlightやAlfredにあたるランチャーです。こちらをいじって再起動などのシステムコールを付けて使っています。(最後に表示される黒い画面がterminalを開いた状態です。)

### [redshift](http://jonls.dk/redshift/)
nightshiftのLinux版になります。緯度経度を設定しておくと日没、日の出で自動的に切り替わるようにできます。色温度の設定も自由に行えるので助かってます。

### [Gruvbox](https://github.com/morhetz/gruvbox)
カラースキーム。Linuxつかってていいなあ、と思うのが各ツールに対して好きなカラースキームを適用出来る点ですね。 
rofiや後述するdunst, zsh, vimでこのテーマを利用しています。 
個人的に目に一番優しく、暖色系なのでredshiftを利用している時にも綺麗に表示してくれるので気に入っています。　

## Terminal
三種の神器ですね。<del>物議を醸しそう</del>
全てVimのキーバインドで操作出来るためこの組み合わせで利用しています。
- [tmux](https://github.com/tmux/tmux)
- [zsh](http://www.zsh.org/)
- [vim](https://github.com/vim/vim)
主に使っているプラグインはこんな感じです。(サンプルソースとしてvim/vimをお借りしました。)
![Screenshot from 2017-12-05 21-13-47.png](https://qiita-image-store.s3.amazonaws.com/0/122050/f2ed532a-8f08-51e0-be97-23383ac054e8.png)

  - [ale](https://github.com/w0rp/ale)
  非同期のLinterです。言語毎に使用するインタプリタ、コンパイラ、及びオプションを指定できて便利です。
  - [NeedTree](https://github.com/scrooloose/nerdtree)
  画面左側のファイラです。 
  - [tagbar](https://github.com/majutsushi/tagbar)
  画面右側のoutlineです。ctagsとと組み合わせて使います。右側のoutlineからの定義元タグジャンプも出来ます。後述するrangerと共に、最初にソースコードリーディングする際に助かってます。

## tools
Ubuntu上で利用している主なツールです。 Slack, Thunderbird等のMacでも利用していたツールについては言及を控えました。
- [peek](https://github.com/phw/peek)
この記事でも利用している、スクリーンキャプチャツールです。タイルWMでもドラッグで範囲選択してgifが楽に撮影できます。
- [dunst](https://github.com/dunst-project/dunst)
通知用のデーモンです。
- [ranger](http://ranger.nongnu.org/)
terminal内でのファイルマネージャです。こちらもvimのキーバインドで利用しています。 
`ls + Tab`で補完しつつ探索するより高速に見れるので、中途アサインされたプロジェクトの確認や、OSSのソースを見る際によく利用しています。
- [vimium](https://github.com/philc/vimium)
Chrome Extensionになります。Chromeの操作がvimのキーバインドで出来るようになるため、フロントの開発の際のようにブラウザとvimを行き来する動作がシームレスに行えます。


## 不便な点
### Keynoteマジ便利だった
スクショに説明を加える時などに感じるのですが、Keynoteマジ便利ですね。
一応iCloud上でKeynoteを利用できるので凌いでますが、これはmacOSアプリのほうが機能が多彩なので、もしかしたらKeynoteの為だけにMacbookを買うかもしれないです。
### 指紋認証が使えない
これは独自デバイスを搭載しているマシン全般に言えることなのですが、Linux kernelが対応デバイスドライバを搭載していないという場合です。
MacbookにLinuxを入れる場合、touchBarなどはまだ使えないんじゃないかな?と思います。

## 最後に
Apple製品はデバイスとOSが同じ会社で開発されているので、OSがデバイスに対してとてもチューニングされてるな、と改めて思いました。
仮にThinkPad上でmacOSが動いたとしても、バッテリーあたりのパフォーマンスはそこまで出ないのではと思います。バッテリーの持ちも色々絞って10時間程度なので、Macbookの方が持つんじゃないですかね。

でもLinuxに移行して、自分にはこっちが合ってるなと。 
正直Macで開発していた頃に開発で使っていた環境もtmux + zsh + vimなので、開発スピードとしてはさほど変わっていません。(dockerが早くなった等は実感しましたが)
ただUIだったり細かいところで自分にあったチューニングが出来るし、例えばVPSをセットアップするために使っていたansibleがこのマシンのセットアップに使えるし、といった感じで趣味の知識が業務に役立つ機会が多くなったな、と感じています。
なにより単純に使っていて楽しいので、是非試してみてください。
また、自分はこんな環境使ってるよ！といったものがありましたら、こちらも是非紹介していただけると喜びます。



## 参考文献
[^1]: [ikedahayato.com](http://www.ikedahayato.com/) まだ~してるの?構文が有名ですが、最近はまだ仮想通貨持ってないの? のようなまだ~してないのといった否定形も使ってるみたいですね。興味深い。
[^2]: [techcrunch](http://jp.techcrunch.com/2017/11/29/2017-11-28-astonishing-os-x-bug-lets-anyone-log-into-a-high-sierra-machine/)  
[^3]: [engadget](http://japanese.engadget.com/2017/11/30/macos-high-sierra/)