Rails & docker-compose のマイクロサービスで開発する時に環境変数の設定はどうしてるんだろう

公開日:2018-11-22
最終更新:2018-11-22
※この記事は外部サイト(https://qiita.com/booink/items/1358c9c6f83...)からのクロス投稿です

CIを回すためのRSpecやRuboCop環境を整えていく中で、つい昨日まで開発環境が「不便だなぁ」と感じていたこと、皆さんはどのように解決しているのか気になったので投稿してみました。

今携わっているプロジェクトの開発環境

  • Ruby 2.5.3
  • Rails 5.2.1
  • docker-compose version 1.23.1
  • docker-compose.yml version '2'
  • 20個近くの独立したDockerコンテナ
    • Railsが動いていたり
    • lambdaのモックがあったり
    • S3のモックがあったり

不便だなぁと感じていたところ

  • RSpecやRuboCopを回すためにDockerコンテナに docker exec -it hoge-container bash で入り、bundle exec guard --force-polling で監視しながら結果を逐次確認する作業が必要になる
  • Railsの起動には色々な環境変数の設定が必要で、環境変数はdocker-compose.ymlに一元管理されている
    • 自分のマシンは MacBook なのでterminal-notifierを使ってRSpecやRuboCopの結果を見たいが、ローカル環境でguardを立ち上げるために、毎回Dockerコンテナ毎の環境変数を設定しなくてはならない
    • Dockerコンテナでguardを立ち上げたり回したりすると重い & 遅い。Dockerコンテナ上だとterminal-notifierが使えない
  • RSpecやRuboCop用のguardコンテナを別途立ち上げるのも検討したが、
    • terminal-notifierが使えない
    • コンテナが増えることでマシンの負荷が増える
    • guardのREPL?が使えない
    • ログがdocker-compose logs に紛れる

など、自分の知識が足りないだけでもっといい方法があるような気がしますが、 昨日までこのようなモヤモヤを持ちながらひたすらに開発を進めていました。

(自分の中では)解決策

自分と自分以外の人が開発しやすく、環境を共有しやすい方法が無いか昨日の夜から真剣に一晩悩んで、今朝試してみたところうまくいきそうだったので一気に環境を作り、夜になった今ではかなり快適になったので、ここにその解決法を残しておきます。 あくまで自分の印象として快適になった、というだけでまだ自分以外に共有されていないので、周りの反応は来週以降にならないとわかりません。

docker-compose.yml を読み込んで Rails 内で環境変数を設定する gem を作った

docker_compose_yaml_loader です。 プロジェクトの開発環境ではエラーや不具合がないレベルでしか作られていないので、もしかするとうまく処理できないことがあるかもしれませんが、今のところ問題なく動いています。

使い方

Gemfile

group :development, :test do
  gem 'docker_compose_yaml_loader'
end

config/test.rb

DockerComposeYamlLoader::Environments.setup(Rails.root.join('./docker-compose.yml'), key: 'webapp') do |env|
  env.set('DATABASE_HOST', '127.0.0.1') # docker-compose.ymlのままだと動かない設定は、上書きできる
  env.set('DATABASE_PORT', '13306')
end

これだけの設定で、docker-compose.ymlの設定を流用でき、重複定義にならず定義場所が散らばらないようにできました

上記の解決方法がベストなのかどうか、今でも自信がありません。

皆さんの開発環境ではどのような設定やツールでストレスの少ない開発環境を実現しているのか、コメントしていただけるととても嬉しいです。

乱筆・乱文なのは重々承知の上で、記事を投稿してしまうことを何卒お許しください。

記事が少しでもいいなと思ったらクラップを送ってみよう!
0
+1
@jxXUtsK5Y2o3L38Fの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする