Fishシェルでより良いLinux体験

過去の暗号化されたコマンドと厳密な構文の日々は終わりました。システムのスクリプト化やナビゲーションよりもmanページの解読に時間を費やすのはなぜですか?よりスムーズで直感的なLinux体験へのチケットとして、fishシェルの力とシンプルさを受け入れてください。

ユーザーフレンドリーなインターフェースから豊富なカスタマイズオプションまで、fishシェルでLinuxの旅を変革しましょう。

効率的なワークフローとLinuxスキルへの新たな自信を手に入れましょう!

前提条件

始める前に、このチュートリアルに沿って進むために以下の必要事項を確認してください:

  • お使いのマシンにFish Shellがインストールされています – このチュートリアルでは、執筆時点で最新のバージョンであるfish-3.7.0を使用しています。
  • A Linux system – This tutorial uses an Ubuntu 22.04 LTS for demonstrations, but other distributions will work.

コマンドの検証、オートコンプリート、および提案の探索

fishシェルをインストールしたら、シームレスなコマンド実行のためにfishシェルに飛び込みます。fishシェルは、コマンド、ファイル名、および引数に対するリアルタイムのフィードバックとコンテキストに応じた提案を提供します。

しかし、コマンドの検証、オートコンプリート、提案を覗く前に、まずfishシェルにアクセスする必要があります。

これを実行するには、以下の手順を実行して、エラーを特定して修正する機能を探索してください:

1. ターミナルを開いて、fish コマンドを実行して、fishシェルにアクセスします。

fish
Accessing the fish shell

2. 次に、現在のディレクトリ内のすべてのファイルをリストしようとするために、ls コマンドの最初の文字を入力します。

下記のように、’l’という文字が赤く表示されます。これはfishシェルがそれを有効なコマンドとして認識していないことを示しています。この即座の視覚的な手掛かりは、何かが間違っていることを示しています。

しかし心配しないでください!オートサジェストのおかげで、’s’という文字が静かに表示され、正しいコマンドのヒントになります。

Testing command validation

3. 今、右矢印キーまたはCtrl+Fキーを押して、オートサジェストされたlsコマンドを受け入れます。

文字 ‘l’ が赤から青に変わりました。これは、fishシェルがあなたのコマンドをlsとして認識したことを示しています。

Accepting the auto-suggested command

fish構成ファイルでコマンドエイリアスを定義する

リアルタイムのフィードバックとコンテキストに応じた提案に加えて、fishはコマンドライン環境をカスタマイズする強力で柔軟な方法を提供しています。それが、fish構成ファイルです。他のシェルが複数の構成ファイルを使用する可能性があるのに対し、fishは主に~/.config/fish/ディレクトリ内にあるconfig.fishという1つのファイルを使用します。

構成がfishシェルにどのように影響するかを確認するには、次のようにコマンドエイリアスを定義してみてください。

1. お好みのコードエディタやテキストエディタ(このチュートリアルでは前者を使用)を使用して、fish構成ファイルを開きます。

nano ~/.config/fish/config.fish

開いたら、魚のシェルの設定ファイルの初期コンテンツが表示されます。これにはデフォルトの設定が含まれているか、比較的空になっている場合があります。この初期状態は、以前に設定が追加されているかどうかによって異なります。

ファイルにはコメントや新しいインストールのための基本的な条件付きブロックのみが含まれる可能性があります。次のようなものです。

Opening the fish configuration file

2. if ブロックの中に、次の function を追加し、変更を保存してエディターを閉じます。

この時点で、魚の設定ファイルでカスタム設定を作成しており、この関数は c のエイリアス(clear コマンド)を定義しています。

# この関数は "clear" コマンドのエイリアスを作成します
function c
    clear
end

? 注意: 各定義された関数には、~/.config/fish/functions/ ディレクトリに対応する .fish ファイルがあります(つまり、c.fish)。

Creating an alias for the clear command

3. 次のコマンドを実行して、設定ファイル(config.fish)を source します。

このコマンドは端末に出力はありませんが、設定変更は現在のセッションに適用されます。

? このfishの設定ファイルは、新しいfishセッションが開始されるたびに自動的に実行され、シェルのカスタマイズを定義するのに最適な場所です。

