10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】Render.comとNeonで作ったRailsアプリを無料デプロイした手順

Last updated at Posted at 2025-09-09

今回、個人で開発中のRailsアプリをRender.comとNeonにデプロイしました。

デプロイしたのは、Railsアプリのホーム画面を作った初期段階です。
開発環境では問題なく動作しても、本番環境ではエラーが出ることがあり、
ホーム画面が最低限動く段階で早めにデプロイしました。

今回の構成は以下です:

  • Ruby 3.3.6
  • Ruby on Rails 8.0.2.1
  • PostgreSQL
  • Docker(開発環境)

この記事の特徴

  1. ポートフォリオ向けに最適化した手順
    ・今回のRailsアプリの環境で必要な設定や注意点をまとめました
  2. 初めてデプロイする人へ
    ・必要な設定や注意点
    ・Docker コンテナ内での master.key や SECRET_KEY_BASE 作成手順
    を実際の画面のスクリーンショットなどを用いて説明しています。
    参考になれば幸いです。

1. config/database.yml を書き換え

config/database.yml を書き換えていきます。
このファイルは、アプリケーションが利用する データベースの接続情報 を記述する設定ファイルです。

接続情報(ユーザー名・パスワードなど)をソースコードに直接書くのは セキュリティリスク があります。
そこで、Render などの本番環境では 環境変数 を使って設定します。

config/database.yml
# productionの部分を下記の内容へ書き換える。
production:
  primary: &primary_production
    <<: *default
    url: <%= ENV['DATABASE_URL'] %>

ポイント

  • &primary_production
    • config/database.yml で複数の接続設定を共通化するとき、YAML のアンカー機能を使用
    • もし &primary_production がなければ、cache や queue、cable は 参照先が存在せずデプロイでエラーになる
  • url: <%= ENV['DATABASE_URL'] %>
    • 本番環境では、環境変数 DATABASE_URL を参照してデータベースに接続
    • 接続情報(ユーザー名やパスワード)をソースコードに直書きせず、安全に管理できる

・書き換え後はGitHubにpushすること
・複数DBを使わない場合 config/database.ymlの書き換え内容が変わるので注意してください

config/database.yml
# 複数DB使わない時の例
  production:
    <<: *default
    url: <%= ENV['DATABASE_URL'] %>
config/database.yml
# 複数 DB の設定例
production:
  primary: &primary_production
    <<: *default
    url: <%= ENV['DATABASE_URL'] %>

  cache:
    <<: *primary_production
    database: myapp_production_cache
    migrations_paths: db/cache_migrate

  queue:
    <<: *primary_production
    database: myapp_production_queue
    migrations_paths: db/queue_migrate

  cable:
    <<: *primary_production
    database: myapp_production_cable
    migrations_paths: db/cable_migrate

2. Neon でデーターベース作成

今回、Neonというデーターベース管理サービスを使って、データーベースを作成しました。

なぜ、Neonというデーターベース管理サービスを使ったかというと
・データベースが無期限で保持される
・使用した分だけ支払う従量課金制である
・ 開発中やアクセスが少ないときは自動スリープする

つまり 「開発中は無料、小規模サービスならずっと無料、大きく育ったら課金」というモデルで、個人開発や学習用途にぴったりだったからです。

1.ダッシュボードにて、[Create project] を選択します。
データベースに関する設定を求められるので、以下のように設定します。

・Project name: アプリ名
・PostgreSQL version: デフォルトのまま
・Cloud Service Provider: AWS
・RegionL: AWS Asia Pacific 1 (Singapore)

Region を「AWS Asia Pacific 1 (Singapore)」にした理由
開発者や想定ユーザーが日本の場合、シンガポールは日本と近くて 通信遅延が小さいため

スクリーンショット 2025-09-08 21.03.17.png

2.[Create] を選択すると、データベースが作成されます。

次は、このデータベースに Render.com から接続するための URL を入手します。

画面右上の [Connect] を選択します。
Connection string にデータベースへ接続するための情報が表示されます。

スクリーンショット 2025-09-09 5.45.16.png

注意
[Copy snippet] を選択するとpsql ' 'の部分もコピーされてしまう為、' '内のpostgresql:〜部分だけ、コピーするようにしてください。

