macOSでlaunchctlを使ってアプリの環境変数を設定する
BashやZshなどのシェルで環境変数を設定することはよくあると思います。
シェルではなくアプリで環境変数を使いたいと思ったことはないですか?私はとあることで必要にせまれて調べたところ launchctl
コマンドを使えばアプリで環境変数を使うことができることがわかりました。
launchctlコマンド
環境変数を設定する方法です。
launchctl setenv [キー] [値]
設定された環境変数は次の方法で確認することができます。
launchctl getenv [キー]
なお、launchctlコマンドは masOS10.10(Yosemite)
以降で使うことができます。
再起動しても反映されるようにする
launchctlコマンドで設定した環境変数は再起動すると削除されてしまいます。 .bash_profile
などに書くように再起動しても反映されるようにしたいものです。
システムの起動時に、コンピュータをセットアップするためにカーネルによって実行される最初のプロセスである launchd
を利用することで解決することができます。
次のようなplistファイルを用意します。ここでは apikeys.environment.plist
という名前にし、 MAPS_API_KEY
という名前で 123456789abc
という値を設定しています。
<?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>
<!-- Labelの値は何でも良いがファイル名と同じにする -->
<string>apikeys.environment</string>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>setenv</string>
<!-- キー -->
<string>MAPS_API_KEY</string>
<!-- 値 -->
<string>123456789abc</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
このファイルを次の位置に配置します。
- 全ユーザに環境変数を適用したい場合: /Library/LaunchAgents/
- 1ユーザのみに環境変数を適用したい場合: ~/Library/LaunchAgents/
これで再起動しても環境変数が設定されるようになります。
※launchdについては詳しくはApple公式を参照してください。