はじめに#
こんにちは!今回はsourceコマンドについて解説します。
sourceは設定ファイルを読み込んだり、スクリプトを現在のシェルで実行したりするコマンドです。.bashrcを編集した後に「ターミナル再起動しなくても反映させたい!」って時に使うやつですね。
sourceコマンドとは#
sourceは、指定したファイルを現在のシェルで実行するコマンドです。
普通にスクリプトを実行すると新しいシェルプロセスが起動するんですけど、sourceを使うと今のシェル内で実行されます。だから、変数とか関数とかがそのまま現在のシェルに残るんです。
これめっちゃ便利です。
基本構文#
または
ピリオド1つでも同じ意味です。POSIXシェル互換の書き方ですね。
主な使い方#
| 使用場面 |
説明 |
| 設定ファイル読み込み |
.bashrcや.bash_profileなどを再読み込み |
| 変数定義ファイル |
共通の変数定義を読み込み |
| 関数ライブラリ |
スクリプトで使う関数をインポート |
| 環境設定 |
プロジェクト固有の環境変数を設定 |
使用例#
例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
|
実行結果:
変数が現在のシェルに設定されました。
例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で即座に反映、これ覚えておくとめちゃくちゃ便利ですよ!