コピーしたものは、メモ帳などに貼り付けてメモしておいてください。
あとで Render.com に設定するための環境変数として使います。

3.アプリ側に環境変数を設定

.envファイルに環境変数 設定

  1. もしまだなければ,プロジェクトのルートに .env ファイルを作成
  2. .env に接続URLを設定
.env
DATABASE_URL=先ほどコピーしたpostgresql:の部分を貼り付ける

⚠️ 重要!
この環境変数には データベースの接続情報(ユーザー名・パスワード) が含まれています。
絶対にGitHubにあげないこと!

3. .gitignore に、以下を必ず追加してください

.gitgnore
/.env*

これで、GitHubには.envファイルはあがらなくなります。

4. アプリ側でデプロイ準備

アプリに、render-build.sh ファイルを作成します。
ファイル作成後、下記のコードをコピペしてください。
これは、デプロイする度にプロジェクトを立ち上げるコマンドになります。

render-build.sh
set -o errexit

# 依存関係をインストール
bundle install
# CSS/JS のアセットを事前コンパイル
bundle exec rails assets:precompile
# 古いアセットを削除
bundle exec rails assets:clean
# DB マイグレーションを実行
bundle exec rails db:migrate

参考)Renderのドキュメント
ファイル作成後は GitHubにPushしてください

5. Render で Web Service 作成

  1. ダッシュボード右上から [+ New] > [Web Service] を選択します
  2. 次に、デプロイしたい GitHub リポジトリと Render.com を連携させます

[Git Provider] > [デプロイしたいアプリ] のリポジトリを選択すると、自動的に連携されます。
スクリーンショット 2025-09-09 5.59.32.png

設定を求められるので、以下のように設定します。

・Name: デプロイするアプリ名(デフォルトでも可)
・Language: Ruby
・Branch: main(デフォルトのまま)
・Region: Singapore
・Instance Type: Free
・Build Command:./bin/render-build.shへ変更。

注意
render-build.sh ファイルを作成してないとデプロイ時エラーになります。

6. Environment Variablesの設定

Render で Web Service に必要な環境変数を設定します。

WEB_CONCURRENCY デフォルトのまま

RAILS_MASTER_KEY config/master.key のファイル内の値をコピーして貼り付け

MASTER_KEYは、config/master.keyにあります
ない場合は、作成が必要です。

RAILS_MASTER_KEY の作成手順(Docker 環境の場合)

1.Dockerコンテナに入る

docker compose exec web bash

コンテナ内のシェルが開くので

rails credentials:edit

• この操作で config/master.key が生成されます
• Render の RAILS_MASTER_KEY には、このファイル内の値をコピーして貼り付けます

DATABASE_URL : 先ほどNeonでコピーしたpostgresql:〜からはじまるURL

RAILS_ENV :productionを 入力

SECRET_KEY_BASE :作成が必要

SECRET_KEY_BASE の生成手順

Docker コンテナ内で以下を実行

bin/rails secret

・ターミナルに表示されたランダム文字列をコピー
・Render の SECRET_KEY_BASE に貼り付ける

変数 説明 補足
RAILS_ENV 実行環境 本番なら production。Render は自動で設定される場合もあるけど明示的に書くと安心
RAILS_MASTER_KEY credentials.yml.enc を復号する鍵 Git には絶対上げない
DATABASE_URL 本番 DB 接続情報 Neon の接続 URL をそのまま入れる
SECRET_KEY_BASE Rails のセッション・cookie 暗号化キー bin/rails secret で生成したランダム文字列
WEB_CONCURRENCY Puma のワーカー数 Render の推奨に合わせて 2~5 程度。なくても動くが推奨

開発を進めていく中で、環境変数設定が必要になれば、つど追加してください。

これで、環境変数の設定は完了です。

7.デプロイ

ダッシュボード上の [Deploy Web Service] ボタンを押してください。
最新のコミットに基づきデプロイがはじまります。
しばらくするとデプロイが完了しますので、上の方に表示されている URL からアクセスできます。

注意
この時、エラーが出た場合は、ログを確認して原因を特定してください。
今回スリープ対策については記載してませんが、今後対応する予定です

参考記事

※自身の卒業制作向けに手順や補足、Docker 操作などを独自に追加しています

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?