見出し画像

「fish shell」を導入したら、システム開発の作業効率が改善したよ❗

こんにちは、おおとろ(@digiangler)です。

私は、Mac 環境で「fish」と呼ばれるシェルを使用してシステム開発をしています。

fish は、スマートでユーザーフレンドリーなコマンドラインシェルです。

他にも、旧 Mac 標準の「bash」や macOS Catalina からデフォルトシェルになった「zsh」もあります。

たまに案件によって使用禁止というところもありますので、3つのシェルを使えるようにカスタマイズしています。

一度「fish」を使用してみると、快適すぎて他のシェルに戻れなくなってしまいました(苦笑)

この note を読んでいるってことは、大多数がエンジニアさんだと思いますので、その魅力を少しでもお伝えできれば幸いです。

fish とは

普通に読めば”お魚”と思いますが、”Friendly interactive shell” の略称だそうです。

スクリーンショット 2020-06-17 15.15.14

デフォルトで強力な機能が備わっているので、インストールしただけでも十分に活用できます。

メリットはたくさんありますが、ブレット的に書くとこんな感じ。

✓ カラフルでわかりやすい(24bit カラーのサポート)
✓ シンタックスハイライトが効く
✓ ブラウザから細かな設定ができる
✓ コマンドやパスなどのオートサジェスチョン機能の搭載
✓ タブ補完ができる
✓ コマンドエラー判定がある
✓ 存在しないコマンドやディレクトリの場合は赤文字で表示される
✓ grep に 色がつく


など

実際に使用してみるのがわかりやすいので、まずはインストールしてみましょう❗

事前準備

Xcode:

まずは事前準備として、Xcode をインストールしましょう。

お好きな方からインストールしてください。

App store から Xcode をインストールする場合:

コマンドラインからインストールする場合:

$ xcode-select --install

Homebrew からインストールする場合:

# Homebrewをインストール
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# Homebrewインストール完了確認
$ brew doctor

Powerline フォント:(お好み)

お好みになるので必須ではないですが、テーマによっては文字化けすることがあるため、私は powerline フォントをインストールしています。

ターミナルのほか、iTerm2 にもフォントを変更しております。

# Gitでクローン
$ git clone https://github.com/powerline/fonts.git --depth=1

# インストール
$ cd fonts
$ ./install.sh

# 要らないファイルを削除
$ cd ..
$ rm -rf fonts/

iTerm2:(お好み)

こちらもお好みですが、いざ乗り換えてみると細かい環境設定や便利な機能があったりと、意外と Hotkey が便利だったりします。

私のまわりでも iTerm2 を使用しているエンジニアは多いです。

詳細は、過去の note に書いていますのでご覧ください。

iTerm2 のインストールは、上記の note に書いていますので、今回は省きます。

iTerm2 のフォント変更は、以下になります。

「Profiles > Text > Font」を選択し、フォントを変更します。

スクリーンショット_2019-10-08_16_00_44

私の場合は、"Hack Nerd Font" を使用しています。

fish のインストール

公式サイトからインストールしてください。

画像の通り、インストール方法はいろいろあります。

スクリーンショット 2020-06-17 16.01.57

Homebrew の場合:

# インストール
$ brew install fish

# バージョンが表示されることを確認
$ fish -v
fish, version 3.1.2

インストール後、デフォルトシェルを変更をします。

$ chsh -s /usr/local/bin/fish

もし fish をインストールしても ”/etc/shells” に ”/usr/local/bin/fish” が追加されていない場合は、次のコマンドで追加してください。

$ echo /usr/local/bin/fish | sudo tee -a /etc/shells

設定後、シェルを再起動すると fish が起動されるようになります。

設定

fish 上で、以下のコマンドを入力すると各種設定や履歴などが確認できるページがブラウザで表示されます。

$ fish_config

こんな感じ。

カラーバリエーションが豊富ですよね。

※ iTerm2 を使っている場合、配色の変更は iTerm2 側に依存するため反映されません。

スクリーンショット 2020-06-17 16.54.31

デフォルトの設定でカラーやプロンプトを変更してみましょう。

プロンプトで表示する情報を増やすことで、業務効率の向上に繋がります。

プロンプトに気に入ったものがない場合は、後述するプラグインを導入してカスタマイズすることができます。

ドキュメント

fish 上で、以下のコマンドを入力すると、本家ドキュメントがブラウザで表示されます。

$ help document

こんな感じ。

スクリーンショット 2020-06-17 17.02.00

日本語のドキュメントを見たい方は、全訳!fishシェル普及計画さんのページをご覧ください。

ここまででも充分に便利ですが、更に便利にするためプラグインを導入してみましょう。

できれば、紹介しているプラグインをすべてインストールするのではなく、機能を理解したうえで自分に合ったものだけインストールするようにしましょう。

プラグイン管理ツールのインストール

Jorge Bucaran さんが、fish 情報をまとめて下さっていますので、こちらを参考に進めてもいいと思います。

Fisher:

fisher は fish のパッケージ管理ツールです。

昔は、fisherman という名前でした。

プラグイン導入に必須ですので、インストールしましょう。

