Docker を使って Ruby on Rails 環境を構築する方法 を学びます。
Dockerfile を一行ずつ作成しながら学習 し、最終的に Rails アプリを起動できる状態にすることがゴールです。
[学習フェーズ]
Ruby on Rails を動かすために必要なもの
Ruby on Rails は Web アプリケーションを作るためのフレームワーク ですが、単体では動きません。
いくつかの 必須コンポーネント を組み合わせることで、初めて Rails アプリを動かすことができます。
以下の 4 つの要素を押さえておきましょう。
① Ruby
Ruby on Rails は Ruby というプログラミング言語で動作するため、まず Ruby が必要 です。
Rails の内部では、Web リクエストの処理やテンプレートエンジン、データベース操作などを Ruby のコードで記述します。
FROM ruby:3.2
② Node.js & Yarn
Rails は JavaScript も扱う ため、Node.js と Yarn(パッケージマネージャー)が必要です。
特に、フロントエンドの JavaScript の処理や、Rails の アセットパイプライン(CSS や JS の管理)で使用されます。
RUN apt-get update && apt-get install -y nodejs npm && npm install -g yarn
✅ Node.js が必要な理由
- フロントエンドの JavaScript を Rails で動かすため
- Rails 7 では
importmap-rails
などが Node.js に依存
✅ Yarn が必要な理由
- JavaScript のライブラリをインストール・管理するため
③ データベース
Web アプリでは、ユーザー情報や投稿データを保存するための データベース が必要です。
Rails では、主に以下のデータベースを使用します。
データベース | 特徴 |
---|---|
SQLite | Rails に標準搭載。小規模な開発向け |
MySQL | 大規模アプリや AWS などのクラウド環境でよく使われる |
PostgreSQL | データ分析やエンタープライズ向け |
今回の環境では、SQLite を使うので --database=sqlite3
を指定して Rails プロジェクトを作成します。
docker run --rm -v "$(pwd):/app" -w /app my-rails-app rails new . --force --database=sqlite3
④ Gemfile & Gemfile.lock
Ruby on Rails では、プログラムの部品(ライブラリ)を Gem という形式で管理します。
どの Gem を使うかを記載するのが Gemfile
、
実際にインストールされたバージョンが Gemfile.lock
に記録される という仕組みです。
✅ Gemfile の例
source 'https://rubygems.org'
gem 'rails', '7.1'
✅ Gemfile.lock の例
rails (7.1.0)
actioncable (= 7.1.0)
actionmailer (= 7.1.0)
activerecord (= 7.1.0)
...
[実践フェーズ]
ゼロからRuby on Rails用のdockerfileを作成してみましょう。dockerfileを作成するには、docker runコマンドで1行ずつ検証していくことが重要です。
まずは、ruby:3.2
の公式イメージを使って、Ruby の環境が動くか試してみます。
docker run --rm -it ruby:3.2 irb
🔹 ポイント
--rm
→ コンテナ終了時に削除-it
→ 対話モードruby:3.2
→ Ruby の公式イメージirb
→ Ruby の対話シェルを起動
無事にRubyの立ち上がりを確認できれば、dockerfileに追記していきます。
ここまでの Dockerfile
を確認すると、以下のようになっているはずです。
FROM ruby:3.2
このように1つずつ検証し、dockerfileを作成してみてください。
概要手順は以下となります。
- Ruby をインストール
- Node.js と Yarn をインストール
- Rails をインストール Gemfile を作成し、必要なライブラリを定義
bundle install
で Gem をインストール- Rails プロジェクトを作成
- volumeを作成
rails db:setup
でデータベースを初期化rails server
でアプリを起動 (port 3000)- コンテナとボリュームの削除(クリーンアップ)
以下のようなウェルカムページが表示されれば成功です。
