Masayan tech blog.

  1. ブログ記事一覧>
  2. macOS Zshの設定ファイルとシェル環境の完全ガイド

macOS Zshの設定ファイルとシェル環境の完全ガイド

公開日

この記事を読むことで得られるメリット

この記事を読むことで、macOSのzshにおける設定ファイルの役割と使い分けを理解し、効率的なターミナル環境を構築できるようになる。また、ログインシェルと非ログインシェルの違いや、実用的なエイリアス設定についても学べる。

この記事を読むのにかかる時間

約8分

要約

macOS Catalina以降ではデフォルトシェルがzshに変更された。zshには複数の設定ファイルが存在し、それぞれ異なるタイミングで読み込まれる。環境変数は.zprofileに、対話的な設定は.zshrcに記述するのが適切である。エイリアスを活用することで日常的なコマンド操作を大幅に効率化できる。

macOSにおけるデフォルトシェルの変更

macOS Catalina以降では、デフォルトのシェルがzshに変更された。現在使用しているシェルは、以下のコマンドで確認できる。

echo $SHELL

この環境変数を確認することで、システムで設定されているデフォルトシェルを把握できる。

zshの設定ファイルとその役割

zshには複数の設定ファイルが存在し、それぞれ異なる役割と読み込みタイミングを持っている。

主要な設定ファイル一覧

ファイル名

シェル

読み込まれるタイミング

主な用途

.zshrc

Zsh

シェルが起動されるたび

インタラクティブなシェルの設定(プロンプト、エイリアスなど)

.zprofile

Zsh

ログインシェルとして起動されたとき

ログイン時に1回だけ実行したい設定(環境変数など)

設定ファイルの使い分け

exportなどの環境変数を設定する際には、.zprofileに記述することが推奨される。.zshrcに記述することも可能であるが、シェルが起動するたびに実行されるため、シェルの起動速度に影響を与える可能性がある。

ファイルの読み込み順序

zshでは以下の順序でファイルが読み込まれる。

1. .zshenv
2. .zprofile(存在する場合)
3. .profile.zprofileが存在しない場合のみ)
4. .zshrc

.zprofile.profileが両方存在する場合は、.zprofileが優先される。.profileはPOSIX互換でどのシェルでも動作するが、Zsh専用の機能を使用したい場合は.zprofileを新規作成する必要がある。

設定ファイルの格納場所

これらの設定ファイルは、PCのホームディレクトリ(Macなら/Users/<ユーザー名>)に配置される。

ログインシェルと非ログインシェルの違い

ログインシェルとは

ログインシェルとは、ユーザーがシステムにログインした際に最初に起動されるシェルのことである。通常、以下の場面で起動される。

  • ターミナルアプリを開いたとき
  • SSHでリモートサーバーにログインしたとき
  • コンソールから直接ログインしたとき

非ログインシェルとの違い

  • ログインシェル: システムログイン時に起動される最初のシェル
  • 非ログインシェル: 既存のシェルから新しく起動されるシェル(例:zshコマンドを実行したとき)

実際の動作例

# macOSでターミナルを開く → ログインシェルとしてzshが起動
# → .zprofileが読み込まれる → .zshrcが読み込まれる

# 既存のターミナルで`zsh`と入力 → 非ログインシェルが起動  
# → .zshrcのみが読み込まれる

ログインシェルの確認方法

以下のコマンドでログインシェルかどうかを確認できる。

echo $0

結果の見方:

  • ログインシェル: -zsh-bash(先頭にハイフンが付く)
  • 非ログインシェル: zshbash(ハイフンなし)

効率的なエイリアス設定

エイリアスを活用することで、日常的なコマンド操作を大幅に効率化できる。組み込み変数$HOMEを使用することで、より汎用性の高い設定が可能である。

基本的なエイリアス例

$HOMEでホームディレクトリが取得できる

alias la='ls -la'
alias p='pwd'
alias home='cd $HOME'
alias vi='vim'
alias zshrc='vi $HOME/.zshrc'

実用的なエイリアス設定集

# ファイル・ディレクトリ操作
alias la='ls -la'
alias p='pwd'
alias home='cd $HOME'
alias vi='vim'
alias rc='vi $HOME/.zshrc'
alias profile='vi $HOME/.zshrc'
alias rm='rm -i'
alias mv='mv -i'
alias cp='cp -i'

# Docker
alias d='docker'
alias dc='docker-compose'
alias dclogs='docker-compose logs -f --tail=10'

# Git
alias g='git'
alias ga='git add'
alias gs='git status'
alias gb='git branch'
alias gc='git checkout'

# マージ済みローカルブランチ削除
# $1 はマージ先のブランチ
gbdm() {
  git checkout $1
  git branch --merged $1 | grep -vE '^\*|master$|main$|milestone$|develop$' | xargs -I % git branch -d %
}

# Node.js/npm関連
alias ni='npm install'
alias ns='npm start'
alias nt='npm test'
alias nb='npm run build'

# その他
alias c='clear'

まとめ

macOSのzsh環境では、適切な設定ファイルの使い分けが重要である。環境変数は.zprofileに、対話的な設定は.zshrcに記述することで、効率的なシェル環境を構築できる。また、ログインシェルと非ログインシェルの違いを理解することで、設定ファイルの動作を正確に把握できる。エイリアスを活用することで、日常的な開発作業を大幅に効率化することが可能である。