4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】Neonのブランチ機能を使用して開発環境用のDB構築をする

4
Last updated at Posted at 2025-12-31

rails_neon_image3.png

経緯

個人開発にて小規模なアプリを制作していく中で、DBはテーブル数が少なく外部キーや複雑な制約を持たないシンプルな設計のため、ローカルにDBを立てず本番環境で使用予定であるNeonのブランチ機能を使って開発環境用のDBを構築してみることにしました。

クラウドに開発用DBを構築するメリット・デメリット

クラウドに開発環境用のDBを置くことにより以下のメリットがあると考えています。

  • 本番と差異の無い開発環境を構築出来る
  • ローカルにDBサーバーを立てる手間が不要
  • ローカルの環境に起因するDB周りのトラブルが防げる

反対に、以下のデメリットが挙げられると考えます。

  • DB環境がネット環境に依存する
  • ローカルDBでは感じないレイテンシ(遅延)が発生する
  • 本番環境と隣り合わせの環境のため、設定ミスや操作ミスが本番環境のデータ破壊につながりかねない

これらを踏まえると、ローカルDBであれば接続先を誤るリスクがなく、最悪の場合でも環境を作り直せるため破壊的な検証を心理的負荷なく行うことができます。

ローカル環境で実装・検証を行い、その後クラウドのdevelopブランチで試行したうえで最終的にmainブランチへ反映する、という運用がより安全で確実そうです。

実装内容

Neonのブランチ機能を使用し、developブランチに開発環境用のDBを構築

環境

  • Windows
  • WSL2
  • Docker
  • Rails 7.2
  • Ruby 3.3
  • postgreSQL

実装手順

本記事では、Neonでのユーザー登録、プロジェクト作成については省略します

1. gem pgのインストール

RailsでpostgreSQLを使用するためのgemを追加します。

# gemfile

gem "pg"
# terminal

bundle install

2. 該当プロジェクトにてdevelopブランチの接続パスを取得

1. プロジェクトのダッシュボードにて、サイドメニューのBRANCHからdevelopmentを選択します
接続設定1.png

2. 接続に必要な情報を取得します
接続設定2.png

この時、Branchがdevelopmentであるか確認しておきます
接続設定3.png

3. .envファイルに接続設定を記述

上の画像のconnection stringが接続パスで、以下のように書かれています。

psql 'postgresql://neondb_owner:kokogapassword@ep-kokoni-arunoga-hostname-dayo.ap-southeast-1.aws.neon.tech/neondb?sslmode=require'

構造としては以下の通りです

postgresql://<DB_USER>:<DB_PASSWORD>@<NEON_HOST>/<DB_NAME>?sslmode=require

gitでプロジェクトを管理しているため、開発環境用のDB接続情報として.env ファイルにdevelopブランチの接続設定を記述します。

上記した接続パスを例にすると以下のような記述となります。

# .envファイル

# ホスト名
DATABASE_HOST="ep-kokoni-arunoga-hostname-dayo.ap-southeast-1.aws.neon.tech"

# データベース名
DATABASE_NAME="neondb"

# データベースユーザー名
DATABASE_USER="neondb_owner"

# パスワード
DATABASE_PASSWORD="kokogapassword"

4.database.ymlに環境変数の設定

.envファイルに書いた接続設定を読み込ませるため、config/database.ymlに環境変数をセットします。

# config/database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS", 5) %>
  host: <%= ENV["DATABASE_HOST"] %>
  database: <%= ENV["DATABASE_NAME"] %>
  username: <%= ENV["DATABASE_USER"] %>
  password: <%= ENV["DATABASE_PASSWORD"] %>
  sslmode: require

5.接続確認

# terminal

rails db:version

=> database: neondb

上記のコマンドを実行し、DBのバージョンが出力されれば接続が成功しています。

より厳密に確認したい場合は、以下のコマンドを実行することで確認が可能です。

# terminal

rails c
ActiveRecord::Base.connection_db_config.host

=> # ホスト名が出力されるので、Neonのdevelopブランチの情報と相違ないか確認可能

実際にテーブルを作ってみる

# terminal

rails g model Comment body:string
rails db:migrate

Neonのプロジェクトからテーブルを確認してみるとcommentテーブルが出来ており、カラムも反映されていることが確認できました
スクリーンショット 2025-12-31 144707.png

スクリーンショット 2025-12-31 144822.png

以上

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?