source ~/.config/fish/config.fish

4. 次に、プロンプトでcを入力して、変更を確認します。

c‘という文字が青くなるのに注意してください。これは、fishシェルがそれをclearコマンドとして認識していることを示しています。この動作は、fishの設定が正常に変更されたことを示します。

c’という文字が青くなるのを見てください。この変更は、fishシェルが‘c’をclearコマンドとして認識しているためです。この動作は、fishの設定が正常に更新されたことを示しています。

さて、気分が向いたときに常に戻ってくる信頼できるコマンドのいくつかのエイリアスを設定してみませんか?

Verifying the newly created alias for the clear command works

Fishシェルプロンプトのカスタマイズ

よりスムーズな操作のためにエイリアスを設定するだけでなく、fishはシェルに個人のタッチを追加することでプロンプトをカスタマイズする力を与えてくれます。長いディレクトリパスの代わりに、よりクリーンで整理されたプロンプトをお楽しみください。

fishシェルプロンプトをカスタマイズするには、以下の手順を実行します。

1. fishの設定ファイル(~/.config/fish/config.fish)を開き、次の関数を追加します。

この関数は、fishシェルプロンプトをカスタマイズして、ドル記号($)の後にスペースを表示します。

# フィッシュのプロンプトをカスタマイズする
function fish_prompt
    echo '$ '
end
Customizing the fish shell prompt

2. 変更内容をフィッシュの設定ファイルに保存して、エディターを終了します。

3. 今度は、変更内容を適用するために設定ファイルをsourceします。

source ~/.config/fish/config.fish

ソース化されると、次のスクリーンショットのようにプロンプトの変更が表示されます。

Sourcing the fish configuration file to apply the shell prompt changes

セッション間の変更の永続化

フィッシュシェルでのカスタマイズの作成方法を見てきましたが、ひとつ注意しておくことがあります:これらの設定は現在のセッションでのみ利用可能です。

現在のセッションを閉じて新しいセッションを開くとどうなるか? ふっとんでしまいます! 丹念に作り上げた設定がすべてなくなってしまいます — がっかりですね? しかし、心配しないでください、救いがあります。 設定を忘却から救い出すためにfuncsaveコマンドを活用しましょう!

セッション間で設定を永続化するには、次の手順に従ってください:

1. フィッシュの設定ファイルを開き、funcsaveコマンドを各functionに関数名と一緒に追加します。 例:

Appending the funcsave command to persist functions across sessions

2. 変更内容を保存し、エディターと端末を閉じます。

3. 新しい端末セッションを開き、以下のfishコマンドを実行してフィッシュシェルにアクセスします

fish

funcsaveコマンドが機能して設定を永続化する場合、以下のようなメッセージが表示されます。

Accessing the fish shell to verify the configurations persist across sessions

環境変数の設定と永続化

永続化関数は素晴らしいですが、グローバルにアクセス可能な値を管理すると、シェルスクリプティングが向上します。環境変数を設定します。従来のシェルは export を使用しますが、fish は変数のスコープとエクスポート動作を制御するオプションを使用して set を使います。

しかし、落とし穴がありますね。あなたは知っていましたか?そうです、それを当てました!ターミナルで set コマンドを使って設定された変数は、現在のセッションでのみアクセス可能です。

環境変数を設定して永続化するには、-gx フラグが役立ちます。以下は、-gx フラグの動作方法です:

1. fish の設定ファイルに MY_VARIABLE 変数をグローバルに設定するための以下のコマンドを追加します。以下は、-gx フラグの動作方法です:

  • -g – 変数をグローバルにし、同じユーザー環境内のどのスコープからでもアクセス可能にします。
  • -x – 変数をエクスポートし、fish から起動された外部コマンドやプログラムで利用可能にします。
# MY_VARIABLE をグローバルに設定してエクスポートします
set -gx MY_VARIABLE HelloWorld
Setting an environment variable in the fish configuration file

2. 設定変更を保存し、エディタとターミナルを閉じます。

3. 新しいターミナルセッションを開き、fish シェルにアクセスし、以下のコマンドを実行して変更を確認します。

echo $MY_VARIABLE

以下の出力は、セッション間で変更が有効になったことを確認しています。

