📚

Fish, Fisher, Fzf を使ってターミナルをカスタムしよう 🐟

2025/02/12に公開

こんにちは!
突然ですが、 fish や fzf はご存知ですか?
この記事では、macOS環境で、【fish】というユーザーフレンドリーなシェルと、その拡張ツール【fisher】、そして【fzf】を使って、ターミナルをより快適にカスタムする方法をご紹介します。シェルの設定ファイルやエイリアスの設定、便利なプラグインについて簡単に解説していきます!

1. この記事の背景

最近、次のようなキッカケがあり、ターミナル環境のカスタムについて調べていました。

  • bash や zsh に飽てきた
  • fish が良さそう
  • 設定スクリプトを見直して作業効率を上げたい

簡単に調べたところ良さそうな記事が多かったので、以前から気になっていた「fish」を導入することにしました。fish は、ユーザーフレンドリーな設計と直感的なコマンド補完機能が魅力です。また、プラグイン管理ツールの fisher を利用することで、機能の追加や設定変更も簡単に行えます。

2. Fish のインストールと初期設定

まずは、fish シェルのインストールです。以下の手順は macOS で Homebrew を使った方法です。

terminal
# Homebrew でインストール
brew install fish

# Fish の実行ファイルのパスを確認
which fish

# Fish のパスをシェル一覧に追加
echo "$(which fish)" | sudo tee -a /etc/shells

# Fish をデフォルトシェルに変更
chsh -s "$(which fish)"

これで、ターミナルを再起動すると fish シェルが使えるようになります。シンプルなコマンドでインストールできるのが魅力です。

macOS 以外のインストール方法については次のページを参照してください。

cf. fish-shell/fish-shell: The user-friendly command line shell.

3. 基本設定のカスタマイズ

3.1 config.fish の設定

fish の設定ファイルは ~/.config/fish/config.fish に作成します。以下は一例です。

~/.config/fish/config.fish
# PATH の設定(Homebrew のパスを先頭に追加)
set -gx PATH /opt/homebrew/bin $PATH

# fzf 用のコマンド設定
set -Ux FZF_DEFAULT_COMMAND "fd --type f"
set -Ux FZF_CTRL_T_COMMAND "fd --type f"
set -Ux FZF_ALT_C_COMMAND "fd --type d"

# Starship プロンプトの初期化
starship init fish | source

# 高速ディレクトリ移動ツール Zoxide の初期化
zoxide init fish | source

# Vim スタイルのキーバインドを設定
fish_vi_key_bindings

# Go 設定(必要に応じて)
set -Ux GOPATH "$HOME/go"
set -Ux PATH "$GOPATH/bin" $PATH

この設定により、PATH の調整や各種便利ツールの初期化が自動で行われ、使いやすい環境が整います。

3.2 エイリアスの設定

続いて、エイリアスの設定です。bash や zsh では alias を使いますが、 fish では abbr を使用して同等の操作を実現します。。以下は ~/.config/fish/conf.d/aliases.fish の一例です。

~/.config/fish/conf.d/aliases.fish
# ls コマンドを lsd に置換
abbr -a ls "lsd"
abbr -a l "lsd -l"
abbr -a ll "lsd -l"
abbr -a la "lsd -a"
abbr -a lla "lsd -la"
abbr -a lt "lsd --tree --classic"

# Docker 関連のエイリアス
abbr -a dkr "docker"
abbr -a dkrc "docker-compose"

# Git 関連のエイリアス
abbr -a gb  "git branch -vv"
abbr -a gba "git branch -a -v"
abbr -a gsw "git switch"
abbr -a gcm "git commit -m"
abbr -a gd  "git diff"
abbr -a gf  "git fetch"
abbr -a gpl "git pull"
abbr -a gs  "git status"

# diff コマンド
abbr -a diff "colordiff -u"

このあたりはお好みでカスタムしてみましょう。

3.3 魅力的なウェルカムメッセージ

コマンドやキーバインドは使い慣れるまでに苦労します。そのため、シェルを立ち上げた際に出力されるメッセージをカスタムすることですぐに用途を思い出せるようにしています。~/.config/fish/functions/fish_greeting.fish に以下のような関数を記述します。

