Help us understand the problem. What is going on with this article?

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

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を追記してあげれば良さそうですね。

qiiteinai
資格Times (https://shikakutimes.jp) という資格情報メディアでCTOを務めています。 ご興味がある方はメールアドレス宛にご連絡ください! 得意な領域や言語 Laravel | Nuxt.js | AWS
https://shikakutimes.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした