🙆♀️
【Rails】Primary Keyでuuidを設定する方法
はじめに
RailsのPrimary Keyにuuidを設定する方法を備忘録がてらまとめます。
開発環境
- Docker
- Rails 8.1.1
- PostgreSQL
前提
- Railsの環境構築がすでにできている状態となります
対象者
- Railsで各テーブルのPrimary Keyをuuidに設定されたい方
設定方法
- EnablePgcrpytoの生成
docker compose exec サービス名 rails g migration EnablePgcrypto
- 生成されたマイグレーションファイルの編集
# xxxxx_enable_pgcrypto.rb
class EnablePgcrypto < ActiveRecord::Migration[8.1]
def change
enable_extension 'pgcrypto'
end
end
- 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