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

RailsモデルとActive Record基礎|STIとポリモーフィック関連の選び方・落とし穴・代替設計

STIとポリモーフィック関連:選び方・落とし穴・代替設計
STIとポリモーフィック関連:選び方・落とし穴・代替設計

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

生徒

「Railsのモデルで、似たようなデータ構造をどう整理すればいいか分かりません……」

先生

「Railsには、STIやポリモーフィック関連という仕組みがあります。うまく使うと、とても整理しやすくなりますよ。」

生徒

「名前が難しそうで、初心者には無理そうに感じます……」

先生

「大丈夫です。日常生活の例えを使いながら、ゆっくり説明していきます。」

1. STIとは?1つの表で種類を分ける考え方

1. STIとは?1つの表で種類を分ける考え方
1. STIとは?1つの表で種類を分ける考え方

STIは「Single Table Inheritance」の略で、日本語にすると 「1つのテーブルを使った継承」という意味になります。 Railsのモデル設計でよく登場する仕組みです。

継承とは、「共通の性質をまとめる」考え方です。 例えば、動物園で考えると、犬も猫も「動物」という共通点があります。 名前や年齢は共通ですが、鳴き声などは違います。

STIでは、データベースのテーブルを1つだけ用意し、 その中に「種類」を表すカラムを持たせます。 Railsでは、このカラム名がtypeになります。


class Animal < ApplicationRecord
end

class Dog < Animal
end

class Cat < Animal
end

この場合、dogsテーブルやcatsテーブルは作りません。 animalsテーブル1つで、犬も猫も管理します。 初心者の方は、「同じノートに色ペンで種類を書き分ける」 というイメージを持つと分かりやすいです。

2. STIのメリットと落とし穴

2. STIのメリットと落とし穴
2. STIのメリットと落とし穴

STIの大きなメリットは、設計がシンプルなことです。 テーブルが1つなので、管理や保存が分かりやすくなります。 共通の処理もまとめやすく、Railsらしい書き方ができます。

しかし、注意点もあります。 種類ごとに項目が大きく違う場合、 使わないカラムが増えてしまいます。 これは、空欄だらけのアンケート用紙を 全員に配るような状態です。

また、後から種類が増え続けると、 テーブルがどんどん複雑になり、 初心者には理解しづらくなります。

3. ポリモーフィック関連とは?相手を選ばない関連

3. ポリモーフィック関連とは?相手を選ばない関連
3. ポリモーフィック関連とは?相手を選ばない関連

ポリモーフィック関連は、「どのモデルとも関連できる」 という柔軟な仕組みです。 名前は難しそうですが、考え方はとてもシンプルです。

例えば、「コメント」を考えてみましょう。 コメントは、記事にも写真にも付けられます。 それぞれ専用のコメントテーブルを作るのは大変です。

そこで、ポリモーフィック関連を使うと、 コメントは「どの種類の投稿にも付けられる」 という設計ができます。


class Comment < ApplicationRecord
  belongs_to :commentable, polymorphic: true
end

この仕組みは、「どんな箱にも貼れる付箋」 のようなものです。 1つの仕組みで、いろいろな対象に対応できます。

4. ポリモーフィック関連の注意点

4. ポリモーフィック関連の注意点
4. ポリモーフィック関連の注意点

ポリモーフィック関連は便利ですが、 何でもかんでも使うと、後で困ることがあります。 データベース上では、関連先が文字情報として保存されます。

そのため、データの整合性を データベース側で強く守れません。 これは、「手書きメモで管理している」 状態に少し似ています。

また、検索や集計が複雑になりやすく、 初心者が後からコードを読むと、 分かりにくく感じることがあります。

5. STIとポリモーフィック関連の選び方

5. STIとポリモーフィック関連の選び方
5. STIとポリモーフィック関連の選び方

STIは、「中身がほぼ同じで、種類だけ違う」 場合に向いています。 動物やユーザー種別などが代表例です。

一方、ポリモーフィック関連は、 「1つの機能を、いろいろなモデルに付けたい」 場合に便利です。 コメント、いいね、画像などがよく使われます。

どちらも万能ではありません。 初心者のうちは、「本当に必要かどうか」を 考えながら使うことが大切です。

6. 代替設計という考え方

6. 代替設計という考え方
6. 代替設計という考え方

STIやポリモーフィック関連を使わず、 普通にテーブルを分ける設計も立派な選択です。 分かりやすさは、初心者にとって最大の武器です。

最初から難しい仕組みを使うより、 シンプルな設計で理解を深める方が、 長くRailsを学び続けられます。

Railsのモデル設計では、 「将来の自分が読めるか」を いつも意識することが大切です。

関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Rails
RailsモデルとActive Record基礎|クエリログの読み方を理解してEXPLAIN・joins・includesの違いを学ぼう