注目の記事

fish shell を使いたい人生だった

2017.04.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2019年4月15日: fisher version 3.2.8にアップデートしました。これに伴い、もともと記事内で記載していた fisher install コマンドを 、fisher add に変更しました

ずっとbashを使っていました。zsh、興味はありましたが、プラグインのための設定を書くのがなんとなく大変そうだという理由で、敬遠していました。そこに fish shell (以下 fish) が手を差し伸べてくれたのです。結論から書くと、bash と同程度の設定ファイルの記述量で、ディレクトリ間の移動やコマンド履歴の呼び出しといった利便性は飛躍的に向上しました。そして見た目が良い。入れて損はありません。

想定読者

Mac で bash を使っている方。

バージョン情報

ソフトウェア バージョン
fish 2.5.0 => 2.7.1
fisherman 2.12.0 => 3.2.8

どこまでやるか

このたぐいの作業、はじめるとキリがありません。調べるうちにさらに便利なツールがどんどん出てくるからです。この記事では「見た目を良くした上で、コマンドラインツールにおけるディレクトリ間の移動やコマンド履歴呼び出しを便利にする」ところまでとします。

  • tmuxは(なんだか大変そうななので)導入していません。今のところ、iTermのウィンドウ分割機能でまかなっています。欲しくなったときに入れようと思います。
  • Git関連はghqとの連携してリポジトリへの移動をやりやすくするところまでとしています。ブランチの管理やコミットなどは、私の場合 Tig で行っているためです。

Before and After

beforeandafter

fish shell

これがなければ始まりません。Homebrew で簡単にインストールできます。

$ brew install fish
$ fish -v
fish, version 2.7.1

次に、デフォルトシェルを変更します。

$ sudo vi /etc/shells   #  末尾に /usr/local/bin/fish を追加
$ chsh -s /usr/local/bin/fish  # デフォルトシェルを fish に変更

fisherman

fishのためのプラグインマネージャです。これのおかげで私達が記述する設定ファイルは最小限で済みます。

$ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisher
$ fisher -v
fisher version 3.2.8 ~/.config/fish/functions/fisher.fish

bobthefish - テーマを変更する

黒背景にマッチするもので、落ち着いた色合いが好みだったのでこのテーマを選択しました。powerlineフォントを利用していますので別途フォントのインストールも必要です。

インストール

$ fisher add omf/theme-bobthefish
$ git clone git@github.com:powerline/fonts.git
$ ./install.sh

iTerm2でのフォント設定

インストールしたフォントをiTermのプロファイルで設定します。

iterm_font

これでiTermの画面がかっこよくなるはずです。テンションあがりますね!

z - 履歴からディレクトリへ移動

訪問履歴からディレクトリ移動候補を表示してくれます。また、z 文字列のように入力すると履歴からマッチするものをさがして補完してくれます。日々使うディレクトリはだいたい決まっていますが、それでも完璧にパスを入力していくのは面倒なものです。あいまいな記憶から移動候補を見つける点で優れています。

fisher add z  # インストール

z

fish-bd - 親ディレクトリへ移動

カレントディレクトリからの親ディレクトリを移動候補として表示してくれます。cd ../../ とはおさらばです。特にアプリケーション開発をしているところ、例えばソースコードを辿っていくと階層が深くなりがちで、そこからプロジェクトルートへ戻る…といったシーンで役に立ちます。

fisher add 0rax/fish-bd

bd

peco + plugin-peco - コマンド実行履歴を選択

絞込機能付きのコマンド履歴選択が可能になります。インストール後、キーバインドの設定が必要です。

brew install peco
fisher add oh-my-fish/plugin-peco

~/.config/fish/config.fish

function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)'
end

これで、Ctrl + R コマンド履歴機能を呼び出すことができます。

peco-R

ghq + peco - ghqで登録したGitHubリポジトリを選択して移動

ghqはGitのリポジトリ管理ツールです。ユーザディレクトリに git clone して管理しても良いのですが、数が多くなってくると管理負荷が高くなります。ghqで楽しましょう。fishと組み合わせれば移動も楽です。なお履歴と同様キーバインドの設定が必要になります。

$ brew install ghq

$ ghq get git@github.com:cm-wada-yusuke/angular-websocket-chat.git
$ ghq get git@github.com:cm-wada-yusuke/chatserver-play-websocket-akka-stream.git

~/.config/fish/config.fish

function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)'
  bind \c] peco_select_ghq_repository  # 追加
end

Ctrl + ] でcloneしたリポジトリの移動候補を選択できます。

peco-G

balias

エイリアスを定義した上で、なおかつ登録したエイリアスも他のコマンドと同じように補完できるそうです。そうです、というのは、私が登録しているエイリアスは gitコマンドをgにするくらいだからです。他にいろいろなコマンドをエイリアス登録するようになれば恩恵が大きくなりそうですね。

$ fisher add oh-my-fish/plugin-balias

~/.config/fish/config.fish

balias g git # キーバインドの下あたりに追記

おまけ

fish_config

なんと設定画面がブラウザで開きます。新参者には非常にありがたい。私はカラー設定をここで変更しました。

fish_config

さいごに

とても便利なツールを開発・提供してくださった開発者の皆様に感謝します。ご覧になっている方々の日々の業務を少しでもスタイリッシュにする助けになれば幸いです。

参考