ローカル開発環境向けRuby on Rails Docker環境
Mikhail Tereschenko
2022年11月2日
0 分で読めますRuby開発者の皆さん、こんにちは!ローカル開発環境にRuby on RailsのDocker環境を効率よく構築する方法をお探しなら、この記事が役立ちます。この記事は、ローカル開発用にmacOSへRubyをインストールする方法を紹介した前回の記事の続編です。
Ruby on Railsプロジェクトを構築する際、Ruby開発者はデータベースのほか、開発環境に必要な前提条件にも対応する必要があります。しかし、これらをすべてホストOSにインストールし、必要なバージョンを正確にそろえるのは、難しい場合があります。
新しいプロジェクトを作成するたびに、ボタンひとつで新しくクリーンな環境を作れたらと思っていました。そこで、Dockerのdocker-compose.ymlを使って簡単に起動・停止できる、Dockerベースの環境を作ることにしました。
Docker Composeとは?
Docker Composeは、プロキシ、データベース、ボリュームマウントなどのアプリケーションやサービスを設定して連携させ、再利用可能な方法でプロビジョニングできるInfrastructure as Code(IaC)ツールです。Dockerソフトウェア一式の一部としてインストールされ、YAMLを使って定義します。
このDocker Composeによるローカル開発環境は、さまざまな種類のプロジェクトに利用でき、Ruby on Railsだけに限定されません。個人開発のプロジェクトやフロントエンドのクライアントサイドプロジェクトにも使えます。自分のホストOSを変更するのではなく、Docker環境を使う主な理由は次のとおりです。
設定が簡単
ロジックと環境を簡単に分離できる
複数のプロジェクトで同じ環境を簡単に使える
機密コードを含めずに、サポートが必要な人と環境を簡単に共有できる
ホストマシンをクリーンな状態に保てる
Ruby on RailsのDocker環境
ローカル開発用のRuby on Rails Docker環境をセットアップするには、次のものが必要です。
Unix系OS(私はmacOSを使っていますが、UbuntuなどのLinuxディストリビューションも利用できます。Windowsでも動作するはずです)
make(3.81以降)
Docker(19.03.12以降)
docker-compose(1.26.0以降)
お好みのテキストエディター(私はVisual Studio Codeを使っています)
必要なものがそろったら、さっそく始めましょう。記事を読む時間がない方は、必要な手順と、これから確認するすべてのスニペットのソースコードを含むオープンソースリポジトリはこちらです。すでにこの記事を読んでいる方は、手順に沿って進めてください。
まずは、説明を簡単にするため、foo_bar_projectという名前のRuby on Railsプロジェクトを作成します。
1) Docker Compose環境の設定を取得し、Gitリポジトリを削除します。Gitのソースコードリポジトリで変更履歴をすべて管理したい場合は、後から独自のものを作成できます。
以降の手順は./environmentディレクトリ内で実行します。コマンドをそのディレクトリ内で実行していることを確認しましょう。
2) 次に、この環境設定にプロジェクト名を割り当てます。デフォルトはtest_projectです。ここでの手順では、先ほど説明したfoo_bar_projectに変更します。そのためには、./environment/.env.exampleファイルを編集し、PROJECT_NAME変数の値を変更してください。変数の値には小文字のスネークケースを使うことが重要です。
3) 次のコマンドを実行して、プロジェクトを作成します。
ご覧のとおり、applicationという新しいフォルダーが作成され、その中にRuby on Railsのコードが入っています。
4) 次に、Docker Composeでローカル開発環境をビルドします。アプリケーションのDockerfileまたはGemfileを変更した場合は、必ずこの手順を実行してください。
5) これで、次のようにRubyのローカル開発環境を起動できます。
ここでは、まだRuby on Railsアプリケーションは起動していません。起動するには、Docker環境のシェルを開き、railsプロセスを開始するよう指示する必要があります。次のように実行します。
ローカル開発環境向けRuby on Rails Docker最後に、ブラウザーを開いてhttp://foo_bar_project.localhost/にアクセスすると、先ほど作成したRuby on Railsプロジェクトが表示されます。
では、これで何ができるようになったでしょうか?
プロジェクトには、実行に必要なものがすべて含まれた環境ディレクトリと、アプリケーションコードが含まれたapplicationディレクトリがあります。このディレクトリはDockerコンテナにマッピングされるため、Ruby Dockerイメージから完全にアクセスできます。
Rubyシェルにすばやくアクセスできるため、Rails、Rake、BundlerなどのRubyツールチェーンをローカルにインストールする必要はありません。
make shellコマンドを実行した後に、各種コマンドを実行できます。このDocker Composeプロジェクトの設定には、あらかじめ2つのステージが用意されています。Rubyアプリケーションをどこかにデプロイする必要が生じた場合は、独自のステージを作成できます。とても簡単です。
上記のRuby on Rails用Docker環境の仕組みに興味がある方のために、Ruby Dockerイメージ、Makefile、そして全体を連携させるDocker Composeの定義に分けて解説します。
Ruby Dockerイメージ
まず、Ruby Dockerイメージは欠かせない要素です。Dockerイメージレイヤーのキャッシュを効率よく再利用できるように正しくビルドすることも、ローカル開発環境に関するその他の考慮事項と同様に重要です。
以下はRuby DockerイメージのDockerfileです。
ご覧のとおり、正常に機能するRuby on Railsアプリケーション環境に必要な、次のような周辺設定を前提としています。
Ruby on Railsのデータベース接続情報を設定する
database.ymlファイル開発環境でのRuby on Railsの実行時設定を行う
development.rb
これは、./environment/containers/ruby/initializersディレクトリにあるrunners.shスクリプトを使って実現します。
このDockerfileではマルチステージDockerも利用しているため、同じ設定をテストやステージングなど異なるワークフローで使う場合に、特定の部分を各環境で効率よく再利用できます。
Rails用Docker Compose
`./environment/docker-compose.development.yml`にあるDocker Composeファイルは、Docker上でRuby on Railsアプリケーションを動かすために、次のサービスを連携させます。
nginx HTTPサーバー
Rubyアプリケーション
PostgreSQLデータベースサーバー
この設定で使用するRails用Docker Composeファイルは次のとおりです。
Docker用Makefile
最後に、開発者がこのRubyのローカル開発環境を簡単に操作できるインターフェースを用意するため、Makefileを使用します。
Rubyアプリケーションを効率よく実行する
この記事を通じて、Dockerコンテナの設定を使い、Ruby on RailsなどのRubyアプリケーションをローカル環境で実行するスキルを身につけていただけたら幸いです。ローカルでRubyアプリケーションを動かす方法としては、Ruby仮想環境を使う方法もあります。詳しくは、以前の記事macOSにRubyをインストールする方法をご覧ください。
Rubyの開発環境が整ったら、Rubyアプリケーションのセキュリティ対策についても学んでみませんか。Rubyのセキュリティについては、次の記事をご覧ください。
開発者ファーストのコンテナセキュリティ
Snykは、コンテナイメージとKubernetesワークロードの脆弱性を検出し、自動的に修正します。



