sourceコマンド(または . コマンド)は、シェル環境でスクリプトファイルを現在のシェルセッションに読み込んで実行するコマンドです。sourceはBashやZshなどのシェルに組み込まれている内部コマンドです。
※シェルセッションとは、ユーザーがシェルを起動してから終了するまでの一連の対話的な操作期間のことです。各セッションは独自の環境変数、関数定義、エイリアスなどの状態を持ちます。
特徴
通常のシェルスクリプトの実行は、新しい子プロセスを作成して実行されます。一方、sourceコマンドの場合、現在のシェル環境で直接実行されるため、スクリプト内で設定された環境変数、関数定義、エイリアスなどの変更が現在のシェルセッションに保持されます。
この特徴から、sourceコマンドは以下のような用途によく使用されます:
- シェルの起動時の環境設定(~/.bashrcなど)
- プロジェクト固有の環境変数の読み込み
- 共通で使用する関数やエイリアスの定義
子プロセスとは、既存のプロセス(親プロセス)から新たに作成されるプロセスのことです。シェル環境では、通常のスクリプト実行やコマンド実行時に子プロセスが作成されます。
# 親プロセス(現在のシェル)で変数を設定
message="Hello"
# 新しいシェルを起動(子プロセス)
bash
# 子プロセスで変数を確認してみる
echo $message
# 何も表示されない(空)- 親プロセスの環境変数は継承されない
# 子プロセスを終了
exit
# 親プロセスに戻り、変数を確認
echo $message
# "Hello" と表示される - 元の環境変数が維持されている
このような親子プロセスの概念は、実際のアプリケーション開発でも重要です。アプリケーションを起動すると、それは親プロセス(シェル)から見た子プロセスとして動作します。ただし、exportコマンドで設定された環境変数は子プロセスに継承されます。
# シェル(親プロセス)で環境変数を設定
export API_KEY="secret123" # exportで設定された変数は子プロセスに継承される
# Node.jsアプリケーション(app.js)の内容
# console.log(process.env.API_KEY); // "secret123"が出力される
# アプリケーション起動(子プロセスとして実行される)
node app.js # 環境変数API_KEYを継承して実行される
sourceコマンドの一般的な使用例:
# 設定ファイルの読み込み
source ~/.bashrc
# プロジェクトの環境変数設定
source .env
# 短縮形(.)を使用した場合
. ./setup-env.sh