fisher のインストール:

※隠れている文字もありますのですべてコピーしてね。

$ curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish

fisher でプラグイン追加:

fisher でプラグインを追加するには、次のように ”fisher add” を使用します。

$ fisher add <パッケージ名>

ヘルプの表示:

コマンドは install、update、remove、list、help のみです。

$ fisher help

fisher: unknown flag or command "help"
usage: fisher add <package...>     Add packages
      fisher rm  <package...>     Remove packages
      fisher                      Update all packages
      fisher ls  [<regex>]        List installed packages matching <regex>
      fisher --help               Show this help
      fisher --version            Show the current version
      fisher self-update          Update to the latest version
      fisher self-uninstall       Uninstall from your system
examples:
      fisher add jethrokuan/z rafaelrinaldi/pure
      fisher add gitlab.com/foo/bar@v2
      fisher add ~/path/to/local/pkg
      fisher add <file
      fisher rm rafaelrinaldi/pure
      fisher ls | fisher rm
      fisher ls fish-\*

コマンドを忘れてしまっても help さえ覚えておけば問題ないと思います。

英語も簡単なので親切ですね。

プラグインのインストール

〜 oh-my-fish 編 〜

【oh-my-fish/plugin-balias

alias の代わりに balias と書くことで、alias を補間してくれます。

エイリアスを定義した上で、なおかつ登録したエイリアスも他のコマンドと同じように補完できます。

インストール:

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

設定:

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

$ vim ~/.config/fish/config.fish

# 例:git のエイリアスを追加する場合
# git コマンドを g で打てるように登録

# 下記を追記
balias g git


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【oh-my-fish/plugin-expand

cd を冒頭につけなくてもディレクトリ移動ができるようになります。

インストール:

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


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【oh-my-fish/plugin-peco

使い勝手の良いフィルタリングツールです。

コマンドの実行履歴の絞り込みには peco、もしくは、後述の fzf のどちらか一方で良いと思います。

以下、2 つの機能を提供してくれます。
✓ peco_kill ・・・ プロセスキル
✓ peco_select_history ・・・ コマンド履歴

インストール:

$ brew install peco

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

設定:

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

peco_select_history と peco_kill をそれぞれキーバインド設定しています。

$ vim ~/.config/fish/config.fish

# 下記を追記
function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)' # control + R
  bind \cx\ck peco_kill # control + X からの control + K
end

peco を使ってヒストリーをフィルタリングできるようにしています。

$ vim ~/.config/fish/config.fish

# 下記を追記
function peco_select_history_order
  if test (count $argv) = 0
    set peco_flags --layout=top-down
  else
    set peco_flags --layout=bottom-up --query "$argv"
  end

  history|peco $peco_flags|read foo

  if [ $foo ]
    commandline $foo
  else
    commandline ''
  end
end

function fish_user_key_bindings
  bind /cr 'peco_select_history_order' # control + R
end


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【oh-my-fish/plugin-extract

どんな圧縮ファイルも解凍してくれる extract コマンドです。

インストール:

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


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【oh-my-fish/theme-bobthefish】

私は bobthefish のテーマを使用しています。

インストール:

$ omf install bobthefish

設定:

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

set -g theme_powerline_fonts no
set -g theme_nerd_fonts yes

私の場合、他にもいろいろ設定しています。自分にあった設定をしてみましょう。


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【jethrokuan/fzf

よく使うプラグインで、ファイル検索や実行コマンド検索を、あいまい検索で絞り込みができるコマンドラインツールです。

control + R で実行履歴を表示し、コマンドが選択できます。

上へ移動する場合 ・・・ control + K or ↑
下へ移動する場合 ・・・ control + J or ↓

インストール:

$ brew install fzf

$ fisher add jethrokuan/fzf

設定:

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

$ vim ~/.config/fish/config.fish

# 下記を追記
set -U FZF_LEGACY_KEYBINDINGS 0
set -U FZF_REVERSE_ISEARCH_OPTS "--reverse --height=100%"

FZF_LEGACY_KEYBINDINGS:
新しいキーバインドを使用するのに必要

FZF_REVERSE_ISEARCH_OPTS:
”–reverse”オプション ・・・ 入力欄をターミナル上部に表示させる
”–height”オプション ・・・ フルスクリーンで表示させる

もし、peco を設定している場合は、キーバインドが重複しないように注意ください。


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【sijad/gitignore

.gitignore を作成できます。

インストール:

$ fisher add sijad/gitignore


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【jorgebucaran/fish-bax

時間がかかる処理のときクルクル回るアイコンを表示されます。

インストール:

$ fisher add jorgebucaran/fish-bax


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【jethrokuan/z

よく使うプラグインで、過去に訪れたディレクトリを記憶・移動できるコマンドです。

スペースの後にタブで補完することができるので、ディレクトリの移動が楽になります。

z + -l でトラックしているディレクトリのリストを表示したり、z + 文字列 で履歴から移動するディレクトリの候補を表示してくれます。

インストール:

$ fisher add jethrokuan/z


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【ghq

git repository を置いているディレクトリを設定します。

