この記事では、Rails API における Model とは何か、
そして Model がどのような役割を担い、どこまで処理を書いてよいのか を、基本から順を追って解説します。
Rails API を学習していると、
- Model が「DBとつながっているクラス」までの理解で止まっている
- なんとなく Model に処理を書いてしまっている
といった悩みに直面しがちです。
これらを解消するために、この記事を通して、
Rails API における Model の役割を整理しながら学んでいきましょう。
1. Modelとは何か?
Model とは、
アプリケーションが扱うデータと、そのデータに関するルールを表すクラスです。
Rails API では、
Model の中で DB に対する処理を行い、
処理結果を Controller に返します。
以降の章で、この Model がどのような役割を担い、 どこまで処理を書いてよいのかを、具体例とともに見ていきます。
2. Rails APIにおけるModelの位置づけ
Rails API における、 リクエスト処理の基本的な流れ は次のとおりです。
HTTPリクエスト
↓
ルーティング
↓
コントローラ(Controller)
↓
モデル(Model)
↓
コントローラ(Controller)
↓
レスポンス(JSON)
クライアントからリクエストが送られてくると、
routes.rbに定義されたルーティングをもとに- 処理を担当する Controller とアクションが決まり
- Controller が呼び出され、必要に応じて Model の処理を呼び出す
- Model が DB へのアクセスなどを行い、その結果を Controller に返す
- 処理結果をもとに、JSON などのレスポンスが返される
という流れで処理が進みます。
このとき、Model は
Controller によって呼び出され、 データの取得・保存やデータに関する処理を行い、 その結果を Controller に返す役割 を担います。
3. Modelの基本的な書き方
ここでは、Model の中に データベースからデータを取得する処理を書く例を見てみましょう。
class User < ApplicationRecord
def self.find_user(user_id)
User.find(user_id)
end
end
このコードでは、
User→ users テーブルに対応する Model クラス。find_user→ ユーザーを取得するためのメソッド。User.find(user_id)→ 引数として渡された user_id をもとに、DB からユーザーを取得して返す。
という役割を持っています。
※ これらのデータ取得(や保存)の仕組みは ActiveRecord によって実現されていますが、詳しい説明は別の記事で扱います。
4. Rails APIでよく使うModelの処理例
次に、Rails API でよく書かれる Model の処理を見てみます。
4-1. バリデーション
Model では、データが正しいかどうかをチェックする
バリデーション を定義できます。
class User < ApplicationRecord
validates :email, presence: true, uniqueness: true
end
これは、
- email が必須であること(
presence: true) - email が他のユーザーと重複しないこと(
uniqueness: true)
といった データのルール を Model に定義しています。
4-2. ドメインロジック
Model では、業務ルール・判断ロジックを表現する
ドメインロジック を定義できます。
class User < ApplicationRecord
def adult?
age >= 18
end
end
このコードでは、
User→ users テーブルに対応する Model クラス。adult?→ ユーザーが成人(18歳以上)かどうかを判定するためのメソッド。age >= 18→ 年齢(age)が 18 以上であれば true、未満であれば false を返す。
という役割を持っています。
このように、
- データ取得(や保存)
- バリデーション
- ドメインロジック
といった処理は、Model の重要な役割です。
5. Modelに書いてよいこと・書かない方がよいこと
ここまでを踏まえて、Model に書いてよいこと・書かない方がよいことを整理します。
5-1. Modelに書いてよいこと
- データのバリデーション
- データの取得・保存に関する処理
- ドメインロジック(業務ルール・判断ロジック)
5-2. Modelに書かない方がよいこと
- HTTP やリクエストに依存した処理
- レスポンス形式(JSON など)を意識した処理
例えば、
paramsを参照するrenderを呼び出す
といった処理は、Model の責務ではありません。
Model はあくまで、
データと、そのデータに関するルールを表現することに集中させる
のが重要です。
おわりに
この記事では、Rails API における Model について、
- Model とは何か
- Controller との関係性
- Model にどのような処理を書くのか
を、具体例とともに解説しました。
Model は単に「DB とつながっているクラス」ではなく、
- データの取得(や保存)
- データのバリデーション
- ドメインロジック(業務ルール・判断ロジック)
といった、データとそのルールを表現する中心的な存在です。
この役割を意識することで、
- Controller に処理を書きすぎてしまう
- Model に何を書けばよいか分からない
といった悩みも、自然と整理できるようになります。
本記事が、Rails API における Model を
「なんとなく書くもの」から「役割を理解して設計できるもの」へ
変えるきっかけになれば幸いです。
