Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
生徒
「Ruby on Railsでデータベースを作るとき、マイグレーションファイルに書く『型』って何を選べばいいんですか?」
先生
「データベースは『情報の箱』です。その箱に入れる中身が文字なのか、数字なのか、それとも正解か不正解か……。中身に合わせた専用の『型』を選んであげる必要があります。」
生徒
「たくさん種類があって、どれが一番いいのか迷ってしまいます。違いを詳しく知りたいです!」
先生
「今回は、Railsでよく使われる string や integer、boolean などの主要な型を徹底的に比較して解説します。これを読めば、スキーマ設計で迷うことはなくなりますよ!」
1. データベースの「型」とは何か?
Ruby on Rails(ルビーオンレイルズ)において、データベースのテーブル(表)を作成・変更する仕組みをマイグレーション(Migration)と呼びます。そして、その表の項目(列)をカラム(Column)と言います。
プログラミングを始めたばかりで、パソコンをあまり触ったことがない方には、「冷蔵庫の収納」をイメージしてもらうと分かりやすいでしょう。卵には卵専用のケースがあり、牛乳にはパックを立てる場所がありますよね。データベースも同じで、名前などの「文字」を入れる場所と、年齢などの「数字」を入れる場所は、あらかじめ区別して用意しなければなりません。この「専用の区分け」が型(Type)なのです。
正しい型を選ぶことは、アプリの動作を速くし、不具合(バグ)を防ぐために非常に重要なステップです。例えば、数字を計算したいのに「文字」として保存してしまうと、後から足し算や引き算ができなくなってしまいます。まずは基本的な型の特徴を一つずつ押さえていきましょう。
2. 短い文字の string と 長い文章の text
文字を保存したいときに使うのが string と text です。この二つの違いは「保存できる長さ」にあります。
string(ストリング)は、短い文字列に使います。具体的には、ユーザー名、メールアドレス、電話番号、本のタイトルなどです。一般的なデータベースでは、約255文字までの制限があることが多いですが、その分だけ処理がキビキビと速く動きます。日常のメモ帳で一行だけ使うようなイメージです。
text(テキスト)は、長い文章に使います。ブログの記事本文や、お問い合わせ内容のメッセージ、商品の詳細説明などです。制限がほとんどなく、大量の文字を保存できますが、stringに比べると少しだけ読み書きに時間がかかります。原稿用紙を何枚も重ねるようなイメージですね。
class CreateUsers < ActiveRecord::Migration[7.0]
def change
create_table :users do |t|
t.string :name # ユーザー名は短いのでstring
t.text :introduction # 自己紹介は長くなる可能性があるのでtext
t.timestamps
end
end
end
3. 整数を扱う integer と 大きな数字の bigint
計算に使う「整数」を保存したいときは integer や bigint を選びます。端数(小数点)がない数字が対象です。
integer(インテジャー)は、一般的な整数に使います。年齢、在庫数、順番などがこれに当たります。保存できる範囲は、おおよそプラスマイナス21億程度までです。日常的な範囲であれば、これ一つで十分対応できます。
bigint(ビッグイント)は、文字通り「巨大な整数」です。最近のRailsでは、自動的に連番が振られるID(プライマリキー)にはこのbigintが標準で使われています。世界の人口を超えて、何兆、何京という天文学的な数字を扱う場合に必要になります。普通のアプリで「絶対に足りなくなる」と心配な時は、こちらを選んでおけば安心です。
class CreateProducts < ActiveRecord::Migration[7.0]
def change
create_table :products do |t|
t.string :title
t.integer :stock # 在庫数はintegerで十分
t.bigint :price # 念のため大きな数字も扱えるようにbigint
t.timestamps
end
end
end
4. お金の計算には必須の decimal
小数点を扱う数字を保存する場合、初心者が最も間違いやすいのが decimal と float の選択です。特に理由がなければ、decimal(デシマル)を使うことを強くおすすめします。
なぜなら、decimalは「正確な小数点」を扱えるからです。プログラミングの内部では、小数点の計算をすると微妙な誤差が出てしまうことがありますが、decimalはその誤差が出ないように設計されています。そのため、商品の価格計算、消費税の計算、ポイントの計算など、一円の狂いも許されない「お金」に関するデータには、必ずdecimalを使いましょう。
class AddPriceToItems < ActiveRecord::Migration[7.0]
def change
# precisionは全体の桁数、scaleは小数点以下の桁数
add_column :items, :tax_rate, :decimal, precision: 5, scale: 2
end
end
5. はい・いいえを管理する boolean
「既読か未読か」「会員か退会済みか」「公開中か下書きか」のように、二つの状態(オンかオフか)だけを管理したい場合に使うのが boolean(ブーリアン) です。
この型には、true(真・はい)か false(偽・いいえ)のどちらかしか入りません。とてもシンプルなデータなので、コンピュータが最も得意とする処理の一つです。初心者のうちは、数値で「0が未読、1が既読」のように管理したくなりますが、booleanを使う方がコードを読んだときに意味がパッと伝わりやすくなります。
class CreateTasks < ActiveRecord::Migration[7.0]
def change
create_table :tasks do |t|
t.string :content
t.boolean :completed, default: false # 初期値は「未完了(false)」に設定
t.timestamps
end
end
end
6. 特殊なIDとして注目される uuid
通常、RailsのIDは1, 2, 3...という連番になりますが、セキュリティや複数のシステムを統合する際に使われるのが uuid(ユーユーアイディー) です。
これは「世界中で絶対に重複しないランダムな文字列」のことです。例えば、URLを見たときに /users/1 ではなく /users/550e8400-e29b-41d4-a716-446655440000 のように表示されます。推測されにくいというメリットがありますが、初心者にとっては設定が少しだけ複雑(PostgreSQLなどのデータベース側の設定が必要)なので、まずは連番のIDで慣れてから挑戦するのが良いでしょう。
7. 日付と時間を記録する datetime と date
時間の記録もアプリには不可欠です。datetime(データタイム) は「2025年12月30日 21時30分」のように秒単位まで記録します。Railsの t.timestamps を書くと、自動的に「作成日時(created_at)」と「更新日時(updated_at)」がこの型で作られます。
一方で、誕生日のように時間までは不要で「2025年12月30日」という情報だけで良い場合は date(デイト) を使います。不要な情報(時間)を持たないことで、データの見た目もスッキリし、日付同士の比較も簡単になります。
8. まとめ:状況に応じた最適な選び方
カラムの型を選ぶときのポイントは、「将来そのデータをどう使いたいか」を考えることです。計算するなら数字系(integer/decimal)、状態を切り替えるだけなら boolean、名前なら string。この基本を守るだけで、あなたのアプリの質は格段に上がります。
もし迷ったときは、以下の優先順位で考えてみてください。
- 短い文字なら string、長文なら text
- 普通の整数なら integer、お金の計算なら decimal
- 二択のフラグなら boolean
マイグレーションファイルを作成するときに、これらのキーワードを意識して指定してみてください。最初は間違えても、Railsにはマイグレーションをやり直す機能があるので、恐れずに設計に挑戦してみましょう!