fish とは
fish は賢くて親しみやすいコマンドラインシェルです。履歴と補完から入力中のコマンドを提案し、書いているそばから構文を色付けし、インストール済みの man ページから補完を生成し、他のシェルが引きずってきた難解なクォート規則を捨てました。しかも全部が最初から動きます。fish を快適に使うために、あらかじめ書く設定はありません。
⚡ fish の主な機能
💡 入力候補の自動表示
入力していくと、fish が履歴と補完からコマンドの続きを提案します。→ キーで受け入れられます。
🎨 シンタックスハイライト
書いている端から色が付くので、打ち間違いや閉じ忘れの引用符が Enter を押す前に分かります。
⌨️ man ページからの補完
fish はインストール済みの man ページを解析して補完を作ります。だからマイナーなツールでもオプションが補完されます。
🧠 まともに書けるスクリプト
単語分割の思わぬ罠も、[[ ]] と [ ] の使い分けもありません。本物のリストがあります。スクリプトは、振る舞いのとおりに読めます。
🔍 検索できる履歴
先頭の数文字を打って ↑ を押せば、一致するコマンドだけをたどれます。部分一致検索も内蔵しています。
🛠️ ブラウザから設定できる
fish_config がプロンプト、配色、関数、キーバインドの UI を開きます。dotfile を掘り返す必要はありません。
apt upgrade を実行するだけで、常に最新版を使い続けられます。
📦 deb.griffo.io からインストールする
ステップ 1: リポジトリを追加する
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt update🆓 ずっと無料のミラーがあります。 deb-free.griffo.io は、アカウントもサブスクリプションもなしでパッケージをずっと無料で配布しています。上流より最大2か月遅れ、セキュリティ修正は即座に公開されます。現在収録しているのは cliamp、Ghostty、lazydocker、Oh My Posh と Zed です。fish は含まれていないため、今日入手する方法は上のリポジトリだけですが、ご要望があれば追加できます。
ステップ 2: fish をインストールする
# 最新の fish をインストール
sudo apt install fish
# インストールを確認
fish --version# 最新の fish をインストール
apt install fish
# インストールを確認
fish --versionステップ 3: fish をログインシェルにする
# fish をログインシェルにする(パッケージが /etc/shells に登録済みです)
chsh -s /usr/bin/fish
# あるいは、このセッションだけで起動する
exec fish
# プロンプト、配色、キーバインドを調整
fish_config🎯 基本的な使い方
日々の対話的な使い方:
# 薄く表示された補完候補を受け入れる
→ # または Ctrl-F
# git で始まるコマンドを履歴から検索
git↑
# cd と打たずにディレクトリへジャンプ
/etc/apt
# ブラウザベースの設定画面を開く
fish_config落とし穴のないスクリプト:
# リストは本物のリスト。単語分割は起きません
set files *.txt; echo (count $files) files
# コマンド置換にバッククォートは不要
echo "today is "(date +%A)
# 条件分岐が英語のように読める
if test -f /etc/os-release; echo found; end
# リストを繰り返し処理
for f in *.md; echo processing $f; end自分のものにする:
# 関数を定義して、次回のために保存
function ll; ls -lh $argv; end; funcsave ll
# エイリアスと違い、略語は打ちながら展開されます
abbr -a gco git checkout
# dotfile を編集せずに、恒久的に PATH へ追加
fish_add_path ~/.local/bin
# すべての fish セッションで共有される universal 変数を設定
set -U EDITOR nvim🔧 相性のいいツール
fish は、現代的なターミナル環境の一級市民です:
- starship: fish をネイティブにサポートする、シェルを問わないプロンプト
- zoxide:
zoxide init fishで、frecency 順にディレクトリを移動 - fzf: 履歴検索とファイル検索の fish キーバインドを同梱
- atuin: fish の履歴を、検索できて同期されるデータベースに置き換えます
- Oh My Posh: fish 用の初期化を持つ、もうひとつのプロンプトエンジン
🚀 deb.griffo.io を選ぶ理由
- 公式 Ubuntu: 提供はあるが、リリース時点のバージョンで固定
- 手動インストール: Rust ツールチェインと CMake、あるいはバイナリの手動管理が必要
- deb.griffo.io: 最新版を自動更新でお届け
- ✅ 最新の機能: 対話まわりの最新の改善と性能改善
- ✅ セットアップ不要: ビルド済みバイナリなので、cargo build は要りません
- ✅ 自動更新: 上流のリリースから数時間以内にパッケージを更新
- ✅ 全部入り:
fish、fish_indent、fish_key_readerと man ページ - ✅ 依存なし: 静的リンクの musl ビルド。関数と補完は埋め込み済みなので、fish-common を入れる必要はありません
- ✅ マルチディストリビューション: Ubuntu 22.04、24.04、25.10、26.04 で動作
- ✅ 手間のかからない運用: 更新は通常の apt コマンドだけ
📦 パッケージのビルドリポジトリ
Ubuntu パッケージは、この GitHub リポジトリで自動的にビルド・管理されています:
- 🐟 fish-shell-debian - 最新リリースのビルド
🔗 関連パッケージ
deb.griffo.io では、こちらも配布しています:
- Starship - fish をネイティブにサポートする、シェルを問わないプロンプト
- zoxide - fish 用の初期化を備えた、より賢い cd
- fzf - fish のキーバインドを備えたファジーファインダー
- Atuin - ちゃんと検索できるシェル履歴