Railsで環境変数を使う理由
下記のようなGithubに上げたくないような情報などはアプリに組み込まずにOSの環境変数に設定して読み込ませるようにするのが普通です。
- S3のバケット名
- AWSのアクセスキー
- MySQLのパスワード
- 各種APIのアクセスキー
Railsで環境変数を設定するパターン
direnvにて設定するパターン
開発環境特有の環境変数を設定したい場合に使われます。direnvというツールを使えば該当のプロジェクトにディレクトリ移動した際に自動で設定できます。設定したファイルは.gitignoreに必ず設定するようにしましょう。
Railsで環境変数を利用するパターン
アプリ内で利用するパターン
RubyのENVオブジェクトから取得できます。下記のようにキー名を指定すれば欲しい環境変数を取得できます。
1 |
ENV['キー名'] |
docker-composeで利用するパターン
$環境変数名やargsにて利用することができます。基本はこちらを使うことになるでしょう。
Dockerfileで利用するパターン
ロケールやタイムゾーンなど。固定値は埋め込んでしまっても良いでしょう。
ただ、こうした情報はアプリケーションコードやDockerfileに埋め込んでしまうのは非常に危険なので注意しましょう。
- APIアクセスキー
- データベースへのアクセス情報
どの環境で起動するかの設定
環境変数「RAILS_ENV」で決まります。
起動
下記のように起動コマンドを実行した場合は、デフォルトで「development」環境が選ばれます。
1 |
rails s |
環境を指定して起動したい場合は下記のように指定します。
1 |
rails s RAILS_ENV=production |
Railsでよく使う環境変数
主にDockerを使って環境構築を行うかと思いますが、その際によく使う環境変数をご紹介いたします。
DBコンテナ
環境変数 | 説明 |
---|---|
MYSQL_ROOT_PASSWORD
|
MySQLのrootパスワードを設定します。 |
Webコンテナ
環境変数 | 説明 |
---|---|
BUNDLE_PATH
|
「BUNDLE_PATH=/app/vendor/bundle」等と指定することでbundle installした際のGemのインストール先をここに設定します。
|
DEV_HOST
|
ホスト名を記述します。 |
S3コンテナ
開発環境ではs3の代わりとなるminioを使うことになると思います。
環境変数 | 説明 |
---|---|
MINIO_ACCESS_KEY
|
minioのアクセスキー |
MINIO_SECRET_KEY
|
minioのシークレットキー |
APサーバのコンテナ
APサーバ(Rails等)ではAWSにアクセスすると思いますので、下記のように設定します。
環境変数 | 説明 |
---|---|
AWS_ACCESS_KEY_ID
|
AWSのアクセスキー |
AWS_SECRET_ACCESS_KEY
|
AWSのシークレットキー |
他の手法
AWSを使っているのであれば今は以下の方法もあります。
Secrets Managerを使う。
ECSタスク内にマッピングできます。
SSMパラメータストアを使う。
なお、こちらを扱う場合はプレーンテキストを扱うstring定義と、暗号化されたパラメータを扱うsecure string定義がある。機密情報を扱う場合は「secure string定義」を使うと良い。
direnvとは?
ディレクトリごとに環境変数を設定することができるツールです。
メリット
- 開発しているアプリごとに環境変数を変えたい場合に重宝する。
- セキュリティ上、GitHubに残したくないがサーバーからユーザーに提供したい情報を環境変数として扱う。
ユースケース一覧
- AWSの環境変数を使いたい場合(AWS_PROFILE、AWS_DEFAULT_PROFILE)
- APIの秘密鍵
埋め込みたい環境変数を設定
1 |
direnv edit . |
下記コマンドを実行すると「.envrc」というファイルが生成されます。この中に下記のように環境変数を埋め込んできます。
1 2 |
export 環境変数名1=変数内容1 export 環境変数名2=変数内容2 |
この記事へのコメントはありません。