🙆‍♀️

【Rails】Primary Keyでuuidを設定する方法

に公開

はじめに

RailsのPrimary Keyにuuidを設定する方法を備忘録がてらまとめます。

開発環境

  • Docker
  • Rails 8.1.1
  • PostgreSQL

前提

  • Railsの環境構築がすでにできている状態となります

対象者

  • Railsで各テーブルのPrimary Keyをuuidに設定されたい方

設定方法

  1. EnablePgcrpytoの生成
docker compose exec サービス名 rails g migration EnablePgcrypto
  1. 生成されたマイグレーションファイルの編集
# xxxxx_enable_pgcrypto.rb

class EnablePgcrypto < ActiveRecord::Migration[8.1]
  def change
    enable_extension 'pgcrypto'
  end
end
  1. Rails generatorの設定
# config/application.rb

module YourAppName
  class Application < Rails::Application
    # ... 他の設定 ...

    # ジェネレータの設定
    config.generators do |g|
      g.orm :active_record, primary_key_type: :uuid
    end
  end
end

どのようになるか

上記設定をして、deviseを利用したusersテーブルを生成したと仮定します。
schema.rbは下記のようになっており、Primary Keyがuuidとなっていることが分かります。

ActiveRecord::Schema[8.1].define(version: xxxx) do
  enable_extension "pg_catalog.plpgsql"
  enable_extension "pgcrypto"

  create_table "users", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
    # ... カラム ...
  end
end

最後に

途中からuuidに変更する方法もありますが、設定変更等が大変なのでuuidを使う場合はテーブル作成する最初の段階で設定するのがよいと個人的に思います。
不適切な場合はコメントいただけますと幸いです。

Discussion