Verifying variable persistence

4. 確認したら、次のsetコマンドをfish設定ファイルに追加し、変更を保存してエディターを閉じます。

このコマンドにより、MY_UNIVERSAL_VARIABLE変数が再起動後もすべてのセッションでグローバルになります。

# MY_UNIVERSAL_VARIABLEをuniversalに設定し、それをエクスポートします
set -Ux MY_UNIVERSAL_VARIABLE universal

以下で-Uxフラグがどのように機能するかを確認してください。

  • -UMY_UNIVERSAL_VARIABLE変数をuniversalにし、現在のおよび将来のすべての端末セッションで共有されるようにします。これには、異なるユーザーのセッションも含まれます。
  • -x – 変数は子プロセスにエクスポートされ、現在のセッションから呼び出されたコマンドやスクリプトからアクセスできるようになります。
Setting a universal environment variable in the fish configuration file

5. 新しい端末セッションを開き、fishシェルにアクセスし、以下のechoコマンドを実行して変更を確認します。

echo $MY_UNIVERSAL_VARIABLE

すべてが順調にいけば、次の出力が表示され、セッション間で変更が有効になったことが示されます。

Verifying universal variable persistence

? fish設定ファイル以外に、ターミナルでfish_configを活用して、迅速かつ自動的にカスタマイズを行います。このコマンドは、ブラウザーでウェブインターフェースを起動し、プロンプトの調整、設定の微調整、およびユーザーフレンドリーなセットアップでの関数および変数の管理を可能にします。

Fisherパッケージマネージャーを使用したFishプラグインの管理

魚のシェルはそれ自体で印象的ですよね?でもね、プラグインを統合し始めると、さらに強力になります。これらのプラグインは、魚のシェルの機能を拡張し、新しいコマンド、ユーティリティ、および統合を導入して、コマンドラインの体験を大幅に向上させます。

良い例の1つが、魚のシェル向けに設計されたパッケージマネージャーであるFisherです。このプラグインは、パフォーマンスとシンプルさを考慮して構築されており、軽量です。

? Fisherは、魚のシェルプラグインを管理する際に軽量であり、システムレベルのパッケージマネージャーと直接比較することはできません。これは、それが管理するパッケージのサイズと複雑さに関して明らかです。

魚のプラグインを管理するには、まずFisherを以下の手順でインストールする必要があります:

ターミナルを開き、魚のシェルにアクセスし、次のコマンドを実行してFisherをダウンロードしてインストールします。このコマンドはFisherのインストールスクリプトを取得してsourceにパイプし、curlを介して現在の魚のシェルセッションでスクリプトを実行します。

curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

インストールが完了すると、次の出力が表示されます。

Installing the Fisher package manager

これで、以下のfisherコマンドを実行して、Fisherの現在の--versionを表示してインストールが正常に完了したことを確認します。

fisher --version
Confirming the installed Fisher version

GitNowプラグインのインストール

いまFisherが動作しているので、次は何ですか? フィッシュシェルをいくつかのクールなプラグインで強化するのはどうですか? たとえば、GitNowは、フィッシュシェル内でのGitワークフローを強化するツールキットです。魅力的ですね。

GitNowは、日常のGitタスクのための効率的なコマンドを提供し、生産性を向上させ、Gitコマンドのルーチンを簡素化します。

Fisherパッケージマネージャを使用してGitNowをインストールするには、以下の手順に従ってください。

1. フィッシュシェルで、次のfisherコマンドを実行してGitNowプラグイン(joseluisq/gitnow)をinstallします。

このコマンドにより、FisherがGitNowを取得し、フィッシュ構成に統合し、Gitのショートカットがすぐに利用可能になります。

fisher install joseluisq/gitnow
Installing the GitNow plugin

2. インストール後、以下のgitnowコマンドを実行して、GitNowが正しくインストールされていることを確認します。

このコマンドは、現在のインストールされているGitNowのバージョンを表示しますが、シェルでGitNowのコマンドが認識されている場合にのみ表示されます。

gitnow --version
Verifying the GitNow installation

3. 最後に、このfisherコマンドを実行して、GitNowを含むFisherが管理するすべてのプラグインをlistします。

fisher list

