「知り合いの凄腕エンジニアに聞いたんだけど、/users/32
ってURLにユーザー数が丸見えになってるって、このセキュリティーは流石にまずいよ、駒形さん」
みたいに言われることが稀によくあるので、idをuuidにしました。
postgresの設定
rails5からpostgresのuuidを生成する関数を簡単にidとして使えるようになってるそうです。 herokuのpostgresは対応してるのでいいかもです。
Macのbrewで入れたpostgresはデフォルト無効なので有効にしてあげる必要がありますが、superuserじゃないと駄目です。
postgres=# SELECT uuid_generate_v4();
ERROR: function uuid_generate_v4() does not exist
↑関数がない。
デフォルト状態ならばsuperuserはpostgresかつパスワード無しなので、下記をやっといてくださいと各位に伝えます。
$ psql -d postgres -c 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp";'
postgres=# SELECT uuid_generate_v4();
uuid_generate_v4
--------------------------------------
06162241-ad98-4795-8bab-3801194f76d7
(1 row)
関数が有効になりました。
railsの設定
generatorがデフォルトでuuidを使うようにします。
# config/application.rb:
module Foo
class Application < Rails::Application
config.generators do |g|
g.orm :active_record, primary_key_type: :uuid
end
end
end
こちらを参考にidのdefaultを設定する。
class PostProperties < ActiveRecord::Migration[5.1]
def change
create_table :posts, id: :uuid, default: "gen_random_uuid()" do |t|
t.string :title
t.text :description
t.belongs_to :user, foreign_key: true, type: :uuid
t.timestamps
end
end
end
foreign_keyを設定する時に、type: uuid
を忘れないこと。
# SELECT id FROM users;
id
--------------------------------------
75a61708-a959-5889-83cd-4d86df9cd771
7c6b7130-3896-53a1-938d-2ab4364011d2
f94db8c4-6786-5027-8d90-aa187594addb
bafbab57-d268-548a-a111-11c13bbcbcc2
2fc060cd-98d2-58d2-9b33-50f36df1fd8f
8338b729-ff29-55d2-b5ba-6d68dbfc7b03
917358a7-8995-5d88-b635-925e21841f68
529aa2fb-93b3-5739-a8d4-64dd87ed08a9
6ea9b086-d16b-5b02-81b6-97edb74f3dfb
71f372c5-b0cc-5904-a583-921766bf4508
(10 rows)
ウェーイ。
おもてなし
何かと外見も重要な、出資を受けたスタートアップのサービスのアプリを開発する時にはさらっとやっておくとよいかもしれません。