direnvとは?
direnv
とは、ディレクトリごとに環境変数を定義することができるツール(コマンド)です。
つまり、他のディレクトリに影響を及ぼさない変数を定義できるということです。direnv
によって定められた環境変数はカレントディレクトリ(自分が今いるディレクトリ)でのみ有効になります。
通常の環境変数はプロジェクト全体に作用することが一般的ですが、direnv
ではディレクトリごとに設定できるので、より細かく環境変数を設定したい場合などに非常に有効です。
今回はAmazon Linux(EC2インスタンス)にデプロイするときにdirenv
コマンドが入っておらず困ったので、そのインストール方法を残しておきます。
お手元のMacOSにdirenv
を入れたい場合などは、他のページをご覧になるとわかりやすいですが、当ページでも基本的にやっていることは同じなので一部参考になさってください。
今回の環境は以下になります。
Amazon Linux
CentOS 6
direnvのインストール
ローカルのMacOSなどでhomebrewが入っていればbrew
コマンドを使ってこのように簡単にインストールすることができます。
$ brew install direnv
Amazon Linuxにhomebrewが入っている場合は上記の方法でインストールすれば良いです。(その方が簡単!)
もし、brew
が入っていないよという方は以下のようにすればhomebrewを入れることなくdirenv
を無事にインストールできます。
$ cd /var/www/html
$ sudo git clone https://github.com/direnv/direnv
$ cd direnv
$ sudo make install
この sudo make install
の時点で bash: go: コマンドが見つかりません
となった場合、それはAmazon Linuxに go
が入っていないだけですので、yum
で入れてあげましょう。
$ sudo yum install golang
これでgo
が入るはずです。バージョンを確認します。
$ go version
go version go1.12.8 linux/amd64
確かに入っていますね。
これで先ほどのbash: go: コマンドが見つかりません
のエラーは解消されているはずですので、もう一度試しましょう。
$ cd /var/www/html/direnv
$ sudo make install
これで direnv
のインストールができました
あとは .bashrc
あるいは.zshrc
に以下を1行記載しておきましょう。
$ sudo vim ~/.bashrc
// 末尾などに記載
eval "$(direnv hook bash)"
あとは.bashrc
の変更を読み込めばOKです。
source
コマンドで.bashrc
の変更を読み込みましょう。
$ source ~/.bashrc
これでdirenv
が入ります。念のため、バージョンを確認しておきましょう。
$ direnv version
2.20.1
無事にdirenv
をインストールできました
これ以降は /var/www/html/direnv/*
は不要なディレクトになりますので、削除しても構いません。
$ cd /var/www/html
$ sudo rm -r direnv/
direnv
を実際に使ってみる
direnv
の一番基本的な使用方法を紹介しておきます。
まず環境変数を定義したいプロジェクトproject
に移動します。
環境変数はディレクトリごとに定義すると冒頭で言いましたが、今回はproject
のルートディレクトリ/
で管理してみます。
// 環境変数を定義したいあなたのディレクトリへ移動します。
$ cd /var/www/html/project
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.
何やら怪しいエラーを吐いていますが、なんてことはありません。エラー文の指示通りに
$ direnv allow
としてあげましょう。
今後もこういったエラーを吐くことがありますが、その度にdirenv allow
を呪文のように唱えればOKです。
さて、このディレクトリに.envrc
というファイルを新しく作成して、このファイルに環境変数を定義します。
$ echo export ENV_USERNAME=hogehoge >> .envrc
$ echo export ENV_PASSWORD=hugahuga >> .envrc
これで.envrc
に環境変数を定義できているはずです。
.envrc
ファイルの中身はこのようになっているはずです
export ENV_USERNAME=hogehoge
export ENV_PASSWORD=hugahuga
また、コマンドラインから.envrc
の中身を確認することも可能です。
$ echo ${ENV_USERNAME-nope}
hogehoge // OK (nopeの場合は設定に不備があります)
$ echo ${ENV_PASSWORD-nope}
hugahuga // OK (nopeの場合は設定に不備があります)
上記のようになれば環境変数を定義できています。
実際に、このディレクトリに改めて移動すると、環境変数が有効になっていることが確認できます。
$ cd ~
// 環境変数が無効化
direnv: unloading
$ cd /var/www/html/project
// 環境変数が有効化
direnv: loading .envrc
direnv: export +ENV_USERNAME +ENV_PASSWORD
.envrc
は絶対にcommitしない
.envrc
にはパスワードなどの機密情報を記載することが一般的です。
これはGitないしはGitHubなどを使用する際の汎用的な注意点ですが、 パスワードなどの情報が記載してあるファイルは絶対にcommitしない ように注意しましょう。
これを防ぐためには、例えば.gitignore
に.envrc
を追記してあげれば良さそうですね。