読んで欲しい人
- 新しく生成するテーブルのプライマリキーをUUIDにしたい人
- 過去の自分
やり方
- モデルを生成するコマンドを打ち込む
rails g model User
- 生成されたマイグレーションファイルに下記を記述する
202409243365_create_user.rb
class CreateUsers < ActiveRecord::Migration[7.1]
def change
# pgcryptoを有効化する
enable_extension 'pgcrypto' unless extension_enabled?('pgcrypto')
# idオプションにuuidを指定する
create_table :users, id: :uuid do |t|
t.timestamps
end
end
end
db:migrate
をしておしまい
生成したモデルのプライマリキーにはUUIDがディフォルトで指定されている
解説
これは何?
enable_extension 'pgcrypto' unless extension_enabled?('pgcrypto')
pgcrypt
を有効化している
enable_extension 'pgcrypto'
でpgcryptを有効化している
unless extension_enabled?('pgcrypto')
がtrue
だったら何もしない
pgcryptとは何?
PostgreSQLが提供している拡張機能。
データの暗号化、ハッシュ化、ランダム値生成などを行ってくれる
※暗号化やハッシュかについては取り上げません
なぜUUIDにするのか?
セキュリティの向上のため
Railsがディフォルトで用意しているidだとURLを予想しやすい
悪い人は「このURLの値を変えれば他の人の情報にアクセスできるのでは?」と考える
https://example.com/users/1
UUIDを使用するとURLから個人情報にアクセスしにくい
https://example.com/users/A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11
補足
公式より
You need to enable the pgcrypto (only PostgreSQL >= 9.4) or uuid-ossp extension to use uuid.
uuid-ossp
の拡張をオンにする設定でもUUIDは設定が可能です
感想
- 一度設定方法をミスってエラーが出たので、公式ドキュメントはちゃんと読まなければ
- ないよりも、あった方が良いUUID
参考