環境変数の設定

Author: syohex
Published: 2013-10-13
Last Modified: 2013-10-13
GitHub Source: md

概要

Emacsでの環境変数の設定方法について示します. 特に PATHに関する設定は複雑なので, PATHの設定について詳しく述べます.

対象

対象は Macと Linux等の Unix系の環境でシェル以外から Emacsを立ち上げる方です. 後述の通り, シェルから Emacsを立ち上げる場合は, シェルの環境変数が引き継がれるので, Emacs側で環境変数を設定する必要はありません. Windowsを使う場合も同様で, システムの 環境変数の設定が行えていれば, Emacs側で設定する必要はありません.

環境変数を設定する

環境変数を使う場合は setenv関数を使います. setenvは 2引数関数で, 第 1引数は 環境変数名で, 第 2引数はその値となります. また型は第 1, 2引数共に文字列です.

以下に例を示します(環境変数 FOOに値 VALUEを設定).

(setenv "FOO" "VALUE")

環境変数 PATHの設定

PATH以外については, 上述の setenvをするだけで設定完了ですが, PATHについては exec-path変数の設定も行う必要があります. シェルを使わずコマンドを起動する場合 (call-process等)は, exec-path変数の値が参照されます. PATHは設定したのに, コマンドが見つからない, 期待するものと違うものが利用されてしまうといった場合は, exec-pathが正しく設定されているかどうかを確認してください.

exec-pathは, 文字列のリストです. 環境変数 PATHのコロン区切りとは違うので, 注意してください. 以下に設定例を示します. parse-colon-path関数は, コロン区切りの 文字列を分割し, リストとして返す関数です.

(setq exec-path (parse-colon-path (getenv "PATH")))

eshellの PATHの設定

eshellでの PATHの設定は eshell-path-envにより行います. 形式は環境変数 PATHと 同じですので, PATHの値をそのまま代入すると良いです.

(setq eshell-path-env (getenv "PATH"))

exec-path-from-shellを使って環境変数を設定する

シェルと Emacsで共に環境変数を設定すると重複が生じ, 一方の設定忘れが発生してしまう恐れが あります. exec-path-from-shellはそのような問題を 解決してくれるパッケージです. 利用したい環境変数を指定するだけでその環境変数の設定を 行なってくれます. また上述の PATH周りの設定もすべて行なってくれます.

以下に利用例を示します.

(exec-path-from-shell-copy-envs '("PATH" "VIRTUAL_ENV" "GOROOT" "GOPATH"))

exec-path-from-shell-copy-envs関数に設定したい環境変数名のリストを指定すると, その環境変数の設定を行なってくれます.

exec-path-from-shellのインタフェースは, 一度の呼び出しで一回シェルを起動するので, リストでまとめて渡すことで, シェルの起動回数を減らすことができます.

(補足)シェルから Emacsを起動する

-nw--no-windowオプションで起動した場合や GUI版でもシェルから起動した場合は シェルの環境変数がすべて Emacsに引き継がれるので, 明示的に環境変数を設定する必要が なくなります. 設定忘れなどを一切気にしたくない方はこちらの方法がおすすめです.