カテゴリ: Rails 更新日: 2026/01/14

Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計

カラム型の選び方:string/text/integer/bigint/decimal/boolean/uuid徹底比較
カラム型の選び方:string/text/integer/bigint/decimal/boolean/uuid徹底比較

先生と生徒の会話形式で理解しよう

生徒

「Ruby on Railsでデータベースを作るとき、マイグレーションファイルに書く『型』って何を選べばいいんですか?」

先生

「データベースは『情報の箱』です。その箱に入れる中身が文字なのか、数字なのか、それとも正解か不正解か……。中身に合わせた専用の『型』を選んであげる必要があります。」

生徒

「たくさん種類があって、どれが一番いいのか迷ってしまいます。違いを詳しく知りたいです!」

先生

「今回は、Railsでよく使われる string や integer、boolean などの主要な型を徹底的に比較して解説します。これを読めば、スキーマ設計で迷うことはなくなりますよ!」

1. データベースの「型」とは何か?

1. データベースの「型」とは何か?
1. データベースの「型」とは何か?

Ruby on Rails(ルビーオンレイルズ)において、データベースのテーブル(表)を作成・変更する仕組みをマイグレーション(Migration)と呼びます。そして、その表の項目(列)をカラム(Column)と言います。

プログラミングを始めたばかりで、パソコンをあまり触ったことがない方には、「冷蔵庫の収納」をイメージしてもらうと分かりやすいでしょう。卵には卵専用のケースがあり、牛乳にはパックを立てる場所がありますよね。データベースも同じで、名前などの「文字」を入れる場所と、年齢などの「数字」を入れる場所は、あらかじめ区別して用意しなければなりません。この「専用の区分け」が型(Type)なのです。

正しい型を選ぶことは、アプリの動作を速くし、不具合(バグ)を防ぐために非常に重要なステップです。例えば、数字を計算したいのに「文字」として保存してしまうと、後から足し算や引き算ができなくなってしまいます。まずは基本的な型の特徴を一つずつ押さえていきましょう。

2. 短い文字の string と 長い文章の text

2. 短い文字の string と 長い文章の text
2. 短い文字の string と 長い文章の text

文字を保存したいときに使うのが stringtext です。この二つの違いは「保存できる長さ」にあります。

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

3. 整数を扱う integer と 大きな数字の bigint
3. 整数を扱う integer と 大きな数字の bigint

計算に使う「整数」を保存したいときは integerbigint を選びます。端数(小数点)がない数字が対象です。

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

4. お金の計算には必須の decimal
4. お金の計算には必須の decimal

小数点を扱う数字を保存する場合、初心者が最も間違いやすいのが decimalfloat の選択です。特に理由がなければ、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

5. はい・いいえを管理する boolean
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

6. 特殊なIDとして注目される uuid
6. 特殊なIDとして注目される uuid

通常、RailsのIDは1, 2, 3...という連番になりますが、セキュリティや複数のシステムを統合する際に使われるのが uuid(ユーユーアイディー) です。

これは「世界中で絶対に重複しないランダムな文字列」のことです。例えば、URLを見たときに /users/1 ではなく /users/550e8400-e29b-41d4-a716-446655440000 のように表示されます。推測されにくいというメリットがありますが、初心者にとっては設定が少しだけ複雑(PostgreSQLなどのデータベース側の設定が必要)なので、まずは連番のIDで慣れてから挑戦するのが良いでしょう。

7. 日付と時間を記録する datetime と date

7. 日付と時間を記録する datetime と date
7. 日付と時間を記録する datetime と date

時間の記録もアプリには不可欠です。datetime(データタイム) は「2025年12月30日 21時30分」のように秒単位まで記録します。Railsの t.timestamps を書くと、自動的に「作成日時(created_at)」と「更新日時(updated_at)」がこの型で作られます。

一方で、誕生日のように時間までは不要で「2025年12月30日」という情報だけで良い場合は date(デイト) を使います。不要な情報(時間)を持たないことで、データの見た目もスッキリし、日付同士の比較も簡単になります。

8. まとめ:状況に応じた最適な選び方

8. まとめ:状況に応じた最適な選び方
8. まとめ:状況に応じた最適な選び方

カラムの型を選ぶときのポイントは、「将来そのデータをどう使いたいか」を考えることです。計算するなら数字系(integer/decimal)、状態を切り替えるだけなら boolean、名前なら string。この基本を守るだけで、あなたのアプリの質は格段に上がります。

もし迷ったときは、以下の優先順位で考えてみてください。

  • 短い文字なら string、長文なら text
  • 普通の整数なら integer、お金の計算なら decimal
  • 二択のフラグなら boolean

マイグレーションファイルを作成するときに、これらのキーワードを意識して指定してみてください。最初は間違えても、Railsにはマイグレーションをやり直す機能があるので、恐れずに設計に挑戦してみましょう!

関連記事:
カテゴリの一覧へ
新着記事
New1
Ruby
“すべてはオブジェクト”を体感!初心者向けRubyのオブジェクト指向入門【irbで学ぶ】
New2
Ruby
Rubyの標準入出力を完全ガイド!puts・print・pの違いとデバッグ活用法
New3
Ruby
Gemとは?RubyGemsとBundlerを初心者向けに完全解説!依存関係管理も図解でわかりやすく理解
New4
Ruby
Rubyの文字エンコーディング入門!UTF-8・マジックコメント・外部/内部エンコーディングを完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.3
Java&Spring記事人気No3
Ruby
Rubyの始め方ガイド:インストールから最初のHello Worldまで(Windows/Mac/Linux)
No.4
Java&Spring記事人気No4
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.5
Java&Spring記事人気No5
Ruby
Rubyのfind/detect/find_indexを徹底解説!目的のデータを素早く探す方法
No.6
Java&Spring記事人気No6
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
No.7
Java&Spring記事人気No7
Ruby
Rubyのselect/reject/filterの使い方を完全解説!初心者向けの条件抽出レシピ
No.8
Java&Spring記事人気No8
データベース
PostgreSQLで順位付け!ROW_NUMBER関数の使い方を初心者向けに徹底解説