はじめに
Rails 8.0 を色々と触って試そうと、開発環境の構築からデプロイまでを行うことしたのですが、rails-new App や Dev Containersを使ってサクッと構築することができそうだったので手順をまとめました。
できること
- Dev Containers を使った Rails 8.0 の開発環境の構築
- Docker での Render.com への自動デプロイ
用意するもの
- Docker
- VS Code (Visual Studio Code)
- VS Code の Dev Containers Extension
- rails-new app
- GitHub のリポジトリ
- Render.com のアカウント
1. rails-new App を使った Rails 8 アプリケーションの作成
rails-new を使うと Docker を用いてローカルの Ruby 環境の影響を受けずに環境を構築できます。
README のインストール手順を参考にインストールします。
プロジェクトの作成
今回はDBに PostgreSQL を使用するのでオプションに指定して実行します。
rails-new --ruby-version 3.3.6 --rails-version 8.0.0 --devcontainer --database=postgresql app-name
作成されたプロジェクトを VS Code で開くと、 Dev Container でプロジェクトを開くためのダイアログが表示されるので実行します。
コンテナ内のターミナルで Rails の状態を確認します。(以降の操作は全てコンテナ内のターミナルで行います。)
$ rails --version
Rails 8.0.0
開発サーバーの起動
bin/dev
で開発サーバーを起動できます。
$ bin/dev
=> Booting Puma
=> Rails 8.0.0 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 6.5.0 ("Sky's Version")
* Ruby version: ruby 3.3.6 (2024-11-05 revision 75015d4c1f) +YJIT [aarch64-linux]
* Min threads: 3
* Max threads: 3
* Environment: development
* PID: 32917
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop
これで開発環境が作成されました。
(Option) Scaffold
適当なモデルを Scaffold で作成しておきます。
$ rails g scaffold Post title:string
$ rails db:migrate
確認用にルートも変更しておきます。
config/routes.rb
Rails.application.routes.draw do
resources :posts
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
# Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
# Can be used by load balancers and uptime monitors to verify that the app is live.
get "up" => "rails/health#show", as: :rails_health_check
# Render dynamic PWA files from app/views/pwa/* (remember to link manifest in application.html.erb)
# get "manifest" => "rails/pwa#manifest", as: :pwa_manifest
# get "service-worker" => "rails/pwa#service_worker", as: :pwa_service_worker
# Defines the root path route ("/")
root "posts#index"
end
開発環境で動作確認
これで Rails アプリケーション側は準備完了です。
GitHub リポジトリにプッシュしておきます。
$ git remote add origin git@github.com:user-name/app-name.git
$ git push origin main
2. Render.com へのデプロイ
PostgreSQL DB の作成
- Database, User は
config/database.yml
の内容と合わせておく - Region は Asia だと現状は Singapore しか選択肢が無い
設定内容
Name: any name
Project: any
Database: app_name_production
User: app_name
Region: Singapore
PostgreSQL Version: 16
Plan Options Instance Type: Free
web service の作成
GitHub リポジトリとの連携が必要です。
設定内容
Source Code: rails app repository
Name: rails app name
Project: any
Language: Docker
Branch: main
Region: Singapore
Instance Type: Free
Environment Variables:
WEB_CONCURRENCY: 2
RAILS_MASTER_KEY: `config/master.key` の値
DB_HOST: 作成済みのPostgreSQL DB の Info -> Connections -> Hostname の値
APP_NAME_DATABASE_PASSWORD: 作成済みのPostgreSQL DB の Info -> Connections -> Password の値
Deploy Web Service を実行するとデプロイが開始されます。
デプロイが完了したら動作確認して終了です。お疲れ様でした。
まとめ
rails-new によってローカル環境の Ruby, Rails が不要になったのは手軽に環境が構築できていいですね。
Rails on Docker の開発環境が短時間で作れるので、Docker デプロイに対応した PaaS と併用して、サクッと作ったものを公開するのにも丁度に良さそうです。