Rails Diary

プログラミングの学習記録です。

uuidとは

URLヘルパーにarticleのみ渡したらエラーが出た

describe '記事作成で文章ブロックを追加' do
    let(:article) { create :article }
    context '文章を追加せずにプレビューを閲覧' do
      it '正常に表示される' do
        visit edit_admin_article_path(article) # article.uuidを渡すと通る
        click_link 'ブロックを追加する'
        click_link '文章'
        click_link 'プレビュー'
        switch_to_window(windows.second)
        expect(page).to have_content(article.title), 'プレビューページが正しく表示されていません'
      end
    end
  end
end

https://i.gyazo.com/ac269d6d7d25663761929a802441b648.png

https://i.gyazo.com/c77eb27075c55046f7af67250dfa504d.png

そもそもuuidって何?

Universally Unique Identifier(ユニバーサリー・ユニーク・アイデンティファイア)
重複しない(ことになっている)IDのこと。

uuidを使う理由は?

URLのidから情報を推測しづらくする

いつも利用している整数のidを用いた場合、URLのidから情報が推測しやすくなってしまう。 https://*****/users/1のようなURLがあったとして、末尾のidを変えれば別ユーザーのページに行けそうという考えを持たせる要因になってしまう。

このため550e8400-e29b-41d4-a716-446655440000のような被らない一意の文字列uuidを用いることでURLから情報を推測しづらくすることができる。

注意点

uuidはidの値が乱数になるため、User.firstやUser.lastなどで発行されるSELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1のようなSQLクエリではデータが取得できない。既存のプロジェクトにuuidを導入する場合はorder,first,lastなどが使われていないか確認する。

参考にしたサイト

https://wa3.i-3-i.info/word13163.html

[Rails] モデルのIDにUUIDを使って玄人感を出す | もふもふ技術部

[Rails]idにuuid(乱数)