MENU

fishシェルの環境変数設定:-Ux vs -gx

環境変数の設定方法いつも忘れてしまうので、メモっておく。

目次

イントロ

fishシェルは、その直感的な機能とユーザーフレンドリーな設定方法で多くの開発者から支持を受けています。この記事では、fishシェルで環境変数を設定する2つの一般的な方法、-Ux-gxの違いと、それぞれの利点と欠点について詳しく説明します。

2つの方法

大別して、-Uxを使う方法と-gxを使う方法があります。

-Ux:ユニバーサル変数としてエクスポート

  • set -U:変数を永続的なユニバーサル変数として設定します。これは、すべてのfishインスタンスで共有され、セッション間で保存される変数です。
  • set -x:変数をエクスポートします。これにより、その変数が子プロセスに利用可能になります。

例として、MY_VARIABLEという名前の環境変数を永続的に設定し、それをエクスポートしたい場合、次のようにコマンドを使用します:

set -Ux MY_VARIABLE "Some Value"

このコマンドを実行すると、MY_VARIABLEはすべてのfishインスタンスと子プロセスで利用可能となります。そして、システムを再起動してもこの設定は保持されます。

ユニバーサル変数を削除する場合は、set -eオプションとともに変数の名前を指定します:

set -e MY_VARIABLE

このコマンドにより、指定されたユニバーサル変数が削除されます。

メリット:

  • 永続性: すべてのセッション間で保持され、システム再起動後も失われません。
  • 共有: すべてのfishインスタンス間で変数が共有されます。
  • インタラクティブ設定: コマンドラインから直接変数を設定・変更が可能です。

デメリット:

  • オーバーヘッド: 多くのユニバーサル変数を使用すると、起動時のオーバーヘッドが増加する可能性があります。
  • 混乱の原因: 変数の変更が他の全てのfishインスタンスに影響します。

オススメするケース:

  • 共通の設定: 複数の fish セッションやインスタンス間で共有したい設定がある場合。例えば、特定のプログラムのパスを追加したいときなど。
  • 一時的な変更: インタラクティブに変数を変更し、その設定を暫定的にすべてのセッションで利用したい場合。
  • マシン全体の設定: 複数のユーザーアカウント間で共有したい設定がある場合。

-gx:グローバル変数としてエクスポート

  • -g オプションを使用して設定された変数は、グローバル変数として保存されます。
  • これは現在のセッション内でのみ存在し、新しいセッションやターミナルウィンドウで利用することはできません。
  • セッションが終了すると、グローバル変数も消失します。

いくつかの代表的な設定パターンを列挙します。

PATH変数にディレクトリを追加する

set -gx PATH $PATH /path/to/your/directory

新しい環境変数を設定する

set -gx MY_VARIABLE "Some Value"

既存の環境変数の値を変更する

set -gx PATH "/new/path:$PATH"

これらの設定を、設定ファイルに記述することで、セッションを開始する時に読み込まれます。

nano ~/.config/fish/config.fish

メリット:

  • 明確な初期化: 変数の初期化が明確になり、文書化しやすくなります。
  • セッション固有: 特定のセッションにのみ変数や設定を適用可能です。

デメリット:

  • 非永続性: セッションが終了すると変数は消失します。
  • 変更の手間: 変数の変更のためには設定ファイルを編集し、新しいセッションを開始または設定ファイルを再読み込みする必要があります。

オススメするケース:

  • セッション固有の設定: あるセッションに特定の変数や設定を適用したいが、他のセッションには影響を与えたくない場合。
  • 明確な管理: セッションの設定や起動時の動作を明確に制御したい場合。config.fish に明確な指示を書くことで、どの変数がセットされているか、なぜそれがそうなっているかを文書化しやすくなります。
  • 多数の変数を設定: 多くの環境変数を設定する場合、それらを一か所(config.fish)にまとめることで、管理や変更が容易になります。

-gxを推奨

一般的なシナリオでは、-gxオプションをconfig.fishに記述する方法が推奨されます。これにより、設定の一元管理が容易になり、意図しない変数の共有や競合を避けることができます。しかしながら、特定の状況やニーズに応じて-Uxオプションを選択することも有効です。

環境変数の設定方法は、その用途やニーズに応じて最も適した方法を選択することが重要です。どちらの方法を選ぶかは、具体的な使用ケースやニーズに応じて異なるため、各プロジェクトやタスクの要件をよく理解し、適切な選択をするよう努めましょう。

寸評

こういう話題は得意だよねChatGPT。基本的には設定ファイルに書いてるかな。持ち運べるし。

目次