LoginSignup
2
2

More than 3 years have passed since last update.

Amazon Linux (EC2)でdirenvをセットアップする

Last updated at Posted at 2019-11-24

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が入っていないよ:baby:という方は以下のようにすれば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のインストールができました:santa:
あとは .bashrcあるいは.zshrcに以下を1行記載しておきましょう。

$ sudo vim ~/.bashrc
// 末尾などに記載
eval "$(direnv hook bash)" 

あとは.bashrcの変更を読み込めばOKです。
sourceコマンドで.bashrcの変更を読み込みましょう。

$ source ~/.bashrc

これでdirenvが入ります。念のため、バージョンを確認しておきましょう。

$ direnv version
2.20.1

無事にdirenvをインストールできました:dancer:
これ以降は /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を追記してあげれば良さそうですね。

2
2
0

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
2
2