以下では、GitNowプラグインとFisherプラグイン自体を確認できます。

Viewing all plugins managed by Fisher

フィッシュシェルプラグインの削除

フィッシュシェルがプラグインで溢れていませんか? 必要のないプラグインを削除して、必要なものを見つけるのが面倒ですか? 不要なプラグインを削除して、フィッシュシェルの環境を整理してください。

Fisherで管理されているプラグインを削除するには、次の手順に従ってください:

1. 現在インストールされているすべてのプラグインを list するには、次のコマンドを実行してください。

fisher list

削除したいプラグインをリストから選択してください。

Viewing all installed plugins

2. 次に、以下の fisher remove コマンドを実行し、プラグイン名(joseluisq/gitnow)を指定して削除します。

fisher remove joseluisq/gitnow

このコマンドは、GitNowプラグインをfish shell環境からアンインストールするようにFisherに指示します。

Removing the GitNow plugin

3. 続けて、同じ fisher list コマンドを実行して、GitNowプラグインが正常に削除されたことを確認してください。

fisher list

GitNowプラグインは、インストールされているプラグインのリストから削除されているはずです。

Verifying the GitNow plugin removal

Fisherパッケージマネージャーのアンインストール

Fisherパッケージマネージャーは本当に便利ですが、Fisherに不満を感じたり、問題がある場合は、アンインストールするのが最良の選択肢です。

fish shellからFisherを包括的にアンインストールするには、次の手順を完了してください:

以下のコマンドを実行して、Fisher経由でインストールされたすべてのプラグインおよび fisherlist および remove します。

fisher list | fisher remove
Listing and removing all plugins

あるいは、次のコマンドを実行して、fisher 自体のみを remove します。

fisher remove jorgebucaran/fisher
Removing Fisher only

Oh My Fishパッケージマネージャーの探索

すでにFisherでクルーズ中の場合、なぜOh My Fishを考慮するのですか? Fisherでfishシェルのプラグインのパワーを体験しました。しかし、ここがポイントです:このフレームワークは、fishシェルの新しいカスタマイズの領域を開き、幅広いテーマやプラグインを提供しています。

Oh My Fishが提供するものを確認するには、まず次のパッケージマネージャーをインストールします。

