.zshenvと.zshrcの場所・違い・設定方法を解説します!

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。タクマ™ [@suwaru_blog] です。

.zshrc ってなに? .zshenv ってなに? どうやって使い分けるの?
zsh の設定ファイルってこの 2 つ以外にもあるの?
今回は zsh 初心者を混乱させる「シェルの種類・zsh 設定ファイル」について解説します!

なぜこんな地味な記事を投稿したのか…

初心者の方は「早く zsh を使いやすくする設定方法を知りたい」と思うかもしれません。
ですが、まず「シェルとはどういうものか?」をざっくり知る必要があります。

  • シェルの使い方は【3 種類】あること
  • シェルの【設定ファイルの種類】のこと
  • ~/.zshenv~/.zshrc に定義するべき【環境変数】のこと

今後、シェルの理解を深めていくうえで大事な話なんです!

まだ zsh インストールしていない人こちらを参考にしてみてください。

設定ファイルの知識なんてこまけーこたーいいんだよ!

そんなせっかちな人こちらから .zshrc を実際に zsh カスタマイズしてみましょう。

3 つのシェルの使い方

最初に知っておくべきこととして、シェルは使い分けによって以下のような呼び方をします。

  1. ログインシェル
    • コマンドラインを起動したとき、サーバにログインしたときに立ち上がるシェルのこと
    • 対話形式で入力する
  2. インタラクティブシェル
    • コマンドラインで bash とか zsh と入力すると起動するシェルのこと
    • 対話形式で入力する
  3. シェルスクリプト
    • シェルによるプログラミングファイルを作成して実行すること

zsh 設定ファイルの種類

いきなり結論ですが、使う zsh 設定ファイルは基本的に 2 種類。
~/.zshenv~/.zshrc だけ使えば、ほとんどの場合 OK です!
※ ホームディレクトリに置かれた .zshenv.zshrc という意味です

…ですが「設定ファイルはどのディレクトリに置くことができるのか?」
「他にどんな設定ファイルがあるのか?」をこれから全部説明します。

理解しておくべきことですが、暗記する必要はありませんよ。

  • .zshenv
    • ログインシェル、インタラクティブシェル、シェルスクリプト、どれでも常に必要な設定を定義する
    • zsh が起動して、必ず最初に読み込まれる設定ファイル
    • 対話形式のシェル設定をここですると、シェルスクリプト誤作動の原因になるため注意する
    • 影響範囲が大きいので記述は必要最低限にするべき
  • .zprofile
    • ログインシェルに必要な設定だけを記述する
    • zshenv の次に読み込まれる設定ファイル
    • zsh ログイン時の一回だけ読み込まれる
  • .zshrc
    • ログインシェル、インタラクティブシェルの場合に読み込まれる
  • .zlogin
    • ログインシェルに必要な設定だけを記述する
    • 最後に読み込まれる
    • 役割は .zprofile とほぼ一緒。混乱を避けるため併用しないこと
  • .zlogout
    • exit コマンドで zsh を抜けたときに読み込まれる

設定ファイルを置く場所で優先度が変わる

同じ名称のファイルであっても、ファイルを置く場所しだいで設定の優先度が変わります。
置ける場所は 2 つ。「ホームディレクトリ直下」もしくは「/etc 直下」です。

個人的な設定をしたファイルの配置場所は?

zsh の個人設定向けファイルは【ホームディレクトリ】に配置します。
あなたのホームディレクトリはどこなのか?…は環境変数 $HOME の中身を見ればわかります。

# ホームディレクトリの値を表示
~ % echo $HOME
/Users/tak

この「ホームディレクトリ」というものは ~ という記号でも表現できます。

ホームディレクトリに移動するには cd ~ もしくは、cd だけで OK です。

ホームディレクトリによく置かれる zsh 設定ファイル

ホームディレクトリ配下には、以下の zsh 設定ファイルが置かれることが多いです。

  • ~/.zshenv
  • ~/.zshrc

先程も言いましたが、基本的にこの 2 つの設定ファイルを使うだけで OK です。

環境変数 $ZDOTDIR について

僕は正直この環境変数 $ZDOTDIR を使ったことはありませんが、
個人設定ファイルの場所を【ホームディレクトリから変更する】ことができます。

  • ~/.zshenv の中に環境変数 $ZDOTDIR を定義する
  • $ZDOTDIRに任意パスを設定する
  • 設定したディレクトリ内の個人設定ファイルが適用されるようになる

これが個人設定ファイルの場所をホームディレクトリから変更する手順です。

汎用的な設定をしたファイルの配置場所は?

/etc ディレクトリ直下には、システム全体に影響を及ぼす汎用的な設定ファイルを置きます。

  • 基本的に汎用設定が先に読み込まれます
    • つまり後から読み込まれる「個人設定が優先」されます
  • ただし .zlogout については、先に個人設定が読み込まれます
    • つまり後から読み込まれる「汎用設定が優先」されます

/etc 配下によく置かれる zsh 設定ファイル

/etc 配下には、以下の zsh 設定ファイルが置かれることが多いです。

  • /etc/zshenv
  • /etc/zprofile
  • /etc/zlogin
  • /etc/zlogout

~/.zshenv 設定例

~/.zshrc の設定例はこちらを参考にしてみてください。

さて ~/.zshenv の設定内容について説明します。
大事なのは「常に必要な設定を定義する」「 影響が大きいので記述は必要最低限にする」でした。

僕の場合、クリティカルな環境変数だけ ~/.zshenv に定義しています。
$PATH 以外の環境変数はマストじゃないと思うので、好みで設定してください。

~/.zshenv
# 個人的に追加したパッケージを優先的に扱うため /usr/local/bin にパスを通す
export PATH=/usr/local/bin:$PATH

# デフォルトのエディターを emacs に設定
export EDITOR=emacs

# デフォルトの pager を less から lv に設定
export PAGER='lv -c'

# 文字コードの指定
export LANG=ja_JP.UTF-8
環境変数の値は変更する前に「現在の設定値の確認」をしましょう。
たとえば echo $PATH を実行すると、現在の $PATH の値を見ることができます。

【余談】環境変数 $PAGER で設定している lv とは

僕は PAGER という環境変数を ~/.zshenv 内で設定しています。

そこで設定している lv は機能が豊富で日本語対応している less コマンドのようなものです。
もし使いたい場合はインストールが必要です。

# Mac 環境の場合
brew install lv

# CentOS 環境の場合
sudo wget http://ftp.riken.jp/Linux/dag/redhat/el6/en/x86\_64/rpmforge/RPMS/lv-4.51-1.el6.rf.x86\_64.rpm
sudo rpm -ivh lv-4.51-1.el6.rf.x86_64.rpm

# Ubuntu 環境の場合
sudo apt-get install lv

関連記事

zsh ロードマップ

お仕事ください!

僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。
なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。

コメント

コメントを残す

*