OS X Yosemite 環境における Java エンコード設定の良い方法

OS X 環境における Javaエンコード設定については、
こちらの記事が参考になりました。

この記事中に、/etc/launchd.conf を使った launchctl の永続化が紹介されていますが、
OS X Yosemite 10.10 では、/etc/launchd.conf が使えなくなっています。



私の環境は、下記のとおりです。

そもそも環境変数を設定する良い方法は?

広く知られている方法としては、
.bash_profile, .bashrc に export で記述することです。

# 例
export PATH=$PATH:/usr/local/mysql/bin/

この手法はシェルログインの場合は有効ですが、GUI ツールからは環境変数を拾うことが出来ません。
では OS X 環境では、どうすると一番良いのでしょうか?
これは stackoverflow で議論されています。

Setting environment variables in OS X?

OS Xlaunchctl setenv を使うのが良い方法です。

例えば環境変数 LANG に "ja_JP.UTF-8" を定義したいとします。
その場合、

$ launchctl setenv LANG ja_JP.UTF-8

を実行した後で、PC をリブートすると環境変数 LANG が有効になります。

$ echo $LANG
> ja_JP.UTF-8

launchctl の設定を永続化するには、
OS X Yosemite 以降は plist を使います。

詳細はこちらを御覧ください。
http://www.dowdandassociates.com/blog/content/howto-set-an-environment-variable-in-mac-os-x-launchd-plist/

例えば先ほどの LANG を永続化する場合、下記のような設定ファイルを作成・配置します。

<?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.FOO</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/launchctl</string>
    <string>setenv</string>
    <string>LANG</string>
    <string>ja_JP.UTF-8</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>ServiceIPC</key>
  <false/>
</dict>
</plist>

このファイルを

  • /Library/LaunchDaemons/setenv.LANG.plist
  • /Library/LaunchAgents/setenv.LANG.plist

のいずれかに配置します。
LaunchDaemons に配置した場合、OS 起動時に実行されますが、GUI 環境には適用されません。
LaunchAgents に配置した場合、ユーザーごとに起動され、GUI 環境にも適用されます。

あとは、これを launchctl に登録します。

$ sudo launchctl load /Library/LaunchAgents/setenv.LANG.plist

PC を再起動すると有効になります。


Java の設定

上記の launchctl の永続化を使い、環境変数 LANG を設定するのが良い方法のようです。