はじめに
こんにちは!Railsでマイグレーションファイルを作成していると、t.string や t.text という記述が出てきますよね。 「どっちも文字を入れるものでしょ?」「全部textでいいんじゃないの?」と思ったことはありませんか?
この記事では、この2つの型の違いと、なぜちゃんと使い分けるべきなのかを、分かりやすい「箱」のイメージで解説します!
「箱のサイズ」で考える
データベースの型は、情報をしまうための「箱」のようなものです。stringとtextは、この箱のサイズや性質が異なります。
string 型 |
text 型 |
|
|---|---|---|
| イメージ | 身分証明書の名前欄 🖋️ | ノートや巻物 📜 |
| 用途 | 短い決まった長さの文字列 | 長い、可変長の文章 |
| 文字数制限 | ある (通常255文字まで) | ほぼない (64KB以上) |
| パフォーマンス | 高速 (サイズが予測できるため) | やや遅い (サイズが大きいため) |
| 具体例 | ユーザー名、メールアドレス、投稿のタイトル | 投稿の本文、自己紹介文、商品説明 |
なぜ使い分けるの?
「大は小を兼ねる」で、全部text型でも良さそうに思えますよね。しかし、パフォーマンスに違いが出ます。
データベースは、stringのようにサイズの上限が決まっている小さな箱の方が、中身を探したり、並べ替えたりする作業がずっと得意で、処理も高速です。
そのため、
-
ユーザー名やタイトルなど、明らかに短いとわかっているデータには
string -
投稿本文や自己紹介など、どれくらいの長さになるか分からない文章には
text
というように、データの内容に合わせて適切なサイズの「箱」を選ぶことが、良いデータベース設計の第一歩なのです。
Railsマイグレーションでの例
実際にRailsでpostsテーブルを作る際のマイグレーションファイルを見てみましょう。
class CreatePosts < ActiveRecord::Migration[7.0]
def change
create_table :posts do |t|
# 投稿のタイトルは短いのでstring
t.string :title
# 投稿の本文は長くなる可能性があるのでtext
t.text :content
t.timestamps
end
end
end
まとめ
-
string:短い文字用の、高速な小さい箱 -
text:長い文章用の、大容量な大きい箱
データに合った型を選ぶ癖をつけることで、あなたのアプリケーションはより効率的で、堅牢なものになります!