なんじゃくにっき

プログラミングの話題中心。

無料から使えるPostgresqlのNeonをRailsから使ってみる

概要

無料から使える(※2024年5月時点)Database SaaSNeonを使います。

Neonとしては提供しているのは本当にPostgresqlの部分だけで、アプリケーション部分は別途用意する必要があります。

アプリケーションにNext系のものを使う場合はVercelがNeonと連携しているので、Vercelで使うのが楽なんじゃないかと思います。

というわけで、それ以外のもので、ということでRailsからNeonを使ってみます。

サインアップ

https://neon.tech/

Neonのアカウントを作ります。

公式ホームページの右上のサインアップボタンからサインアップ。

GithubGoogleアカウント使ってSSOでサインアップできます。

アカウント作成したら続けてプロジェクト作成になりますが、ここではregionはSingapoleにしておきます。(アプリケーションサーバーと一番近い場所に置くべし)

Rails初期化

次はRailsを初期化します。Postgresqlを使うようにしておきます。細かい手順はここでは省きます。

初期化方法調べたら1年位前に自分が書いた記事が出てきてちょっとびっくりした。忘れてタネ。

Rails 7新規プロジェクト作成 - なんじゃくにっき

環境変数に接続情報をセット

NeonのWeb consoleのProject Dashboard画面から接続情報が取得できます。

connection_string部分が

postgresql://neondb_owner:XXXXXXXX@ep-restless-flower-yyyyyyy.ap-southeast-1.aws.neon.tech/neondb?sslmode=require

みたいになっていたら、

  • neondb_owner部分がUSERNAME
  • XXXXXXX部分がPASSWORD
  • @以下のep-restless-flower-yyyyyyy.ap-southeast-1.aws.neon.tech部分がHOST
  • /以下のneondbがDATABASE_NAME

です。

config/database.ymlにデータベースへの接続情報を記載しますが、直接パスワードなどを記載してcommitしてしまうのはまずいので、 環境変数から読むようにします。

環境変数にこういうふうにセットして

export DB_HOST="ep-restless-flower-yyyyyyyy.ap-southeast-1.aws.neon.tech"
export DB_NAME="neondb"
export DB_USERNAME="neondb_owner"
export DB_PASSWORD="XXXXXXXX"

config.database.ymlでは環境変数から値を読むようにします。

development:
  <<: *default
  host: <%= ENV["DB_HOST"] %>
  database: <%= ENV["DB_NAME"] %>
  username: <%= ENV["DB_USERNAME"] %>
  password: <%= ENV["DB_PASSWORD"] %>

接続テスト

rails consoleを立ち上げて

bundle exec rails c

接続してみます

ActiveRecord::Base.connection

これでエラーにならなければOK.

あとは普通にmigration書いて、テーブル定義して、と進めていくことが出来ます。

branch(ブランチ)

Neonの面白い機能として、データベースのbranch機能があります。

データベースのコピーを作成する機能ですね。(実際にはコピーオンライトで動くらしい)

これを試してみます。

メニューのbranches -> create new branch から実行できます。

作成すると接続文字列が表示されるのでRails側の接続情報を書き換えるとそちらに繋がります。

今回やってないこと

ブランチの用途ですが、github のpull request毎にデータベースを用意するようなケースを想定されているんじゃないかと思います。

github actionsでpull request毎に自動でbranchを作れば動作確認する、みたいな。

今回はそこまではやっていません。