4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.bash_profile vs .bashrc ― 違いと使い分けの完全ガイド

4
Last updated at Posted at 2025-11-06

bashを使っていると必ず出会う「.bash_profile」と「.bashrc」。
「どっちに何を書けばいいの?」「設定が反映されない!」といった悩みを抱えたことはありませんか?

この記事では、これらの設定ファイルの違いと使い分けを、実務で使えるテンプレート付きで解説します。

基本の考え方:読み込まれるタイミング

bashには2つの重要な概念があります:

  • ログインシェル/非ログインシェル
  • インタラクティブ/非インタラクティブ

これらの組み合わせによって、読み込まれる設定ファイルが変わります。

シェル種別 主な起動例 読み込まれる設定ファイル
インタラクティブ・ログインシェル macOSのTerminal起動、SSHログイン /etc/profile~/.bash_profile → (なければ)~/.bash_login または ~/.profile
インタラクティブ・非ログインシェル 既存シェルから bash 実行 ~/.bashrc
非インタラクティブ・シェル スクリプト実行 (bash script.sh) 何も読まない(ただし BASH_ENV 指定時はそのファイル)

実際の起動パターン

実際の環境では、以下のようなパターンになります:

  • macOSのTerminal → ログインシェル(.bash_profileが読まれる)
  • SSHログイン → ログインシェル(.bash_profile
  • 既存bashから bash 起動 → 非ログインシェル(.bashrc
  • tmux起動 → 設定によりログイン扱いになり .bash_profile が再実行される可能性あり
  • scp/SSHリモートコマンド → 非インタラクティブでも .bashrc が読まれる場合がある

役割分担:何を書くべきか

.bash_profile(ログイン時に1回だけ実行)

環境変数など、1回だけ定義すべきものを記述します。

# ~/.bash_profile
export PATH="$HOME/bin:$PATH"
export EDITOR=vim

# .bashrcを呼ぶ(macOSやSSHで必要)
if [ -r ~/.bashrc ]; then
  . ~/.bashrc
fi

重要なポイント:

  • 環境変数 (export) の設定
  • PATH, EDITORなど、システム全体で使う設定
  • .bashrc を読み込む1行を必ず追加する(macOS対策)

.bashrc(対話シェルごとに毎回実行)

エイリアスや関数など、対話的な操作のための設定を記述します。

# ~/.bashrc
case $- in *i*) : ;; *) return ;; esac  # 対話時のみ実行

[ -f /etc/bash_completion ] && . /etc/bash_completion

alias ll='ls -alF'
alias gs='git status'
mkcd () { mkdir -p "$1" && cd "$1"; }

重要なポイント:

  • エイリアス、関数、補完などを定義
  • export は不要な場合が多い(重複を避ける)
  • 非対話時の実行をガードする(case $- in *i*) : ;; *) return ;; esac

よくある混乱と対処法

症状 原因 対策
.bashrc の設定が反映されない .bash_profileから呼ばれていない .bash_profilesource ~/.bashrc を追加
PATHが長くなりすぎる .bashrcで毎回exportしている exportは.bash_profile側へ移す
scp/sshでechoが出る .bashrcに出力処理がある [[ $- == *i* ]] でガードする

実務向けテンプレート

基本テンプレート

~/.bash_profile

# 環境変数はここで一度だけ
export PATH="$HOME/bin:$PATH"
export EDITOR=vim

# 対話設定を読み込む
if [ -r ~/.bashrc ]; then
  . ~/.bashrc
fi

~/.bashrc

case $- in *i*) : ;; *) return ;; esac
[ -f /etc/bash_completion ] && . /etc/bash_completion

alias ll='ls -alF'
alias gs='git status'
mkcd () { mkdir -p "$1" && cd "$1"; }

環境別の設定例

macOS

# ~/.bash_profile
export PATH="$HOME/bin:$PATH"
export EDITOR=vim
if [ -r ~/.bashrc ]; then
  . ~/.bashrc
fi

# ~/.bashrc
case $- in *i*) : ;; *) return ;; esac
[ -f /etc/bash_completion ] && . /etc/bash_completion
alias ll='ls -alF'
alias gs='git status'
mkcd () { mkdir -p "$1" && cd "$1"; }

注意点: macOSはTerminalが「ログインシェル」として起動するため、.bash_profileが必ず読まれます。.bashrcをsourceするのを忘れないようにしましょう。

Cursor / VSCode(統合ターミナル)

# ~/.bash_profile
export PATH="$HOME/bin:$PATH"
export EDITOR=vim
[ -r ~/.bashrc ] && . ~/.bashrc

# ~/.bashrc
case $- in *i*) : ;; *) return ;; esac
[ -f /etc/bash_completion ] && . /etc/bash_completion
alias ll='ls -alF'
alias gs='git status'

注意点: CursorやVSCodeの統合ターミナルは多くの場合「非ログインbash」として起動するため、.bashrc が直接使われます。VSCodeの場合、設定ファイルでシェルを /bin/bash に指定し、必要に応じて login: true にすると .bash_profile も読まれます。

Linux

# ~/.bash_profile
export PATH="$HOME/.local/bin:$HOME/bin:$PATH"
export EDITOR=vim
[ -r ~/.bashrc ] && . ~/.bashrc

# ~/.bashrc
case $- in *i*) : ;; *) return ;; esac
[ -f /etc/bash_completion ] && . /etc/bash_completion
PS1='\u@\h:\w\$ '
alias ll='ls -alF'
alias la='ls -A'
mkcd () { mkdir -p "$1" && cd "$1"; }

注意点: Linuxの多くのディストリビューションでは、端末は非ログインシェルとして起動するため .bashrc が主役になります。

Windows

Git Bashの場合

# ~/.bash_profile
export PATH="$HOME/bin:$PATH"
export EDITOR=vim
[ -r ~/.bashrc ] && . ~/.bashrc

# ~/.bashrc
case $- in *i*) : ;; *) return ;; esac
if [ -f /usr/share/git/completion/bash_completion ]; then
  . /usr/share/git/completion/bash_completion
fi
alias ll='ls -alF --color=auto'
alias gs='git status'

WSLの場合

Linuxと同じ運用でOKです。

# ~/.bash_profile
export PATH="$HOME/.local/bin:$HOME/bin:$PATH"
export EDITOR=vim
[ -r ~/.bashrc ] && . ~/.bashrc

# ~/.bashrc
case $- in *i*) : ;; *) return ;; esac
[ -f /etc/bash_completion ] && . /etc/bash_completion
alias ll='ls -alF'
alias gs='git status'

まとめ

  • .bash_profile → 環境変数・起動時1回限りの設定
  • .bashrc → 対話的設定(エイリアス・補完・関数など)
  • macOS/SSHでは .bash_profile しか読まれないことがあるため .bashrc をsourceする
  • PATH多重追加・echo出力の副作用に注意
  • tmuxやCursor、VSCodeなど、起動環境ごとにログインシェル扱いが異なるため確認必須

この構成にしておけば、macOS・Linux・Windows(Git Bash/WSL)・Cursor・VSCodeのどれでも安定して同じ挙動を得られます。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?