Mobile Factory Tech Blog

技術好きな方へ!モバイルファクトリーのエンジニアたちが楽しい技術話をお届けします!

インストールしてすぐ使えるfish shell入門

こんにちは!新卒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ビットカラー
  • ウェブからの設定変更
  • 直感的な操作性

オートサジェスト

過去のコマンド履歴を利用して、入力した文字と一致する最後のコマンドをうっすらと表示してくれます。

f:id:dorapon2000:20200811173232g:plain

実行できないコマンドを入力したときに赤くなるのも嬉しいですね。

f:id:dorapon2000:20200806173135p:plain

manを使った補完・直感的な操作性

fishではmanを読み込んでオプションの補完ができるようになります。gitのコマンドはもちろん、manがあるコマンドであればどれでも補完可能です。

f:id:dorapon2000:20200812170723g:plain

ウェブからの設定

fishではウェブからテーマやプロンプトの設定ができ、環境変数なども見られます。ただし、ブラウザがない環境だとエラーがでます

fish_config  # ブラウザが立ち上がる

テーマの設定

f:id:dorapon2000:20200811180458g:plain

プロンプトの設定

f:id:dorapon2000:20200812164717g:plain

環境変数も見られる

f:id:dorapon2000:20200814170637p:plain

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との違いについて詳しく書かれていて参考になります。

シェル芸人のためのfish入門 - Qiita

使ってみての感想

普段使っている中では、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コマンドも必要です。

f:id:dorapon2000:20200813173546g:plain

  • 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を使う人が増えることを期待します!