実践編:変数とスコープ・リスト操作
fish 独自の強力な変数スコープ(ユニバーサル変数・グローバル・ローカル)、リスト(配列)の1始まりインデックス、および環境変数 $PATH の管理方法を解説します。
4つの変数スコープ
fish の変数は、有効範囲(スコープ)をオプションフラグで明示的に制御します。
» 1. ユニバーサル変数(-U / –universal)
fish の最も画期的な機能の1つです。ユニバーサル変数として設定された値は、実行中のすべての fish セッション(別ターミナルウィンドウ含む)へ即座に共有され、OS を再起動しても永続化 されます。
設定ファイル(config.fish)を編集することなく、ターミナルから直接一度実行するだけで永続的な環境設定が完了します。
# すべての端末で共通かつ永続的に有効なエディタ設定
set -Ux EDITOR nvim
» 2. グローバル変数(-g / –global)
現在のシェルプロセス全体で有効な変数です。他の端末や次回起動時のセッションには影響を与えません。
set -g PROJECT_ROOT "/home/user/project"
» 3. ローカル変数(-l / –local)
現在実行中のブロック(if、for)や関数内でのみ有効な一時変数です。ブロックを抜けると自動的に破棄されます。
set -l temp_name "temporary"
» 4. エクスポート(-x / –export)
変数を子プロセス(外部コマンド)に引き渡す「環境変数」にするには -x フラグを組み合わせます。
# グローバル環境変数としてエクスポート
set -gx NODE_ENV "production"
リスト(配列)の基本と操作
fish では、「すべての変数は内部的に文字列のリスト(要素の集まり)」として扱われます。単一の変数は、要素数が1つのリストに過ぎません。
» リストの作成
値を半角スペースで並べるだけでリストが生成されます。
# リストの作成
set colors red green blue
# 末尾に要素を追加(-a フラグ)
set -a colors yellow
» インデックス参照(1始まりの原則)
重要な注意点として、fish のインデックスは 1 から始まります(0 始まりの Bash や C 言語系と異なります)。
| 記法 | 意味 |
|---|---|
$colors[1] | 最初の要素(red) |
$colors[-1] | 最後の要素(yellow) |
$colors[2..3] | 2番目から3番目までのスライス(green blue) |
$colors[2..-1] | 2番目から末尾までのスライス |
» リストの要素数カウント
組み込みコマンド count を使用して要素数を取得します。
set items alpha beta gamma
count $items
# 出力結果: 3
$PATH の安全な管理(fish_add_path)
実行ファイルの検索パスである $PATH も、fish ではコロン区切りの文字列ではなく単なるリストとして管理されています。
パスを追加する際は、専用の組み込み関数 fish_add_path を使用するのが最も安全で推奨される方法です。
# PATH に新しいディレクトリを追加(重複は自動防止され、永続化される)
fish_add_path /opt/homebrew/bin
# 先頭ではなく末尾に追加したい場合
fish_add_path --append /usr/local/custom/bin
fish_add_path は、指定したディレクトリが既に $PATH に含まれているかを自動判定して二重登録を防ぎ、存在しない無効なパスの混入も回避します。