サイトアイコン APPSWINGBY Developers Blog

fish shellへ移行して2ヶ月の知見をまとめてみる

bash/zshからfishシエルへ完全移行して、2ヶ月程度立ちました。fishシエルは、あまり設定をしなくても自動で補完してくれたり、便利で非常に満足しています。この2ヶ月触ってきたなかで、溜まってきた知見を紹介したいと思います。

fishへ移行しようと思ったきっかけ

存在自体は、1年前から知っていて、簡単に触ってみたことはあったのですが、“POSIX準拠”でないということが、なかなか導入に踏み切れずにいました。知人などから「使い勝手いいよ!」という話を聞きながら軽く流す日々が続いていました。ちょうど2ヶ月前ごろに、今まで使っていた環境の整理を初めてbash、zshのaliasなんかが煩雑に整理されずにいたので、ちょっと思い切って乗り換えてみようと思ったのがきっかけです。

fishって何?

fishというキーワードでGoogle検索を行うとがヒットします。今回は、魚ではなく「fish shell」の方です。検索する際には、shellまで一緒に入力したほうが良いです。「friendly interactive shell」からとって、fishという名前になっています。名前の付け方からも対話性や、わかりやすさ、ユーザフレンドリーさを重視していることが分かります。fish shellの6つの特徴が記載されています。その中で私が良いなと思っているところは、以下あたりです。

また、fish shell自体は、2004年頃にver1系がリリースされているので、シェルの中ではかなり新しいものです。

fishに親しむ

fishをインストールしましょう。公式ページの下記部分に各OS毎のインストールが紹介されています。

Go fish

Macを利用されている方は、brewコマンドを利用してbrew install fishでインストールできます。インストールが完了したら、Tutorialをやってみると良いです。英語が苦手な方は、日本語版のチュートリアルもありますので、こちらをやって見て下さい。チュートリアルをやってみると、”1時間弱”で一般的なシェルスクリプトの構文やautoloadなどが理解できみます。このチュートリアルは、シンプルですが非常にわかりやすくまとまっています。

bash/zshの設定移行は?

最低限のものだけ移行しました。細かい記載方法の違いがありましたが、そのあたりもチュートリアルを実施した後だとトラブルシュートしながら解決できます。困ったときは、FQAを見ながら解決していきました。この置き換え作業の際にabbrというものがあることを知り感動しました。

abbrとは、Enterキーを押下したあとで展開されるaliasです。下記はマニュアルの説明です。

abbrの説明

設定ファイルにreloadを設定して実際に実行したときの様子です。

aliasよりも優れている点は、下記2つあると思います。

プラグイン管理は?

Fisherというプラグイン管理があります。インストール方法は、下記のようにコマンドで一発です。

curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish

add、rmを引数にしてパッケージの追加、削除を行います。

completions

gitなど様々なコマンドを利用していると補完機能は重要です。

completionsの置き場については、ドキュメントには下記のように記載があります。

fish-shell向けのcompletionsに関しては、GitHubの下記のリポジトリにまとまっています。

fish-shell/share/completions at master · fish-shell/fish-shell · GitHub

gitを例にインストールする手順を示すと、下記のようなコマンドを実行すればOKです。

curl https://raw.githubusercontent.com/fish-shell/fish-shell/master/share/completions/git.fish ~/.config/fish/completions/git.fish

終わりに

今回は、fish shellというシェルについての紹介をしました。POSIX準拠していないという点がネックになるかと思いましたが、いざ置き換えてみるとすごく使いやすいというのが本音です。文法がbashと違いますが、一般的なプログラミング言語と比較してもわかりやすいので、若い方などは、正直、bashを頑張って勉強するよりもfishで覚えるというのも有りかなと思っています。正直、case文を記載する際の終了を表す「easc」なんかも、コードを書いていると直感的な感じがしないので、書きづらいと思うことが多くありました。導入ハードル自体も比較的高くないので、今後も利用者は増えていくのではないかと思っています。

モバイルバージョンを終了