Help us understand the problem. What is going on with this article?

少ないユーザー数をバレないようにしよう

はじめに

Railsは、デフォルトだとレコードに連番でidを付けます。

それだと、URLにその連番のidが出力されるため、自分が何番目のユーザーなのか、サービスで何本目の記事を書いたのかなどが露出してしまいます。

ユーザー数のサービスだと人気がないことがバレてしまうことも。。。

そこで、Railsで主キーをuuidにする方法をまとめました。

PostgreSQLの拡張を有効化

以下のRailsコマンドを実行してマイグレーションファイルを作成します。

rails g migration enable_extension_for_uuid

マイグレーションファイルに以下のように記入してください。

20190129024253_enable_extension_for_uuid.rb
class EnableExtensionForUuid < ActiveRecord::Migration[5.2]
  def change
    enable_extension 'pgcrypto' unless extension_enabled?('pgcrypto')
  end
end

初期化処理を追加

アプリケーション起動時にロードされる初期化処理に以下の内容を加えます。

config/initializers/generators.rb
Rails.application.config.generators do |g|
  g.orm :active_record, primary_key_type: :uuid
end

設定内容を読みこませる必要がありますので、ここで必ずRailsを再起動して下さい。

再起動後にマイグレーションコマンドを実行します。

rails db:migrate

以下のような出力があれば成功です。

== 20190129024253 EnableExtensionForUuid: migrating ===========================
-- extension_enabled?("pgcrypto")
   -> 0.0206s
-- enable_extension("pgcrypto")
   -> 0.0771s
== 20190129024253 EnableExtensionForUuid: migrated (0.0981s) ==================

Userモデルを生成する

rails g model User name:string
20190129043612_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users, id: :uuid do |t|
      t.string :name

      t.timestamps
    end
  end
end

マイグレーション

コンソールからマイグレーションコマンドを実行します。

rails db:migrate

以下のような出力であれば成功です。

== 20190129041857 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0618s
== 20190129041857 CreateUsers: migrated (0.0620s) =============================

確認

Rails consoleで確認します。

Rails c
> User.create
   (0.2ms)  BEGIN
  User Create (7.2ms)  INSERT INTO "users" ("created_at", "updated_at") VALUES ($1, $2) RETURNING "id"  [["created_at", "2019-01-29 04:41:06.181904"], ["updated_at", "2019-01-29 04:41:06.181904"]]
   (2.7ms)  COMMIT
=> #<User id: "f15e0b60-d657-4b20-b5e7-2dacf99609dc", name: nil, created_at: "2019-01-29 04:41:06", updated_at: "2019-01-29 04:41:06">

<User id: "f15e0b60-d657-4b20-b5e7-2dacf99609dc"とあるように、user_idは1ではなく、uuidが付与されています。

他のModelもマイグレーションファイルで同じ記載をすれば実現出来ます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした