Railsでオートインクリメントを使わないテーブルを作成する方法

こんにちは。

GMOアドマーケティングのR.Sです。

今回は、IDがオートインクリメントされないテーブルを作成する方法を紹介したいと思います。

IDを指定したいときや、IDカラムを使わずに他のカラムをプライマリーキーとして使いたいとき用の手順です。

 

動作環境

  • Ruby 3.1.4
  • Ruby on Rails 7.0.4
 

テーブルを作成する

基本は通常のテーブル作成手順と同様です。今回はItemテーブルを作成してみます。

まずは下記のコマンドを実行します。

$ bundle exec rails g model Item

 

作成されたマイグレーションファイルを修正します。

このとき注目すべきポイントは3つです。

  • id: false として、オートインクリメントされるIDカラムが作られないようにする
  • t.column というメソッドでIDカラムを追加する(任意のカラム名で良い)
  • ‘INTEGER PRIMARY KEY NOT NULL’ としてプライマリーキーの定義をする
 

修正したらマイグレーションを実行して完了です。めっちゃ簡単!

 

まとめ

業務でオートインクリメントを使わないという運用のテーブルがあり、Railsの場合はどうするのか調べたことをブログにしました。 1対1で紐づけるテーブルを作成するときに、普段は、id,a_id,b_idという3つのカラムでテーブルを作成していますが、単純に紐づけるだけなら今回の方法で、a_id,b_idだけでも作成できるのでは?と考えるきっかけになりました。  

とはいえ、既にあるテーブルのIDから変更するのは、外部キーとして参照されていると手順が厄介だし、そもそも本番で使用されていたらリスクもあると思うので、テーブル設計は用途を踏まえて行った方が良いと改めて思いました。(当たり前ですが)