## はじめに
環境変数はシェルやプロセスから参照される設定値で、`PATH`、`HOME`、`LANG`、アプリケーション固有の `JAVA_HOME` や `NODE_ENV` など多種多様です。これを永続化するのが `.bashrc` `.bash_profile` などのシェル初期化ファイルです。
ログインシェルとインタラクティブシェルでどのファイルが読み込まれるかが異なるため、置き場所を間違えると「ターミナルでは効くがcronでは効かない」といったトラブルが起こります。本記事で読み込み順を整理します。
## 症状・背景
環境変数設定 が必要になる主な場面:
– 開発ツール (Node.js, Python, Go) のパス追加
– プロキシ設定 (http_proxy, https_proxy)
– ロケール・言語設定 (LANG, LC_ALL)
– アプリケーションのモード切替 (NODE_ENV など)
## 手順・設定方法
### ステップ1: 環境変数の確認と一時設定
“`bash
# 現在の環境変数を表示
env
printenv
# 特定の変数を確認
echo $PATH
echo $HOME
printenv LANG
# 一時的に設定 (現在のシェルのみ)
MYVAR=”hello” # シェル変数 (子プロセスには引き継がれない)
export MYVAR=”hello” # 環境変数 (子プロセスにも継承)
# コマンドにだけ一時的に変数を渡す
NODE_ENV=production node app.js
“`
### ステップ2: bashの初期化ファイル
“`
ログインシェル時:
/etc/profile → ~/.bash_profile → (~/.bash_login → ~/.profile)
通常 .bash_profile から ~/.bashrc を読み込む
非ログイン (インタラクティブ) シェル時:
/etc/bash.bashrc → ~/.bashrc
スクリプト実行時:
どちらも読まれない (BASH_ENV指定時のみ)
“`
“`bash
# ~/.bash_profile の典型例
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
“`
### ステップ3: .bashrc に環境変数を設定
“`bash
# ~/.bashrc に追記
vi ~/.bashrc
“`
“`bash
# === 環境変数 ===
export PATH=”$HOME/bin:$HOME/.local/bin:$PATH”
export EDITOR=”vim”
export LANG=”ja_JP.UTF-8″
# Node.js (nvm)
export NVM_DIR=”$HOME/.nvm”
[ -s “$NVM_DIR/nvm.sh” ] && source “$NVM_DIR/nvm.sh”
# Go
export GOPATH=”$HOME/go”
export PATH=”$PATH:$GOPATH/bin”
# プロキシ
# export http_proxy=”http://proxy.example.com:8080″
# export https_proxy=”$http_proxy”
# === エイリアス ===
alias ll=’ls -lah’
alias gs=’git status’
alias ..=’cd ..’
“`
“`bash
# 設定を反映
source ~/.bashrc
# または
. ~/.bashrc
“`
### ステップ4: システム全体と特殊な設定
“`bash
# システム全体 (root権限)
# 全ユーザー対象 → /etc/environment (key=value形式、export不要)
sudo vi /etc/environment
# 例: LANG=”ja_JP.UTF-8″
# /etc/profile.d/ にスクリプトを置く (推奨)
sudo tee /etc/profile.d/myapp.sh > /dev/null <<'EOF'
export MYAPP_HOME=/opt/myapp
export PATH=$PATH:$MYAPP_HOME/bin
EOF
sudo chmod 644 /etc/profile.d/myapp.sh
# 設定したのに反映されないときの確認
env | grep MYVAR # 現在の値
shopt -q login_shell && echo login || echo no-login
echo $0 # bashの起動形態
```
## 注意事項
- `.bashrc` は非ログインシェル用、`.bash_profile` はログインシェル用。多くの環境では `.bash_profile` から `.bashrc` を読み込む構成が標準
- cronで動かすスクリプトでは `.bashrc` は読まれません。明示的に環境変数を `source` するか、スクリプト内で定義
- `export` を付けないと子プロセス (起動するコマンド) に変数が引き継がれません
- `PATH` の編集はミスると全コマンドが効かなくなります。先頭か末尾に追加する形が安全
## まとめ
1. **基本**: `export VAR=value` で環境変数化、子プロセスへ継承
2. **bashrc**: 非ログインシェル用、`.bash_profile` がログイン用
3. **読込**: シェル種類で読込ファイルが変わる、混乱注意
4. **反映**: 編集後は `source ~/.bashrc` で即適用
5. **全体**: 全ユーザー設定は `/etc/profile.d/*.sh` が安全
関連記事:
- [PATHの設定方法と仕組みを解説](../linux-path-variable-setup/)
- [シェルスクリプトの基本的な書き方](../linux-shell-script-basics/)
- [cronで定期的にシェルスクリプトを実行する方法](../linux-cron-shell-script/)



