Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
source / .(ドット)
『source』(または『.』ドット)は別のシェルスクリプトを現在のシェルで読み込んで実行するコマンドです。変数や関数の定義を別ファイルに分けて再利用したり、設定ファイルを再読み込みしたりするときに使います。
構文
# 別スクリプトを現在のシェルで読み込む(source コマンド) source ファイルパス # ドット(.)コマンドでも同じ動作(POSIX 準拠) . ファイルパス # 設定ファイルを再読み込み(変更を即反映) source ~/.bashrc . ~/.bashrc # 関数ライブラリを読み込む source ./lib/functions.sh
source と bash の違い
| 実行方法 | 概要 |
|---|---|
| source ファイル | 現在のシェルで実行します。変数・関数の定義が呼び出し元に引き継がれます。 |
| . ファイル | source と同義です(POSIX 準拠の書き方)。 |
| bash ファイル | サブシェルで実行します。変数・関数は呼び出し元に引き継がれません。 |
| ./ファイル | サブシェルで実行します(bash と同様、呼び出し元に変数は残りません)。 |
サンプルコード
以下の2つのファイルを用意します。『lib/config.sh』は共通設定を定義するファイルです。
# --- lib/config.sh ---
#!/usr/bin/env bash
DB_HOST="localhost"
DB_NAME="myapp"
DB_USER="dbuser"
APP_ENV="production"
log() {
echo "[$(date +%Y-%m-%d\ %H:%M:%S)] $*"
}
『source』で設定ファイルを読み込むと、定義した変数や関数が現在のシェルで使えるようになります。
# --- main.sh --- #!/usr/bin/env bash source ./lib/config.sh log "データベースに接続中: $DB_HOST/$DB_NAME" echo "環境: $APP_ENV"
[2026-03-06 12:00:00] データベースに接続中: localhost/myapp 環境: production
『.env』ファイルを読み込んで環境変数を一括設定するパターンです。
# .env の内容 # API_KEY=secret123 # DEBUG=true source .env echo "API キー: $API_KEY"
API キー: secret123
『source』と『bash』の違いを確認します。『bash』はサブシェルで実行するため変数が呼び出し元に残りません。
cat > /tmp/test.sh <<'EOF'
MY_VAR="hello from script"
EOF
# bash で実行(サブシェル: 変数は残らない)
bash /tmp/test.sh
echo "bash 後: ${MY_VAR:-未定義}"
bash 後: 未定義
『source』で読み込むと、現在のシェルで実行されるため変数が引き継がれます。
source /tmp/test.sh echo "source 後: $MY_VAR"
source 後: hello from script
概要
『source』の最大の特徴は 現在のシェルプロセスで実行することです。~/.bashrc や ~/.zshrc の変更を即反映する場合も source ~/.bashrc を使います。
共通の関数・変数を定義した「ライブラリファイル」を source で読み込むパターンは複数スクリプトの保守性を高めます。読み込むファイルが存在しない場合はエラーになるため、[ -f ファイル ] && source ファイル のように存在確認を挟むと安全です。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。