2 ポイント 投稿者 GN⁺ 2023-08-28 | 2件のコメント | WhatsAppで共有
  • 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_config Web 設定ツールには Python 3.5+ が必要
    • システムクリップボード統合には xselxclipwl-copy/wl-pastepbcopy/pbpaste のいずれかが必要
    • yarnnpm の完全な補完には all-the-package-names NPM モジュールが必要
  • ソースビルドには Rust 1.85 以上、CMake 3.15 以上、C コンパイラが必要で、PCRE2 と gettext はオプション依存関係として扱われる
  • CMake ビルドと Cargo ビルドの両方をサポートし、Cargo ビルドはスタンドアロンバイナリを ~/.cargo/bin/ に配置し、CMake の完全インストールでは標準位置の man ページ、HTML ドキュメントのローカルコピー、追加の関数・補完・設定ディレクトリオプションを提供する

2件のコメント

 
joyfui 2023-08-28

今はzshを使っていますが、次に機会があれば一度fishも使ってみたいです。

 
GN⁺ 2023-08-28
Hacker News の意見
  • fish の最大の利点は、設定がほとんど必要ないこと。41歳で家族もいるので、ツールの設定に時間を無駄にする忍耐はまったくないし、zsh は使えるようにしようとするたびに邪魔をしてくる感じだった。
    いくつもの zsh スクリプトも堅牢とは言い難く、シェルを頻繁に使っていると、出どころがたいていコピペのユーザースクリプト群では処理できていない境界ケースに結局ぶつかる。
    私の fish dotfiles は https://github.com/mattgreen/dotfiles/tree/master/fish で、サブモジュールベースのプラグインシステム、非同期 git プロンプト、エイリアス、いくつかの環境変数がある程度。
    fish がすでにほとんど全部提供してくれるのでメンテナンスは不要で、今望んでいるのは、状態追跡の都合上ユーザーコードよりシェルが担うほうがよい非同期プロンプトを一級機能にすることだけ。

    • bash を使っていて、ツールの設定にも忍耐がないけれど、その fish dotfiles は自分の bash 設定より複雑に見える。以前、チームの他のエンジニアが fish をよく使っていたが、bash でできないことを fish がやってのけるのは見たことがなく、少し派手に見える程度だった。
      もっと腹立たしかったのは、彼らが助けを求めてきたとき、私が教えたコマンドが fish ではひとつも通らず、トラブルシューティングが非常に遅くなったこと
    • ほぼ10年前に zsh の初期設定ウィザードを一度だけ通した[1]。所要時間は5〜10分くらい。各コマンドが何を意味するのか完全には理解していないが、その後は修正したことがなく、問題なく動いている。
      残りの zsh 設定の大半はプロンプトユーティリティと、数年かけて追加したものだが、プラグインは使っていないし必要もない。必要だったなら、以前試した zplug は設定も使用も本当に簡単だった。
      [1]: https://github.com/mid-kid/config/blob/master/shell/.zshrc#L...
    • ほとんど全部同意する。仕事の都合で /bin/sh 互換スクリプトを書かなければならなかったのでなければ、似た理由で Fish に乗り換えていたと思う。
      ユーザー体験の観点では他のシェルを圧倒的にリードしていて、Mac のような OS でデフォルト採用されていないのが驚くほど。Fish なら家族にターミナル作業を案内しても誰もイライラしたり諦めたりしないが、他のシェルではそうは言いにくい。
    • zsh 設定がいつも自分の邪魔をするという点は、oh-my-zsh が救ってくれた。設定の大半を omz に委ねるごく小さな dotfile だけを置き、新しいマシンごとに clone する bare repo に入れている。
      数年前、欲しいプラグインを選んで repo を作るのに1時間ほどかかったが、今では新しいマシンは5〜10分で準備できる。
    • すでに zsh を気に入るように設定してあるなら、fish に変えたときにどんな改善や変化があるのか気になる。
  • Fish をログインシェルとして10年以上使っていて、他の人と違ってスクリプティングにも使っている。簡単な作業では bash より落とし穴が少ないので、スクリプト作成がずっと快適。
    オンラインの説明を読むとき、bash の例を fish に移すのは些細なこと。それを問題だと言われるのは理解できないし、実際一度も困ったことがない。

    • スクリプティングにもっと頻繁に使うのを妨げている点がひとつあって、bash の set -e のようなエラー時の失敗モードがないこと。すべての場合、たとえば pipefail までうまく動かすのが難しいのは分かるが、この機能なしで多くのスクリプトを書きたいとは思わない。
  • fish を5年ほど使っていて、もう戻りたいとは思わない。追加機能をまったく入れなくても、パッケージマネージャーやプラグインまで付けていた以前の zsh 設定がやっていたことを、標準状態ですべてやってくれる。
    変えたのは spacefish、今は starship.rs を追加したことだけ。

    • 私も同じ流れだったが、最近は Tide プロンプトに移った。純粋な fish でできていて、本当に驚くほど速い。
    • z も試す価値がある。それから今は設定を見られないが、長時間走るバックグラウンドコマンドが終わると知らせてくれるプラグインがあり、かなり便利。
    • starship を何に使っているのか気になる。面白そうには見えるが、潜在力をきちんと使うにはどんな想像力が必要なのかよく分からない。
    • 逆方向検索はもうサポートされている? 自動補完には興味がない。
    • 既存のスクリプトを fish に変換する必要があった? それとも自動化された方法がある?
  • 久しぶりなので、関連スレッドを集めてみた。ほかにもあるかな?
    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 連携だけを追加している

    • bash でも普通その2つはやらない?
    • starship.rs はなぜ必要?
  • 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 を使えばいいのでは?
    • 対話的な作業は fish で、スクリプト作成は bash でやっている。bash で書きたくないスクリプトなら Python や Ruby のような本物のプログラミング言語を使う
    • 条件文やループを書かない限り、bash ではないことをほとんど感じないはず
      個人的にはシェルにそこまで複雑なものはほとんど入れず、その段階まで行ったらスクリプトに切り出す
    • bass を使うと、切り替える必要性はあまり感じなかった
      https://github.com/edc/bass
    • それは失敗ではなく fish の核心。POSIX 互換性を捨てずにまともなシェルスクリプト言語を作ることはできない
  • fish は使っていないが、zsh にはまだ再現されていない素晴らしい機能が1つある。man ページから自動補完を生成し、ほぼすべてのプログラムについて基本的なフラグ補完を自動で得られる