~/.config/fish/functions/fish_greeting.fish
function fish_greeting
    echo ""
    echo " Welcome to "(set_color cyan)"Fish Shell"(set_color normal)"! "
    echo '   version:' $version
    printf "
      %sCommands%s:
        - cdf  : よく使うディレクトリに移動
        - bd   : 親ディレクトリに戻る
        - gcd  : 現在の Git リポジトリのルートディレクトリへ
        - z    : よく使うディレクトリに移動
        - fd   : ファイルとディレクトリを検索
        - rg   : ファイル内のテキスト検索
        - ghq  : GHQ リポジトリを検索・オープン
        - fzf  : ファジィ検索でファイルとディレクトリを探す
        - bat  : シンタックスハイライト付きでファイルを表示
        - lsd  : ディレクトリ一覧を表示
        - delta: git diff をシンタックスハイライト付きで表示
        - mise : 各種ツールの環境を管理
        - gh   : GitHub CLI
        - vhs  : ターミナルの操作履歴を記録
        - xh   : HTTP リクエストを高速に実行する" (set_color cyan) (set_color normal)
    echo ""
    printf "
      %sKeybindings%s:
        - Ctrl + G: GHQ リポジトリを検索
        - Ctrl + R: コマンド履歴を検索
        - Ctrl + F: ファイル・ディレクトリを検索
        - Ctrl + L: Git ログを検索
        - Ctrl + S: Git ステータスを検索
        - Ctrl + P: プロセスを検索
        - Ctrl + V: 環境変数を検索" (set_color cyan) (set_color normal)
    echo ""
    echo ""
    echo "Type help for instructions on how to use fish"
end

4. Fisher を使ったプラグイン管理

fish のカスタマイズをさらに強化するために、fisher を導入しましょう。fisher は、fishのプラグイン管理ツールであり、以下のコマンドで簡単にインストールできます。

terminal
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

インストール後、さらに便利なプラグインを追加していきます。たとえば:

  • fish-cdf
    よく使うディレクトリへの移動を簡単にするプラグイン

    terminal
    fisher install yuys13/fish-cdf
    
  • fish-autols
    補完機能などを強化するプラグイン

    terminal
    fisher install yuys13/fish-autols
    
  • fzf-fish
    fish と fzf を組み合わせてインタラクティブな検索を実現するプラグイン

    terminal
    fisher install PatrickF1/fzf.fish
    


    デフォルトではキーバインドが Esc と組み合わせる設定になっています。カスタムしたかったのでここ(次のページを参照)を修正しました。
    cf. https://zenn.dev/link/comments/d9c71b750ccc14

  • fish-ghq-fzf
    GHQ で管理しているリポジトリを簡単に検索するためのプラグイン

    terminal
    fisher install yuys13/fish-ghq-fzf
    

また、fzf のプレビュー機能を使って README の内容も確認できるようにする設定もおすすめです。例えば、以下のようにすると、bat コマンドによるシンタックスハイライト付きでファイル内容のプレビューが可能になります。

terminal
fzf --preview "bat --color=always --style=header,grid --line-range :80 {}/README.*" --reverse

その他、fish-fzf-bdfish-gcdfzf.fish といったプラグインも fisher を使って導入できます。自分の環境に合わせて、必要なプラグインを追加・削除しながらカスタマイズしてみてください。

5. Terminal から Web ブラウザのブックマークを操作

今回はついでに、ターミナルから直接 Chrome のブックマークを検索してWebブラウザで表示する設定も追加してみました。以下の関数を ~/.config/fish/functions/chrome-bookmarks.fish に設定してみましょう。

~/.config/fish/functions/chrome-bookmarks.fish
function chrome-bookmarks
    set bookmark_file "$HOME/Library/Application Support/Google/Chrome/Default/Bookmarks"
    if test -f $bookmark_file
        set selected (jq -r '.roots.bookmark_bar.children[] | "\(.name) \(.url)"' $bookmark_file | fzf | awk '{print $NF}')
        if test -n "$selected"
            open "$selected"
        end
    else
        echo "Chrome ブックマークファイルが見つかりません。" >&2
    end
end

さらに、~/.config/fish/conf.d/chrome-bookmarks.fish に以下のようなバインド設定を追加すれば、キーボードショートカットで簡単にブックマークにアクセスできます。

~/.config/fish/conf.d/chrome-bookmarks.fish
bind \cb chrome-bookmarks
bind -M insert \cb chrome-bookmarks

この仕組みにより、ターミナル操作中にも必要なウェブページにすばやくアクセスできるようになります。

6. おわりに

ここまで、fish シェルのインストールから基本設定、エイリアスの設定、便利なプラグインの導入方法、さらにはターミナルから Chrome のブックマークを操作する方法まで、簡単にご紹介してきました。新しいシェル環境に挑戦することで、日々の作業がもっと快適になるはずです。ぜひ、今回の手順を参考に、自分だけのカスタムターミナルを作り上げてみてください。

【参考リンク】

Discussion