Fish Shell 4.0 リリース:コアが Rust で書き直されるもユーザーへの影響なし

BigGo Editorial Team
Fish Shell 4.0 リリース:コアが Rust で書き直されるもユーザーへの影響なし

人気の Fish シェルがバージョン 4.0.0 に到達し、コアコードが完全に Rust で書き直されるという重要な節目を迎えました。2025年2月27日にリリースされたこの大型アップデートは、200人以上の貢献者による2,600以上のコミットにわたる約2年間の開発作業を表しています。

Rust への書き換え

Fish 4.0 の最も注目すべき変更点は、そのコアコードが C++ から Rust へと完全に書き換えられたことです。この大規模な取り組みでは、1,155ファイルが変更され、110,000行以上の追加と約89,000行の削除が行われました。この変更の規模にもかかわらず、Fish チームは、ユーザーへの直接的な影響はないはずだと強調しています。これは、包括的な書き換えを考えると驚くべき成果です。

「これはかなり印象的です。Fish のコア全体を書き換えたにもかかわらず、すべてが正確に同じ方法で動作し続けています(彼らがリストアップしているごくわずかなマイナーな変更点を除いて)。」

書き換えられたコードベースは、約55,000行の C++ から75,000行の Rust に成長しました。コミュニティの議論によると、この増加の多くは Rust のフォーマット設定の好みによるもので、コードが複数行に分散される傾向があること、また新機能の追加によるものとされています。一部のユーザーは、Rust バージョンのビルドがわずかに遅くなり、バイナリが大きくなっていることを指摘しています。C++ バージョンの約2.4 MB と比較して、約4.3 MB になっています。

Fish 4.0 vs 3.x 比較

機能 Fish 4.0 Fish 3.x
コア言語 Rust C++
コードサイズ 約75,000行 約55,000行
バイナリサイズ 4.3 MB 2.4 MB
ビルド時間(リリース) 約37秒 約23秒
依存関係 Rust 1.70+, Cコンパイラ C++コンパイラ, Cコンパイラ
ncurses依存 いいえ(terminfo必要) はい

Fish 4.0の主な変更点

  • 新しいキー表記システム
  • コマンド位置にあるサブコマンドキーワードに展開される変数が禁止に
  • qmark-noglobが標準で有効化(?は単一文字グロブとして機能しなくなる)
  • XTerm の modifyOtherKeys キーボードエンコーディングと kitty キーボードプロトコルが要求されるようになった
  • Webコンフィギュレーションが Alpine.js を使用して書き直された

ユーザーが Fish を愛する理由

Fish は主に、設定不要ですぐに使える直感的な機能で人気を集めています。コミュニティの議論では、このシェルの優れた自動補完システムが最も評価されている機能であり、手動での設定が不要であることが強調されています。その他にも、合理化されたテーマ/プロンプトシステムや、 oh-my-fish を通じたプラグイン管理などが称賛されています。

多くのユーザーは、対話型シェルの使用には Fish を継続して使用する一方で、ポータビリティのために Bash や POSIX シェルでスクリプトを書き続けていると述べています。このハイブリッドアプローチにより、Fish のユーザーフレンドリーな機能の恩恵を受けながら、Fish がインストールされていないシステムとの互換性を維持することができます。

互換性に関する考慮事項

議論で頻繁に取り上げられる点は、構文の違いにより Bash コマンドを Fish にコピーする際に時々摩擦が生じることです。一部のユーザーは、Fish に貼り付けられた Bash コマンドを永続的な Bash インスタンスを通じて自動的にルーティングするスクリプトなど、創造的な回避策を開発しています。

また、書き換えにより、新しいキー表記システム、コマンド位置での変数処理の変更、qmark-noglob 機能をデフォルトで有効にする(? が単一文字のグロブとして機能しなくなる)など、いくつかの後方互換性のない変更が生じています。さらに、Fish は XTerm の modifyOtherKeys キーボードエンコーディングと kitty キーボードプロトコルの段階的な拡張を要求するようになりました。

ディストリビューターと開発者向け

Rust への移行は、依存関係に大きな変化をもたらします。Fish は現在 Rust 1.70 以上を必要とし、C++ コンパイラは不要になりました(ただし、一部のグルーコードとテストには C コンパイラが引き続き必要です)。CMake は推奨ビルドシステムであり、バージョン3.5が最小サポートバージョンとなっています。

もう一つの注目すべき変更点は、Fish が ncurses ライブラリに依存しなくなったことですが、terminfo データベースは引き続き使用しています。パッケージ作成者は、curses の代わりに terminfo データベースを含むパッケージへの依存関係を追加することが推奨されています。

Web ベースの設定も Alpine.js を使用して書き直され、コアの書き換えと並んで別の最新化の取り組みを表しています。

Fish 4.0 が様々なパッケージマネージャーとプラットフォームに展開される中、このソフトウェアが人気を博した元のユーザーエクスペリエンスを維持しながら、大規模な書き換えがどのように達成できるかという印象的な例となっています。Fish を試してみようと考えているユーザーや以前のバージョンからアップグレードするユーザーにとって、内部で大幅な変更があったにもかかわらず、移行は非常にスムーズなはずです。

参考:fish 4.0.0(2025年2月27日リリース)