🫠

「Modelって結局何?」(Ruby on Rails)

2024/03/09に公開

Railsを初学習

こんにちは!
私はスクールで主にHTML/CSS/JavaScript(jquery)という超超基礎的なことしか学習しておりませんでした。しかし実務未経験で転職した先が、Railsメインでした😭
ということでほぼ初めてRailsを学習していく中で思ったことが、今回のタイトルになります。
「Ruby on RailsとはRuby言語で書かれフレームワークで〜」といった概念から学びました。
「さて、次はMVCだがモデル???」
そうです、前述の通り私はフロントエンドのみしか学習していなかったのでバックエンド系は初でした。
そこで、まずは参考書の基礎の基礎を読み理解を深めようとしました。
多少の理解が出来たかな?と感じたので今回は記事にしたいと思います。

MVCって?

Modelのお話をする前にまずはRailsにおけるMVCについてご紹介します。
理由はこちらを紹介しない全体像が見えないからです。
MVC(Model-View-Control)とは、アプリケーションModel(ビジネスロジック)・
View(インターフェイス)・Controller(ModelとViewの制御)という役割で明確に分離しよう!という設計モデルのことです。
Railsでは本モデルを採用することにより、保守が容易になったり機能単位のテストが可能なので国内でも案件が多いのかなと個人的には思っております。
下記画像がとても参考になります。

出典:https://pikawaka.com/rails/mvc

Modelとは?

さて、いよいよ本題です。
フロントエンドはなんとなくは理解していたので、実際のコードでもViewから辿っていき、Controllerの確認まではなんとかだったのですが、Modelがからっきしでした。
そこでModelについて調べてみました。
Modelはデータベース(以下:DB)を扱う機能を持ち、DB内に作られたテーブルを操作する定義体のようなものです。
お恥ずかしながら、私は「Model=テーブル」だとつい最近まで思っておりました(笑)
テーブルはDB内に作られた箱のようなものです。

実例

概念だとおそらく分かりにくいかと思いますので、実例に沿ってテーブルを作成しながら理解を深めていきます。
例えば、「aaas」というテーブルを作成し、カラムをname(string), member_color(integer)と定義するとします。
どのようにするかというと、ターミナルで以下のコードを実行します。

rails g model aaa name:string member_color:string

すると、マイグレーションファイルとモデルのファイルが作成されます。(厳密にいうとテストファイルなども作られてます。)

db/migrate/YYYYMMDDHHMMSS_create_aaas.rb
class CreateAaas < ActiveRecord::Migration[5.2]
  def change
    create_table :aaas do |t|
      t.string :name
      t.string :member_color

      t.timestamps
    end
  end
end
app/models/aaa.rb
class Aaa < ApplicationRecord
end

と、こんな感じになり以下のコマンドで実際にDBへテーブルを作成します。

rails db:migrate

コマンドを実行すると、マイグレーションが実行され、DBにテーブルが作成されます。
同時に、schema(スキーマ)ファイルが上書きされます。

db/schema.rb
省略

create_table "aaas", force: :cascade do |t|
  t.string "name"
  t.string "member-color"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

省略

作成した、テーブル内に「Nissyっていう名前でメンバーカラーはオレンジ」という風に追加していけばいいわけです(笑)
“created_at” や “updated_at” のカラムは特にこちらで意図して定義したものではありませんが、rails が自動的に追加してくれています。あら、便利!!
ここまでで勘が鋭い方はお気づきかもしれませんが、Railsには命名規則があります。
今回のModelで言うと

項目 命名規則
テーブル スネークケース 複数形
モデル アッパーキャメルケース 単数形

具体例で示すと、こんな感じです。

テーブル名 モデル名 モデルファイル名
clients Client client.rb
client_orders Client_Order client_order.rb

なので、一度覚えてしまえば案外スッと入るかもしれません。

おわりに

今回はModelに焦点を当てて、お話をしましたが今後も学習を続け理解を深めていけたらと思っております。

それでは今回はこの辺で失礼します👋

Discussion