【zsh】direnvで環境変数管理【初心者】


データベースの環境変数を管理管理する

どうも皆さんこんにちは!
筆者は現在railsでwebアプリケーションを作成しているのですが、
データベースの環境変数を定義する際に便利に使えるものがないか探していました。
そこで見つけたのが、direnv(GitHub: github.com/direnv/direnv)という環境変数管理ツールです!
今回はdirenvを使って簡単にできる、環境変数定義の紹介をします

前提条件

OS: MacOS, Catalina(バージョン10.15.7)
パッケージインストーラ: Homebrew
バージョン管理: git

direnvのインストール

パッケージインストーラとしてHomebrewを使っているので、
ターミナル(zsh)で以下のコマンドを実行するだけでよいです

brew install direnv

なお、筆者がMacを購入した時には既にzshが標準で設定されていたので、
bashから切り替える必要はありませんでした!

zsh以外のインストール方法については こちら から

hookする

direnvをきちんと使うにはシェルスクリプトとしてhookする必要があるようです。
一度hookを設定してしまえば、シェルを再起動するだけでdirenvが有効化されます!

vimを使って.zshrcファイルを編集します。以下のコマンドを実行します
vi ~/.zshrc

その後、ファイルの最後部に以下のような一文を加え、保存します。

.zshrc
eval "$(direnv hook zsh)"

何をやっているのか

  • eval "$変数名": 変数の内容をコマンドとしてシェルに実行させる
  • シェルスクリプトとしてフックする: コマンドの結果などを取得するための方法(要調査)

ファイルの編集

config配下の以下のファイルを編集します!

database.yml
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_PASSWORD'] %>

touch .envrc で.envrcファイルを新規で作成し、以下のように編集します。

.envrc
export DB_USERNAME=ログイン名
export DB_PASSWORD=パスワード

また、以下のコマンドを実行します(実行しないとエラーが出ました)。
direnv allow

ターミナルを再起動し、
作業ディレクトリへ移動した際に以下のようなログが流れれば設定は成功です!

ターミナル(zsh)
direnv: loading ~/(作業ディレクトリ)/.envrc                                                                                                                                           
direnv: export +DB_PASSWORD +DB_USERNAME

.gitignoreに.zshrcを追加

このままだと、gitに.zshrcファイルが反映されてしまい
せっかく環境変数を設定しても意味がなくなってしまうので、
.gitignoreファイルに.zshrcを追加しましょう!

終わりに

最後までご覧いただきありがとうございました。
シェルスクリプトってめちゃ便利なんですね
エイリアスなども簡単に設定できるようなので、
Dockerを使う際にも効率化のために導入してみたいと思ってます!

筆者はシェル初心者なので、誤った記載などあれば指摘くだされば幸いです。
それではまたどこかで!

参考にしたサイト

Macで環境変数を管理するためのdirenvの設定方法
【eval】コマンド - 文字列を評価、連結して実行する