3
2

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とPostgreSQL:テーブルのプライマリキーにUUIDを使用する方法

Last updated at Posted at 2024-09-27

読んで欲しい人

  • 新しく生成するテーブルのプライマリキーをUUIDにしたい人
  • 過去の自分

やり方

  1. モデルを生成するコマンドを打ち込む rails g model User
  2. 生成されたマイグレーションファイルに下記を記述する
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

参考

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?