Fish - 親しみやすいインタラクティブシェル
(github.com/fish-shell)- fish は macOS、Linux および関連ファミリーで動作するユーザーフレンドリーなコマンドラインシェルで、追加設定なしで構文ハイライト、入力中の自動提案、タブ補完を提供する
- bash や zsh のような他のシェルとおおむね似たように動作するが、「unlike other shells」で見つけられる主な違いは公式チュートリアルにまとめられている
- インストール方法はプラットフォームごとに分かれており、macOS では Homebrew、MacPorts、fishshell.com のインストーラー、スタンドアロンアプリをサポートする
- macOS の最小サポートバージョンは 10.12
- Linux 向けの Debian、Fedora、openSUSE、Red Hat Enterprise Linux/CentOS パッケージは openSUSE Build Service で提供される
- Ubuntu パッケージは fish PPA 経由でインストールできる
- Windows 10/11 では WSL の Linux ディストリビューション手順またはソースビルドでインストールでき、すべての Windows バージョンでは Cygwin または MSYS2 によるインストールをサポートする
- インストール後は現在のシェルで
fishを実行して使い始める方式で、fish 内のhelpコマンドと公式ドキュメントでユーザー向け文書を確認できる - 実行には基本的な POSIX ユーティリティと
mktempなど一般的な *nix システムユーティリティが必要で、一部のオプション機能は別途ツールを必要とする- man ページベースの自動補完生成と
fish_configWeb 設定ツールには Python 3.5+ が必要 - システムクリップボード統合には
xsel、xclip、wl-copy/wl-paste、pbcopy/pbpasteのいずれかが必要 yarnとnpmの完全な補完にはall-the-package-namesNPM モジュールが必要
- man ページベースの自動補完生成と
- ソースビルドには Rust 1.85 以上、CMake 3.15 以上、C コンパイラが必要で、PCRE2 と gettext はオプション依存関係として扱われる
- CMake ビルドと Cargo ビルドの両方をサポートし、Cargo ビルドはスタンドアロンバイナリを
~/.cargo/bin/に配置し、CMake の完全インストールでは標準位置の man ページ、HTML ドキュメントのローカルコピー、追加の関数・補完・設定ディレクトリオプションを提供する
2件のコメント
今はzshを使っていますが、次に機会があれば一度fishも使ってみたいです。
Hacker News の意見
fish の最大の利点は、設定がほとんど必要ないこと。41歳で家族もいるので、ツールの設定に時間を無駄にする忍耐はまったくないし、zsh は使えるようにしようとするたびに邪魔をしてくる感じだった。
いくつもの zsh スクリプトも堅牢とは言い難く、シェルを頻繁に使っていると、出どころがたいていコピペのユーザースクリプト群では処理できていない境界ケースに結局ぶつかる。
私の fish dotfiles は https://github.com/mattgreen/dotfiles/tree/master/fish で、サブモジュールベースのプラグインシステム、非同期 git プロンプト、エイリアス、いくつかの環境変数がある程度。
fish がすでにほとんど全部提供してくれるのでメンテナンスは不要で、今望んでいるのは、状態追跡の都合上ユーザーコードよりシェルが担うほうがよい非同期プロンプトを一級機能にすることだけ。
もっと腹立たしかったのは、彼らが助けを求めてきたとき、私が教えたコマンドが fish ではひとつも通らず、トラブルシューティングが非常に遅くなったこと。
残りの zsh 設定の大半はプロンプトユーティリティと、数年かけて追加したものだが、プラグインは使っていないし必要もない。必要だったなら、以前試した zplug は設定も使用も本当に簡単だった。
[1]: https://github.com/mid-kid/config/blob/master/shell/.zshrc#L...
/bin/sh互換スクリプトを書かなければならなかったのでなければ、似た理由で Fish に乗り換えていたと思う。ユーザー体験の観点では他のシェルを圧倒的にリードしていて、Mac のような OS でデフォルト採用されていないのが驚くほど。Fish なら家族にターミナル作業を案内しても誰もイライラしたり諦めたりしないが、他のシェルではそうは言いにくい。
数年前、欲しいプラグインを選んで repo を作るのに1時間ほどかかったが、今では新しいマシンは5〜10分で準備できる。
Fish をログインシェルとして10年以上使っていて、他の人と違ってスクリプティングにも使っている。簡単な作業では bash より落とし穴が少ないので、スクリプト作成がずっと快適。
オンラインの説明を読むとき、bash の例を fish に移すのは些細なこと。それを問題だと言われるのは理解できないし、実際一度も困ったことがない。
set -eのようなエラー時の失敗モードがないこと。すべての場合、たとえば pipefail までうまく動かすのが難しいのは分かるが、この機能なしで多くのスクリプトを書きたいとは思わない。fish を5年ほど使っていて、もう戻りたいとは思わない。追加機能をまったく入れなくても、パッケージマネージャーやプラグインまで付けていた以前の zsh 設定がやっていたことを、標準状態ですべてやってくれる。
変えたのは spacefish、今は starship.rs を追加したことだけ。
zも試す価値がある。それから今は設定を見られないが、長時間走るバックグラウンドコマンドが終わると知らせてくれるプラグインがあり、かなり便利。久しぶりなので、関連スレッドを集めてみた。ほかにもあるかな?
What's Happening with Fish Releases? - https://news.ycombinator.com/item?id=36875727 - 2023年7月
My shell setup with Fish and Tmux (2021) - https://news.ycombinator.com/item?id=35672358 - 2023年4月
Ask HN: Are alternative (oil, nu, etc.) shells usable as daily drivers? - https://news.ycombinator.com/item?id=34722208 - 2023年2月
Rewrite it in Rust - https://news.ycombinator.com/item?id=34588340 - 2023年1月
Fish 3.6.0 - https://news.ycombinator.com/item?id=34298157 - 2023年1月
Fish Shell 3.5.0 - https://news.ycombinator.com/item?id=31768405 - 2022年6月
Fish 3.4.0 - https://news.ycombinator.com/item?id=30734072 - 2022年3月
Fish 3.4.0 Released - https://news.ycombinator.com/item?id=30660587 - 2022年3月
Ask HN: Oil or Fish Shell? - https://news.ycombinator.com/item?id=30154652 - 2022年1月
The fish shell is amazing - https://news.ycombinator.com/item?id=29341390 - 2021年11月
Nsh: A fish/bash-like Posix shell in Rust - https://news.ycombinator.com/item?id=28967257 - 2021年10月
Fish Shell 3.3 - https://news.ycombinator.com/item?id=27663637 - 2021年6月
Fish shell - https://news.ycombinator.com/item?id=27180420 - 2021年5月
Fish Shell 3.2 - https://news.ycombinator.com/item?id=26302678 - 2021年3月
Fish is not operational on a VT220 terminal (2015) - https://news.ycombinator.com/item?id=25526237 - 2020年12月
New Features in the Fish Shell - https://news.ycombinator.com/item?id=24631138 - 2020年9月
Dolphins learn from their peers to use empty shells to catch fish - https://news.ycombinator.com/item?id=23660910 - 2020年6月
Fish Shell 3.1.0 - https://news.ycombinator.com/item?id=22314671 - 2020年2月
Fish: A command line shell for the 90s - https://news.ycombinator.com/item?id=21361696 - 2019年10月
Show HN: Fisher 3.0 – the package manager for the fish-shell - https://news.ycombinator.com/item?id=18920972 - 2019年1月
Fish shell 3.0 - https://news.ycombinator.com/item?id=18776765 - 2018年12月
Fish: A user-friendly command line shell for macOS, Linux, etc - https://news.ycombinator.com/item?id=15910897 - 2017年12月
Fish (Shell) for a Week - https://news.ycombinator.com/item?id=14422672 - 2017年5月
Why I'm Hooked on Fish Shell (and How to Set It Up Right) - https://news.ycombinator.com/item?id=14417046 - 2017年5月
The fish shell is awesome - https://news.ycombinator.com/item?id=14179081 - 2017年4月
Fish Shell Design Principles - https://news.ycombinator.com/item?id=11102941 - 2016年2月
Fish shell 2.2 - https://news.ycombinator.com/item?id=9873090 - 2015年7月
Fish shell - https://news.ycombinator.com/item?id=9566441 - 2015年5月
FISH Shell: A dynamic shell - https://news.ycombinator.com/item?id=8783150 - 2014年12月
Fish shell 2.1 - https://news.ycombinator.com/item?id=6626635 - 2013年10月
fish shell - https://news.ycombinator.com/item?id=6224524 - 2013年8月
Fish shell 2.0 - https://news.ycombinator.com/item?id=5723235 - 2013年5月
Fish 2.0 shell beta - https://news.ycombinator.com/item?id=5567639 - 2013年4月
Fish: Finally, a command line shell for the 90s - https://news.ycombinator.com/item?id=4073162 - 2012年6月
Fish sucks (but your shell sucks more) - https://news.ycombinator.com/item?id=2031110 - 2010年12月
Fish - The friendly interactive shell - https://news.ycombinator.com/item?id=820677 - 2009年9月
Fish Shell: A User-Friendly Shell or Like a Heavily Customized zsh - https://news.ycombinator.com/item?id=811113 - 2009年9月
https://news.ycombinator.com/item?id=23660910 は、誰が見ているのか確認するための罠リンクかもしれない :)
zsh は一時期使ってみたが、デフォルト状態では実質的に bash と似ていて、利点を感じるには時間をかけてカスタマイズする必要があるという印象だった。シェル設定に時間を使いたくなく、ただすぐ動いてほしい
Fish は何の設定をしなくても bash より明らかに良く、魔法のような自動補完は人生を変えるほど
大学時代に Ubuntu で fish を使っていて、初めての職場でもらった MacBook も fish に設定した。DevOps 担当者が1人だけだったが、アプリ設定ドキュメントとスクリプトは zsh や bash 向けだけで、正直 zsh に変えてもいいと思っていた
ところがその人は止めてくれて、半日かけて fish を学び、ドキュメントにfish スクリプトまで全部追加してくれた。本当にありがたい人だ
fish が良いのは、プラグインをインストールしなくても最初からかなり多くの便利機能を提供している点。そこに starship.rs と fzf 連携だけを追加している
fish のタグラインがとても気に入っていて、かなり面白い。しばらく使ってみて十分良かったが、開発戦略として設定可能なオプションを明示的に避けている
いくつかずっと気になる点があったが、動作を変える方法がなかったので zsh に移り、fish のように動きつつ自分の望む形にした。自分にとっては良い判断だったし、おすすめできる。oh-my-zsh やプラグインマネージャもあまり好きではない
fish、zsh、今では elvish も使っているが、自分にとって重要なのは自動提案と上矢印で履歴を呼び出す機能。zsh には自動提案モジュールがあり、elvish には上矢印履歴があるが、先頭部分だけ一致する
だから依然として fish が先行していて、elvish はコマンドを入力して上矢印を1回押すのがほぼ自動提案のように感じられるので2番手。zsh でそれをする方法は見つけられず、ブロック処理も伝統的な sh 系のスタイルより fish と elvish の方式のほうが良い
fish の最大の失敗はbash 互換ではないこと。bash にあまりにも慣れているし、会社のシステムの中には bash しか使えず fish をインストールできないところもあるので、乗り換えたくない
異なるスクリプト言語を行き来し続けるのは苦痛で、筋肉記憶で楽に扱えるようにはならないだろう
#!/bin/bashを入れてスクリプト作成は bash のまま続け、対話型シェルだけ fish を使えばいいのでは?個人的にはシェルにそこまで複雑なものはほとんど入れず、その段階まで行ったらスクリプトに切り出す
bassを使うと、切り替える必要性はあまり感じなかったhttps://github.com/edc/bass
fish は使っていないが、zsh にはまだ再現されていない素晴らしい機能が1つある。man ページから自動補完を生成し、ほぼすべてのプログラムについて基本的なフラグ補完を自動で得られる