プログラマの開発が爆速になる、おすすめツールまとめ

# はじめに
自分が開発に使っているツールで、これは外せない！というものを集めました。macなので、windows/linuxの方には合わないかもしれません。
また、少しでも開発速度をあげたい思いから、オススメのものや代替ツールなどありましたらコメントをお願いいたします。

## 編集履歴
2021/4/29 Karabiner-Elementsの設定ファイルへのリンクを修正

## ツール一覧
この記事で取り上げているツール一覧です。(fish shellはツールとは呼べませんが。。。)

 - Karabiner-Elements
 - BetterTouchTool
 - HyperSwitch
 - fish shell
 - iTerm2
 - Vimium


# キーバインド関連
## Karabiner-Elements
https://github.com/tekezo/Karabiner-Elements
言わずと知れた（？）pcのキーを自在にカスタマイズできるツール。
自分は以下の設定を書いています。

 - 英数を他のキーと共に押した時は`cmd`に、かなを他のキーと共に押した時は`ctrl`にする。
 - `space`キーを他のキーと共に押した時は`left-shift`として扱う。（これは親指でshiftキーを押せるので非常にタイピングが早くなります。）
 - `left-ctrl`を単独で押した時は`esc`に。（vimなどで頻繁に押すのでここにしています。）
 -  `ctrl + f, b, n, p`を、矢印キーに。（emacsのキーバインドですね。）

こちらに自分の設定ファイルがあるので、ご自由にお使いください。
https://github.com/hiramekun/dotfiles/blob/master/karabiner/karabiner.json
## BetterTouchTool（通称BTT）
[超便利！「BetterTouchTool」を使いたおすための7つの設定。[Mac]](http://macwin.org/mac/bettertouchtool/)
windowsでは標準でアプリを左半分に表示などができるのですが、macにはありません。それを補ってくれるのがBTTです。
以下のような設定をしています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/134922/cebf2b77-dd14-7362-6bbf-0139a9f309be.png)

 - ウィンドウを右半分に寄せる：`cmd + shift + r`
 - ウィンドウを左半分に寄せる：`cmd + shift + l`
 - ウィンドウを最大化：`cmd + shift + m`

こんな感じに左でサイトを見ながら、右でコーディングをしたりしています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/134922/4e52ee00-6f3e-0f9d-58ed-e79fbf9e93b8.png)

さらにですが、windowのサイズ変更だけではなく、ショートカットにアプリを割り当てることができます。自分はよく開くアプリに全てコマンドを振って、開きたいアプリを一発で開けるようにしてあります。

 - chrome：`cmd + ctrl + o`
 - Android Studio：`cmd + ctrl + a`
 - iTerm：`cmd + ctrl + i`
 - etc

## HyperSwitch
こちらのサイトが参考になりました。
[Macアプリ「HyperSwitch」ウインドウ単位で切り替え](https://pc-karuma.net/mac-app-hyperswitch/)
これは、通常の`cmd + tab`だとアプリケーション単位での切り替えしかできないのですが、それをwindow単位にしてくれるというものです。ブラウザアプリがwindowを2つ開いている時など、これを使うと自分の開きたいwindowに移動することができます。

### 地味に嬉しい機能

 - `cmd + tab`を押した後に、cmdを押したままhjklを押すと（vimキーバインドのようですね）、選択中のwindowを移動できる。
 - `ctrl + tab`を押すと、同一アプリ内のwindowだけが候補に表示される。


# ターミナル関連
## fish shell
zshと比べて設定が簡単、綺麗なシンタックスハイライト、強力な入力補完など、bashの次に触るshellとしてかなり適当だと自分では思っています。
例えば、fishのconfigファイルを編集する時ですが、今までの履歴を遡って候補を出してくれます。この次に`tab`もしくは`ctrl + e`を押すことで入力が完了するので、頻繁に同じコマンドを打つ方は非常にその恩恵に授かれます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/134922/96fcd5c2-3ca9-fb22-ae6d-6a8fab6382a9.png)

こちらのサイトが非常に参考になりました。
[詳解 fishでモダンなシェル環境の構築](https://qiita.com/susieyy/items/ac2133e249f252dc9a34A)

### 注意点
以下の点が、bashやzshとは大きく異なります。

 - 文法や環境変数の設定方法（empty enterなどをzshで書いていた方は少し移行が面倒かもしれません）。
 - pythonを使う方は、anacondaのactivateコマンドが最初は効かない。
    - この一行をconfigファイルに追加することで動くようになります。`source (conda info --root)/etc/fish/conf.d/conda.fish`
 - 新しいshellなので、ググった時に情報が少ない。

## iTerm2
https://www.iterm2.com/
言わずと知れたターミナルアプリですね。色が綺麗にでる、カスタマイズが効く、タブの複製が簡単など標準のteminalよりも良い点がたくさんあります。

 - windowを横に分割：`cmd + d`
 - windowを縦に分割：`cmd + shift + d`
 - windowの移動：`cmd + [` または `cmd + ]`
 - windowの複製：`cmd + t`
 - windowを閉じる：`cmd + w`
 - タブ移動：`cmd + [タブ番号]`

# Chrome関連
## Vimium
ブラウザの操作をキーボードだけで行ってしまえるプラグインです。
ページのスクロールから、リンクのクリックまでキーボードでできてしまうという優れものです。
`i`でリンク候補が表示され、次にその文字をタイピングするとリンクをクリックしたのと同じ挙動になります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/134922/c791a356-d6cd-6e06-f0dc-1c64b154bff8.png)


こちらの記事が非常に参考になります。
[Chromeをvimライクに使えるようにするvimium](https://qiita.com/satoshi03/items/9fdfcd0e46e095ec68c1)