概要
Rails 4以降ではプライマリキーにUUID型を使うことができます。
その際の作業を、組み込むだけで宜しくやってくれる gem upknit を作りました。
UUIDを使うには?
通常、以下の手順で、プライマリキーとしてUUIDを使うことが出来ます。
-
UUIDを扱う拡張機能1を有効にしておく。
postgresql-9.4以降enable_extension('pgcrypto')
postgresql-9.4未満enable_extension('uuid-ossp')
-
テーブル生成時にプライマリキーの型に
:uuid
2 を指定。db/migrate/YYYYMMDD_create_books.rbcreate_table :books, id: :uuid do |t| : end
この gem を組み込むと、上述の2つに加えて、マイグレーション定義で外部キーで参照する際のカラム型にも :uuid
を明示3してくれます。
:
t.references :author, foreign_key: true, type: :uuid
:
使い方
いつものように Gemfile に
gem 'upknit'
と書いて、 bundle install してください。
TODO
- 作成済みのデータベースに対しても自動的に拡張を組み込めるようにする。4
- development や test 環境以外でジェネレータ周辺のコードを読み込まずに済むようにする。
FAQ
Q: 名前の由来は?
UUIDの "u" と primary key の "p" と "k" がこの順で含まれている単語を /usr/share/dict/words
から適当に探しました。
片仮名で書けば「アップニット」、意味はコードとは関係なく、「編み上げる」とか「結びつける」あたりでしょうか。
-
使える場合は uuid-ossp よりも pgcrypto を使った方がよいでしょう。 ↩
-
", id: primary_key: :#{...}"
という文字列に埋め込まれるので、'uuid'
でもOK。 ↩ -
明示しないと
:bigint
を指定したことになります。 ↩ -
現在は、本 gem が自動的に拡張を組み込むタイミングがデータベース作成時(タスク
db:create
実行時)のみになっています。 ↩