ghq は、Go 言語で作成されたツールで、リポジトリを一元管理してくれるツールです。

少しややこしいので、GitHubのページをよく読んでインストールと設定をしましょう。

インストール:

$ brew install go

$ brew install ghq

# git repositoryを置いているディレクトリを設定
# 例:~/dev
$ git config --global ghq.root ~/dev

$ fisher add decors/fish-ghq

クローンしたリポジトリを一括管理できます。

ghq.root を設定することで、保存先のディレクトリを意識せず手軽にクローンできます。

$ ghq get <リポジトリURL>

clone したリポジトリは、~/.ghq/github.com で管理されているので、peco または fzf でリポジトリ一覧をフィルタリングし、選択したディレクトリに cd するようにすれば、リポジトリへの移動が非常に楽になります。

Go をインストールしたら、”~/.config/fish/config.fish” で GOPATH を設定します。

# Golang
set -x GOPATH $HOME/dev
set -x PATH $PATH $GOPATH/bin

go get を実行して ghq をインストールします。

$ go get github.com/motemen/ghq

$ source ~/.config/fish/config.fish

以降は peco または fzf で使いたい方を設定してください。

ghq + peco の設定:

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

# ghq + peco
function ghq_peco_repo
  set selected_repository (ghq list -p | peco --query "$LBUFFER")
  if [ -n "$selected_repository" ]
    cd $selected_repository
    echo " $selected_repository "
    commandline -f repaint
  end
end

# fish key bindings
function fish_user_key_bindings
  bind /cg ghq_peco_repo
end

ghq + fzf の設定:

fisher でプラグインを追加します。

$ fisher add decors/fish-ghq

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

# ghq + fzf
function ghq_fzf_repo -d 'Repository search'
  ghq list --full-path | fzf --reverse --height=100% | read select
  [ -n "$select" ]; and cd "$select"
  echo " $select "
  commandline -f repaint
end

# fish key bindings
function fish_user_key_bindings
  bind \cg ghq_fzf_repo
end


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【hub

GitHub に対する操作をコマンドラインから簡単に行うためのツール。

インストール:

$ brew install hub

$ hub version
git version 2.27.0
hub version 2.14.2

~/.config/fish/config.fish ファイルを編集して以下のように設定を追記します。

eval (hub alias -s)


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


その他

【edc/bass

Bash の文法を fish シェルでも使えるようにしてくれる。

インストール:

$ fisher add edc/bass


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【0rax/fish-bd】

ディレクトリを遡ることができます。

$ cd ../../../ のような相対パスを打たなくてよくなります。

インストール:

$ fisher add 0rax/fish-bd


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【yoshiori/fish-peco_select_ghq_repository

ghq コマンドと peco の連携ができます。

ghq リポジトリ群を peco で選択して移動できる。

インストール:

$ fisher add yoshiori/fish-peco_select_ghq_repository

設定:

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

# yoshiori/fish-peco_select_ghq_repository
function fish_user_key_bindings
  bind \c] 'stty sane; peco_select_ghq_repository'
end


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【tsu-nera/fish-peco_open_gh_repository

ghq コマンドと peco の連携ができます。

ghq リポジトリ群を peco で選択して gh-open コマンドで開くことができます。

インストール:

$ fisher add tsu-nera/fish-peco_open_gh_repository

設定:

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

function fish_user_key_bindings
  bind \cx\cl peco_open_gh_repository
end


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


【franciscolourenco/done

通知を表示する秒数を変更する。

インストール:

$ brew install terminal-notifier

$ fisher add franciscolourenco/done

設定:

指定した時間を超えたときに通知をするように変更するには、~/.config/fish/config.fish に __done_min_cmd_duration をセットします。

# デフォルトの設定であれば、実行に5秒以上掛かる場合に通知が表示されます
set -U __done_min_cmd_duration 5000  # default: 5000 ms


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


プログラミング環境

詳細は、過去の note に書いていますのでご覧ください。


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


ちなみに、こんな感じになります。

他にも config.fish をいじっているので、同じようにはなりませんが・・・

もし私と同じ環境にしたい方がいらっしゃれば、私の config.fish を公開仕様と思います。

たくさんのコメントをいただけるようでしたら、考えたいと思います。

スクリーンショット 2020-06-21 15.55.33

以上です。

プラグインの内容は、過去にメモったものをまとめただけなので、もしかしたら古くなっている可能性がありますので、GitHubのページを確認しながらインストールや設定をしてください。

最後まで、読んで頂きありがとうございました❗

それでは、また。

画像1

是非、感想をコメントでくださると嬉しいです。

また、スキボタンを”こっそり”押したり、サポートしてくださるのも、とても嬉しいです。

SNSもよろしければご覧くださいね。

Twitter: @digiangler

Instagram: @digi_angler

Twitterからのリツイートでの感想もくださると嬉しいです。

"こっそり"フォローしてくれると後で良いことがあるかも❗


よろしければサポートよろしくお願い致します。頂いたサポートはライターとしての活動費に使わせて頂きます❗m(_ _)mまた、感想のツイートやリクエスト、ぜひぜひお寄せください(*⌒▽⌒*)