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?

More than 5 years have passed since last update.

Rails+PostgreSQLでprimary keyにUUIDを使うための設定をするgemを作った

Last updated at Posted at 2017-06-05

概要

Rails 4以降ではプライマリキーにUUID型を使うことができます。

その際の作業を、組み込むだけで宜しくやってくれる gem upknit を作りました。

UUIDを使うには?

通常、以下の手順で、プライマリキーとしてUUIDを使うことが出来ます。

  1. UUIDを扱う拡張機能1を有効にしておく。

    postgresql-9.4以降
    enable_extension('pgcrypto')
    
    postgresql-9.4未満
    enable_extension('uuid-ossp')
    
  2. テーブル生成時にプライマリキーの型に :uuid 2 を指定。

    db/migrate/YYYYMMDD_create_books.rb
    create_table :books, id: :uuid do |t|
      :
    end
    

この gem を組み込むと、上述の2つに加えて、マイグレーション定義で外部キーで参照する際のカラム型にも :uuid を明示3してくれます。

db/migrate/YYYYMMDD_create_books.rb
  :
  t.references :author, foreign_key: true, type: :uuid
  :

使い方

いつものように Gemfile に

Gemfile
gem 'upknit'

と書いて、 bundle install してください。

TODO

  • 作成済みのデータベースに対しても自動的に拡張を組み込めるようにする。4
  • development や test 環境以外でジェネレータ周辺のコードを読み込まずに済むようにする。

FAQ

Q: 名前の由来は?

UUIDの "u" と primary key の "p" と "k" がこの順で含まれている単語を /usr/share/dict/words から適当に探しました。

片仮名で書けば「アップニット」、意味はコードとは関係なく、「編み上げる」とか「結びつける」あたりでしょうか。


  1. 使える場合は uuid-ossp よりも pgcrypto を使った方がよいでしょう。

  2. ", id: primary_key: :#{...}" という文字列に埋め込まれるので、 'uuid' でもOK。

  3. 明示しないと :bigint を指定したことになります。

  4. 現在は、本 gem が自動的に拡張を組み込むタイミングがデータベース作成時(タスク db:create 実行時)のみになっています。

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?