はじめに

こんにちは!今回はsourceコマンドについて解説します。

sourceは設定ファイルを読み込んだり、スクリプトを現在のシェルで実行したりするコマンドです。.bashrcを編集した後に「ターミナル再起動しなくても反映させたい!」って時に使うやつですね。

sourceコマンドとは

sourceは、指定したファイルを現在のシェルで実行するコマンドです。

普通にスクリプトを実行すると新しいシェルプロセスが起動するんですけど、sourceを使うと今のシェル内で実行されます。だから、変数とか関数とかがそのまま現在のシェルに残るんです。

これめっちゃ便利です。

基本構文

1
source ファイル名 [引数...]

または

1
. ファイル名 [引数...]

ピリオド1つでも同じ意味です。POSIXシェル互換の書き方ですね。

主な使い方

使用場面 説明
設定ファイル読み込み .bashrc.bash_profileなどを再読み込み
変数定義ファイル 共通の変数定義を読み込み
関数ライブラリ スクリプトで使う関数をインポート
環境設定 プロジェクト固有の環境変数を設定

使用例

例1: .bashrcを再読み込み

1
source ~/.bashrc

または

1
. ~/.bashrc

説明: .bashrcを編集した後、ターミナルを再起動せずに設定を反映できます。これ、めちゃくちゃ使います。

例2: 環境変数ファイルの読み込み

まず、環境変数ファイルを作ります。

1
2
3
4
5
# env_vars.sh の内容
export DB_HOST="localhost"
export DB_PORT="5432"
export DB_NAME="myapp"
export API_KEY="secret123"

これを読み込みます。

1
2
source env_vars.sh
echo $DB_HOST

実行結果:

1
localhost

変数が現在のシェルに設定されました。

例3: 関数ライブラリの読み込み

1
2
3
4
5
6
7
8
# utils.sh の内容
log_info() {
    echo "[INFO] $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

log_error() {
    echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') - $1" >&2
}

スクリプトで使う:

1
2
3
4
5
#!/bin/bash
source utils.sh

log_info "処理を開始します"
log_error "エラーが発生しました"

実行結果:

1
2
[INFO] 2025-10-26 07:03:00 - 処理を開始します
[ERROR] 2025-10-26 07:03:00 - エラーが発生しました

例4: プロジェクトの設定ファイル

1
2
3
4
5
6
7
# project_config.sh
PROJECT_ROOT="/home/user/myproject"
export PATH="$PROJECT_ROOT/bin:$PATH"
export PYTHONPATH="$PROJECT_ROOT/lib:$PYTHONPATH"

alias build="cd $PROJECT_ROOT && make"
alias test="cd $PROJECT_ROOT && pytest"

プロジェクトディレクトリに入った時に読み込む:

1
2
3
cd ~/myproject
source project_config.sh
build  # エイリアスが使える!

例5: 引数付きでsource

1
2
3
4
5
6
7
8
9
# config.sh の内容
ENV=$1
echo "環境: $ENV"

if [ "$ENV" = "production" ]; then
    export API_URL="https://api.example.com"
else
    export API_URL="http://localhost:3000"
fi

実行:

1
2
source config.sh production
echo $API_URL

実行結果:

1
2
環境: production
https://api.example.com

Tips・注意点

sourceと./の違い

1
2
3
4
5
6
7
# ./で実行(新しいシェルで実行)
./script.sh
echo $MY_VAR  # 変数は残らない

# sourceで実行(現在のシェルで実行)
source script.sh
echo $MY_VAR  # 変数が使える!

./で実行すると、スクリプトが終了した時点で変数も消えます。sourceだと残ります。

エラーハンドリング

sourceでファイルが見つからない場合、エラーになります。

1
2
3
4
5
6
# 安全に読み込む方法
if [ -f "$HOME/.my_config" ]; then
    source "$HOME/.my_config"
else
    echo "設定ファイルが見つかりません"
fi

パスの指定

相対パスでも絶対パスでもOKです。

1
2
3
4
5
6
7
8
# 相対パス
source ./config.sh

# 絶対パス
source /etc/my_app/config.sh

# ホームディレクトリ
source ~/.bashrc

セキュリティ注意

信頼できないファイルをsourceするのは危険です。ファイルの中身が現在のシェルで実行されるので、悪意のあるコードが含まれていると被害を受けます。

1
2
3
4
# ダウンロードしたファイルをいきなりsourceしない!
# 必ず中身を確認してから
cat suspicious_file.sh  # 内容確認
source suspicious_file.sh

実践的な使い方

.bashrcの構造化

.bashrcが長くなってきたら、機能ごとにファイルを分割できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# ~/.bashrc の内容
# エイリアス
if [ -f ~/.bash_aliases ]; then
    source ~/.bash_aliases
fi

# 関数
if [ -f ~/.bash_functions ]; then
    source ~/.bash_functions
fi

# プロジェクト固有設定
if [ -f ~/.bash_projects ]; then
    source ~/.bash_projects
fi

メンテナンスしやすくなります。

開発環境の切り替え

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# dev_env.sh
source_env() {
    local env=$1
    if [ -f "$HOME/.envs/${env}.sh" ]; then
        source "$HOME/.envs/${env}.sh"
        echo "環境 '$env' を読み込みました"
    else
        echo "環境 '$env' が見つかりません"
        return 1
    fi
}

# 使い方
# source_env production
# source_env staging
# source_env development

Node.js のnvm

nvm(Node Version Manager)もsourceを使います。

1
2
3
# nvmの初期化(.bashrcに書く)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh"

まとめ

sourceコマンドのポイント:

  • 設定ファイルを現在のシェルで実行
  • .(ピリオド)でも同じ意味
  • 変数や関数が現在のシェルに残る
  • .bashrcの再読み込みに超便利
  • ファイルの中身は必ず確認してから実行

設定ファイルを編集したらsourceで即座に反映、これ覚えておくとめちゃくちゃ便利ですよ!