次のcurlコマンドを実行して、fishシェル内でOh My Fishのインストールスクリプト(https://get.oh-my.fish)をダウンロードして実行します。

curl -L https://get.oh-my.fish | fish

成功した場合、次のような出力が得られます。

Installing the Oh My Fish package manager

インストールが完了したら、次のomfコマンドを実行して、Oh My Fishのインストールされたバージョンを確認します。

omf --version

A successful response, as shown below, indicates that Oh My Fish is ready and waiting to transform your fish shell experience.

Verifying the Oh My Fish installation

Oh My Fishテーマで環境をカスタマイズ

同じ古いfishシェルの外観にうんざりしていませんか?なぜ個性を加えないのですか? Oh My Fishから新鮮で個人的なテーマでfishシェルの環境をリニューアルしてください。

fishシェルの環境をカスタマイズするには、次の手順でテーマをインストールする必要があります。

1. fishの設定ファイルを開き、プロンプトがどのように表示されるかを定義するfish_prompt関数を削除します。これにより、設定したカスタムプロンプトがOh My Fishが提供するテーマと競合したり上書きされたりするのを防ぎます。

? テーマには、外観と機能に重要なユニークなプロンプトが付属しています。カスタムプロンプト(fish_prompt)を無効にすると、選択した Oh My Fish テーマがそのデザインと機能を完全にフィッシュシェルに統合します。

2. 次に、~/.config/fish/functions/fish_prompt.fish ファイルを削除します(rm)。このコマンドには出力はありませんが、このファイルを削除することで、フィッシュシェルはデフォルトのプロンプトに戻ります。

rm ~/.config/fish/functions/fish_prompt.fish

3. これらの変更がフィッシュ設定ファイルに反映されるように、次の source コマンドを実行します。

source ~/.config/fish/config.fish
Sourcing the fish configuration file

4. 次に、次の omf コマンドを実行して、フィッシュシェルに適した テーマ を見つけます。

omf theme

フィッシュシェルに統合したいテーマを選択します(たとえば、cbjohnson)。

? インストールする前に、各テーマがどのように見えるかを確認するために、Oh My Shell テーマの公式 GitHub リポジトリをご覧ください。

Listing available Oh My Fish themes

? 以下のコマンドを実行して、プラグインを使用してフィッシュシェルを強化します。インストールするプラグインのリストについては、OMF GitHub リポジトリを参照してください。 omf install <plugin_name>

5. その後、以下のコマンドを実行して、第四ステップで選択したテーマ(cbjohnson)をインストールします。

omf install cbjohnson

インストールされると、プロンプトが次のようにすぐに変更されます。

Installing an Oh My Fish theme (cbjohnson)

? ヒント: 2つ以上のテーマを持っている場合は、次のコマンドを実行してテーマを素早く切り替えることができます。omf theme <theme_name>

Oh My Fishのアンインストール

Oh My Fishは、シェルの雰囲気を華やかにするための優れたものです。しかし、景色を変えたい場合や新しいものを試したい場合は、Oh My Fishをアンインストールして、fishシェルを新鮮な状態に戻すことができます。

Oh My Fishをアンインストールするには、次の手順を実行してください:

1. 以下のrmコマンドを実行して、すべてのOh My Fish関連ファイルを削除します。

rm -rf ~/.local/share/omf
rm -rf ~/.config/omf

削除した後、最初にインストールしたテーマが消えるのが見えるでしょう。

Deleting Oh My Fish-related files

2. 次に、以下の各コマンドを実行して、さらにOh My Fish関連ファイルを削除します。

これらのコマンドには出力がありませんが、これらのファイルを削除することで、Oh My Fishのすべての残留物がシステムから削除されます。

rm -rf ~/.local/share/omf/pkg/omf/functions/omf.fish
rm ~/.config/fish/conf.d/omf.*

3. 以下のomfコマンドを実行して、削除が確認されるかどうかを確認します。

omf --version

以下のようなエラーが表示され、omfコマンドが見つからないというメッセージが表示されると、Oh My Fishが完全にアンインストールされたことがわかります。

Verifying the Oh My Fish deletion

デフォルトシェルとしてのFishの設定

fishシェルを使ってLinuxを活用してきたのであれば、なぜデフォルトのシェルとして設定しないのでしょうか? そうすれば、新しいターミナルを起動するたびに切り替える手間が省けます。

fishをデフォルトのシェルとして設定するには、以下の手順を実行してください:

1. 以下のコマンドを実行して、fish シェルが配置されている which のパスを見つけます。

which fish

後続の手順で必要になるため、パスをクリップボードにコピーしてください。

Finding the path to the fish shell

2. 次に、次のコマンドを実行して、fish を/etc/shells の許可されたシェルのリストに追加します。

echo "/usr/bin/fish" | sudo tee -a /etc/shells
Adding fish to the list of acceptable shells

3. 最後に、以下のchsh コマンドを実行して、デフォルトのシェルを fish (/usr/bin/fish) に変更します。

chsh -s /usr/bin/fish

マシンを再起動すると、デフォルトのシェルとして fish が設定されます。

Changing the default shell to fish

? ヒント: このセクションの手順をすべて繰り返して、Bash のような別のシェルに戻すことができます。ステップ二とステップ三で Bash のパスを指定し、変更を適用するためにマシンを再起動してください。

結論

このチュートリアル全体で、fish シェルの本質に深く入り込み、その強力な機能やカスタマイズ可能なオプションを解明しました。

エイリアスの定義からプロンプトのカスタマイズ、環境変数の永続化からプラグインの管理まで、fish シェルはあなたの頼れる相棒でした。Oh My Fish パッケージマネージャーを使用して、Linux の体験を変革する洞察を得ました。さらに、新しいプラグインやテーマを簡単に見つけてインストールし、fish シェル環境の機能性と美観を拡張する方法を学びました。

今、あなたは fish シェルの基本を探求しました。さらに深く掘り下げて、そのフルポテンシャルを引き出してみてください。なぜ、PowerlineStarship のようなカスタムプロンプトを試して、シェルに個人のタッチを加えないのでしょうか?

Source:
https://adamtheautomator.com/fish-shell/