2.1. Railsで使われる概念

Railsでプログラムを作り始める前に、Railsに持ち込まれているいくつかの概念を説明します。

2.1.1. RailsのMVC

MVC とは Model/View/Controller の略です。 MVCモデルでは、プログラムをモデル、ビュー、コントローラの3つに分けておくことで、処理の見通しがよくなります。 RailsでWebアプリケーションを作る場合、基本的にMVCに従ってプログラムを作成する必要があります。

  • モデル (Model)
    • モデルはビジネスロジック(=システム固有の処理)を表現するために利用します
    • データの保持、データストアへのアクセスにも利用します
  • ビュー (View)
    • モデルやコントローラから受け取ったデータを元に、ユーザに見える形のデータを生成します
  • コントローラ (Controller)
    • 入力イベントを受け付けてモデル、ビューの操作をし、結果をブラウザに返します

注釈

RailsのMVCは、Viewから直接モデルのビジネスロジックやデータストアにアクセスすることが可能です。 この点が一般的なMVCアーキテクチャとは異なります。 このアーキテクチャをMVCと呼んでもよいかは議論の余地がありますが、RailsのMVCはこういうものだと理解してください。

ブログサイトを例として、RailsのMVCを具体的に説明します。 このサイトでは http://0.0.0.0:3000/articles にアクセスすると記事一覧を返します。

Railsでは以下4つのコードを作成する必要があります。

  • ルーティング
    • ルーティングはブラウザからアクセスが来た際、URLからどのコントローラに処理を引き渡すべきかを判定します
    • /articles にアクセスされたら 記事一覧を取得するコントローラのアクションに処理を渡します
  • モデル
    • ブログの記事一覧をDBから取得します
  • ビュー
    • ブログの記事一覧のHTMLを生成します
  • コントローラ
    • モデルから記事一覧を取得し、ビューに結果を引き渡してHTMLを取得し結果をブラウザに返します
../_images/rails_mvc.png

上記4つをRailsで記述すると次のようになります。

  • config/routes.rb
# config/routes.rb

Rails.application.routes.draw do
  # /articles にアクセスすると
  # articles_controllerのindexアクションに処理を渡す
  resources :articles, only: [:index]
end
  • app/models/article.rb
# app/models/article.rb
#
# == Schema Information
#
# Table name: articles
#
#  id          :bigint(8)        not null, primary key
#  title       :string(255)
#  description :text(65535)
#  created_at  :datetime         not null
#  updated_at  :datetime         not null
#

class Article < ApplicationRecord
end
  • app/controllers/articles_controller.rb
# app/controllers/articles_controller.rb
class ArticlesController < ApplicationController
  def index
    # Articleモデルは、はじめから all という DBのarticlesテーブルから全てのデータを取得するメソッドをもっています
    @articles = Article.all
  end
end
  • app/views/articles/index.html.erb
<h1>Articles#index</h1>

<table>
  <thead>
    <th>タイトル</th>
    <th>作成日</th>
  </thead>
  <tbody>
    <% @articles.each do |article| %>
    <tr>
      <td>
        <%= article.title %>
      </td>
      <td>
        <%= article.created_at %>
      </td>
    </tr>
    <% end %>
  </tbody>
</table>

ブラウザから http://0.0.0.0:3000/articles にアクセスした結果は次のようになります。

../_images/hello-blog-articles.png

2.1.2. REST

Railsでルーティング、コントローラを定義する前に、RESTについて理解しておく必要があります。 なぜなら、Railsは基本的にRESTの原則にしたがってコードを簡単に定義できるようにできているからです。

RESTの特徴は以下のとおりです。

  • すべてをリソースで表す
  • リソースの参照、操作はURIにより参照・更新することができる
  • ステートレスである

RESTfulなルーティングでは、あるリソースをどのように操作するかを、URIやHTTPのメソッドで表現します。 HTTPメソッドは以下を利用します。

  • GET
    • データの取得
  • POST
    • データの作成
  • PATCH (PUT)
    • データの更新
  • DELETE
    • データの削除

具体例をあげます。