こんにちは!新卒1年目エンジニアのid:dorapon2000です。最近暑いですね。
さっそくですが、シェルを便利にカスタマイズしたい気持ちはあるけれど面倒だなぁとか、そろそろbash以外のシェルにも手を伸ばしたいという方はいるのではないでしょうか?今回紹介するfishはデフォルトですでに便利なので、入門者であっても導入しやすいですし、設定ファイルをいじりたくない人にもうってつけです。私自身もoh-my-zshを長らく使っていましたが、fishでいいじゃんとなった一人です。一方で、bash構文が使えないことやfish独自の書き方に抵抗がある人は向いていないので注意です。
本記事ではfishの他のシェルにはない魅力的な特徴と使い方をgif付きで紹介していきます。また、コマンドヒストリーの検索が便利になるplugin-pecoも一緒に紹介します。
fish公式:https://fishshell.com/
目次
- 向いている人
- fishインストール手順
- fishの特徴
- 各特徴説明
- bashとの違い
- 使ってみての感想
- plugin-peco
- plugin-pecoインストール手順
- まとめ
インストール手順
# fishのインストール (ubuntu) sudo apt-add-repository ppa:fish-shell/release-3 # fish 3を入れるために必要 sudo apt update sudo apt install fish fish --version # fishのインストール(mac) brew install fish fish --version # デフォルトシェルにする場合 echo $(which fish) | sudo tee -a /etc/shells chsh -s $(which fish) fish
fishのインストールはここまでです。以下は私が使っているテーマのインストール。
# パッケージマネージャfisherのインストール curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman fisher git_util fisher rafaelrinaldi/pure
fishの特徴
fishの公式では6つの特徴をあげています。いくつかピックアップしてみていきましょう。
- オートサジェスト
- 今風のスクリプト構文
- manを使った補完
- 24ビットカラー
- ウェブからの設定変更
- 直感的な操作性
オートサジェスト
過去のコマンド履歴を利用して、入力した文字と一致する最後のコマンドをうっすらと表示してくれます。
実行できないコマンドを入力したときに赤くなるのも嬉しいですね。
manを使った補完・直感的な操作性
fishではmanを読み込んでオプションの補完ができるようになります。gitのコマンドはもちろん、manがあるコマンドであればどれでも補完可能です。
ウェブからの設定
fishではウェブからテーマやプロンプトの設定ができ、環境変数なども見られます。ただし、ブラウザがない環境だとエラーがでます
fish_config # ブラウザが立ち上がる
テーマの設定
プロンプトの設定
環境変数も見られる
fishスクリプト
fiやesacといったシェルスクリプト独特な書き方から今風の書き方になっています。正直なところ、Unixにデフォルトで入っていないfishでスクリプトを書く気持ちにはなれていません。
function detect_os switch (uname) case Linux echo Hi Tux! case Darwin echo Hi Hexley! case FreeBSD NetBSD DragonFly echo Hi Beastie! case '*' echo Hi, stranger! end end
bashとの違い
bashとは似ているようで、違う部分も多々あります。
同じ
- パイプ
|
- 条件式
&&, ||, !
[]
- 入出力
>, >>, <
違う
- 設定ファイルの場所は、
~/.bashrc
ではなく~/config/fish/config.fish
- 環境変数の設定はexportではなくset
set -x PATH /path/to/bin $PATH
- 数値計算はletや(())ではなくmath
math 1 + 1
- mathはfishの組み込み関数
- コマンド置換は$()から()へ
echo (math 1 + 1)
- <()も不可、代わりにpsub
以下の記事はbashとの違いについて詳しく書かれていて参考になります。
使ってみての感想
普段使っている中では、bashとの違いを意識することは環境変数の設定(set)くらいです。既存のシェルスクリプト自体はbashに渡したり、シェバングを書けば良いので気になりません。たまにパイプでつなげまくるワンライナーを書いてfishで動かないことがありますが、そのときだけbashに切り替えています。fishを使い始の頃はFAQが助け舟になるでしょう。
fishを使っていて困ることは、ググって入力するコマンドが動かないですね。例えば、ssh-agentなんかはつまづきポイントです。
# bash eval `ssh-agent` # fish eval (ssh-agent -c)
plugin-peco
最後に1つだけ、plugin-pecoというプラグインだけおすすめしておきます。plugin-pecoを使うにはpecoコマンドも必要です。
- Ctrl-Rを押すとコマンドヒストリーが開き、1タイプごとに絞り込める
- さらにCtrl-Rを押すことで絞り込みの種類を変更できる
fishでも↑↓キーでヒストリーを順に表示できますが、一覧表示されると検索効率がぐんとあがります。
pecoとplugin-pecoのインストール
# pecoのインストール(ubuntu) sudo apt install peco # pecoのインストール(mac) brew install peco # plugin-pecoをインストール fisher install oh-my-fish/plugin-peco vim ~/.config/fish/config.fish # 以下を書き加える function fish_user_key_bindings bind \cr peco_select_history end # シェル再起動
まとめ
- 強力な補完
- 導入コストも学習コストも低い
- pecoと組み合わせてらくちんヒストリー検索
ここまで読んでくださりありがとうございました。 この記事をきっかけにfishの魅力に気づいて、fishを使う人が増えることを期待します!