LoginSignup
80
77

More than 3 years have passed since last update.

Macでの環境変数(environment variables)の設定方法

Last updated at Posted at 2014-03-09

対象

システムレベルでグローバルに有効にしたい環境変数の話。GUIアプリケーション上で有効にしたい、などが対象ユースケース。
ターミナルコンソール上で有効になる .bashrc.bash_profileexport A=hogehoge の話はここでは割愛。
下記のように、Mac OS のバージョンによって設定方法が違うので注意。 Mac OS 10.10 (Yosemite) 以降は一つ目の同じ方法で問題ない。

  • Mac OS 10.10 (Yosemite) 以降
    • Mac OS 10.11 (El Capitan), macOS 10.12 (Sierra), macOS 10.13 (High Sierra)
  • Mac OS 10.8 (Mountain Lion), 10.9 (Mavericks)
  • Mac OS 10.7 (Lion) 以前

ユースケース Use Case

  • JAVA_HOME 設定したい。M2_HOME 設定したい。
  • Android Studio で、ANDROID_HOMEANDROID_SDK_ROOT を設定したい。
  • API_KEY, CLIENT_ID, CLIENT_SECRET といった類のハードコードしたくない値を設定したい。
  • etc, etc

Mac OS 10.10 (Yosemite) 以降

  • launchctl を使う
  • 10.8 (Mountain Lion), 10.9 (Mavericks)で有効だった、 /etc/launchd.conf は、10.10 (Yosemite) 以降では 使えない。

設定手順 Procedure

基本的には2ステップ。
1. plist ファイルを作る。
2. そのファイルを、launchctl load する。

  • 1. plist ファイルを作る。
    • ファイルのパスは、主に以下2通り。
      • /Library/LaunchAgents/*****.plist : システム全体で有効になる。
      • ~/Library/LaunchAgents/*****.plist : ログインユーザのみで有効になる。
    • ファイル名は任意だが、 *****.plist とかにして、***** にはLabelの値を設定しておくと管理しやすい。
      • 下記は Label=setenv.M2_HOME としたときの、setenv.M2_HOME.plist のサンプル。
    • RunAtLoad=true で起動時に load される。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
  <dict>
  <key>Label</key>
  <string>setenv.M2_HOME</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/launchctl</string>
    <string>setenv</string>
    <string>M2_HOME</string>
    <string>/usr/local/Cellar/maven31/3.1.1/libexec</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>ServiceIPC</key>
  <false/>
</dict>
</plist>
  • 2. そのファイルを、launchctl load する。

これはすぐにその環境変数 plist を有効にしたいときに。再起動や再ログインせずに有効になるので便利。

launchctl load ~/Library/LaunchAgents/setenv.M2_HOME.plist 

値を修正したい場合にもう一度 launchctl load しても、下記のようにエラーになってしまうので、

launchctl load ~/Library/LaunchAgents/setenv.M2_HOME.plist 
/Library/LaunchAgents/setenv.M2_HOME.plist: Operation already in progress

一度、launchctl unload して、再度 launchctl load すればOK。

launchctl unload ~/Library/LaunchAgents/setenv.M2_HOME.plist 
launchctl load ~/Library/LaunchAgents/setenv.M2_HOME.plist 

参照 Reference

Mac OS 10.8 (Mountain Lion), 10.9 (Mavericks)

  • /etc/launchd.conf を使う
  • ~/.MacOSX/environment.plist は後述のように10.7 (Lion) 以前で有効。10.8 (Mountain Lion), 10.9 (Mavericks)では 使えない

設定手順 Procedure

  • 設定ファイルを編集。etc 下なので sudoで。
$ sudo vi /etc/launchd.conf
  • ファイル内容
setenv LANG ja_JP.UTF-8

注意 Notice

  • 変更後、マシン再起動が必要
    • ~/.launchd.conf はすでにdeprecated

参照 Reference

Mac OS 10.7 (Lion) 以前

  • ~/.MacOSX/environment.plist を使う
  • /etc/launchd.conf は前述のように10.8以降で有効。10.7 (Lion)では 使えない

設定手順 Procedure

  • まず初期状態では、.MacOSX ディレクトリは存在しない
$ mkdir ~/.MacOSX
  • 設定ファイルを編集。
$ vi ~/.MacOSX/environment.plist
  • ファイルの中身はXMLファイル。以下のような書式。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LANG</key>
<string>ja_JP.UTF-8</string>
</dict>
</plist>
  • ちなみにXMLなので、要素内で普通に改行が使える。JSONの値などを環境変数に持ちたい場合、改行つきの構造をそのまま設定できる。
<dict>
<key>FAVARITE_URL</key>
<string>
{
  "google" : "http://google.com",
  "twitter" : "http://twitter.com"
}
</string>
</dict>
</plist>

注意 Notice

  • この設定はOSにログイン時に設定されるため、変更後は再度ログインが必要。マシンの再起動までは不要。
80
77
2

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
80
77