scaffoldでデータ処理機能を素早く作ってみよう

学習の目標

本章では、以下の内容を学習します。

  • データベースのテーブルとカラムの基本概念を理解する
  • Railsのモデルとデータベースの関係を把握する
  • scaffoldコマンドを使ってデータ処理機能を一括生成する方法を習得する
  • データベースマイグレーションの基本を学ぶ
  • 実際にデータベースを操作するWebアプリケーションを体験する

はじめに

Webアプリケーションを作ると聞くと、「なんだか難しそう…」と感じるかもしれません。しかし、Ruby on Rails(以下、Rails)を使えば、驚くほど簡単に基本的なWebアプリケーションを作ることができます。

今回は、Railsが持つ scaffold(スキャフォールド)という機能を使って、データを保存したり、編集したり、削除したりできるアプリケーションを作ってみましょう。たった数回のコマンド入力だけで、データを扱うWebアプリケーションの基本形が完成します。

これを体験することで、Railsのスピード感や、MVC(モデル・ビュー・コントローラ)という仕組みを直感的に理解できるようになります。

内容は少し多めですが、何度か繰り返し実践すれば、Webアプリケーション開発の流れがつかめるはずです。焦らず、一緒に進めていきましょう!

データベースの基本概念

テーブルとカラムとは?

データを保存するには、データベースという仕組みを使います。その中で、データを整理して保存するための箱がテーブルです。

テーブルは「エクセルの表」をイメージすると分かりやすいでしょう。横に並ぶ列(カラム)がデータの種類、縦に並ぶ行(レコード)が実際のデータとなります。

idtitlebodycreated_at
1初めての投稿こんにちは!2025-05-01 12:00:00
2Railsの学習楽しいです!2025-05-02 14:00:00
3scaffold機能便利ですね!2025-05-03 16:00:00

テーブルとカラムの関係は次のように考えるとわかりやすいです。

  • テーブル → データのまとまり(エクセルの1つのシート)
  • カラム → データの項目(「タイトル」「本文」など)
  • レコード → 1つのデータ(1つの記事の情報など)

例えば、ブログの記事を保存する「posts」テーブルがあるとします。このテーブルには以下のようなカラムがあります。

  • タイトル(title)
  • 本文(body)
  • 作成日時(created_at)

このように、テーブルの中には「どんなデータを保存するのか」を決めるカラムがあり、それに沿ってデータが追加されていきます。

Railsにおけるモデルの役割

モデルとは?

モデルは、テーブルを操作するための「窓口」のようなものです。Railsでは、データベースに直接アクセスせずに、モデルを使ってデータの追加・取得・編集・削除を行います。

例えば、「Postモデル」を使うと、次のようなコードで記事データを作成できます。

post = Post.new(title: "初めての投稿", body: "こんにちは!")
post.save

このコードを実行すると、データベースの「posts」テーブルに新しい記事が保存されます。

モデル名とテーブル名のルール

Railsでは、モデル名とテーブル名には以下のルールがあります。

  • モデル名 → 単数形 + 大文字はじまり(例:Post)
  • テーブル名 → 複数形(例:posts)

例えば、以下のような対応関係があります。

  • 「User」モデルのデータは「users」テーブルに保存される
  • 「Book」モデルのデータは「books」テーブルに保存される

このルールは、Railsの「設定よりも規約」という思想に基づいています。決まりに従って命名すれば、複雑な設定をせずに自動的に連携してくれるのです。

こういったルールは知らないと混乱することもあるので、しっかり覚えておきましょう。

scaffoldを使ったアプリケーション作成

scaffoldコマンドとは?

Railsにはscaffoldという便利な機能があり、簡単なコマンドを入力するだけでモデル・テーブル・コントローラ・ビューをまとめて作成できます。

次のコマンドをターミナルで実行してみましょう。

rails generate scaffold Post title:string body:text

scaffoldコマンドの意味

このコマンドの各部分には次のような意味があります。

  • rails generate scaffold → scaffoldを使って基本的なCRUD機能を作成
  • Post → モデル名(単数形)
  • title:string → 「title」というカラムを文字列型(string)で作成
  • body:text → 「body」というカラムをテキスト型(text)で作成

つまり、このコマンドを実行すると、次のようなことが自動で行われます。

  1. 「Post」モデルの作成
  2. 「posts」テーブルの作成(titleカラムとbodyカラム付き)
  3. 「PostsController」の作成(CRUD機能付き)
  4. ビュー(画面表示)の作成
  5. ルーティング(URLと処理の対応付け)の設定

CRUDとは、Create(作成)、Read(読み取り)、Update(更新)、Delete(削除)の頭文字を取った言葉で、データ操作の基本となる4つの機能を指します。

コマンドを実行すると、以下のようなログがターミナルに表示されるかと思います。

      invoke  active_record
      create    db/migrate/20250101000000_create_posts.rb
      create    app/models/post.rb
      invoke    test_unit
      create      test/models/post_test.rb
      create      test/fixtures/posts.yml
      invoke  resource_route
       route    resources :posts
      invoke  scaffold_controller
      create    app/controllers/posts_controller.rb
      invoke    test_unit
      create      test/controllers/posts_controller_test.rb
      create      app/helpers/posts_helper.rb
      invoke    assets
      invoke      scss
      create        app/assets/stylesheets/posts.scss
      invoke  scss
      create    app/assets/stylesheets/scaffold.scss

それぞれ create と表示されている部分が、実際に作成されたファイルです。これらのファイルは、後で詳しく見ていきます。

データベースマイグレーション

scaffoldコマンドを実行しただけでは、まだデータベースに実際のテーブルが作られていません。テーブルを作成するには、次のコマンドを実行します。

rails db:migrate

このコマンドを実行すると、データベースに「posts」テーブルが実際に作成されます。

マイグレーションとは、データベースの構造を変更するための仕組みです。新しいテーブルの作成や、既存のテーブルへのカラム追加などを行うことができます。

このマイグレーションというのが、初心者にとっては難しいかもしれません。

マイグレーションは、データベースの設計図を変更するためのもので、実際にデータベースに反映させるためには rails db:migrate コマンドを実行する必要があります。

Excel やスプレッドシートに例えると、マイグレーションは「新しいシートを作成する」や「既存のシートに新しい列を追加する」ようなものです。

作成したアプリケーションを動かしてみる

サーバーの起動

それでは、実際に作成したアプリケーションを動かしてみましょう。まだRailsサーバーを起動していない場合は、次のコマンドを実行します。

rails server

(または短縮形で rails s

ブラウザでのアクセス

サーバーが起動したら、ブラウザで http://127.0.0.1:3000/posts にアクセスしてみてください。

Posts の一覧画面が表示されるはずです。

また、「New Post」(新規投稿)のリンクをクリックすると、新しい記事を作成できます。

データの作成と操作

「New Post」をクリックすると、記事の作成画面が表示されます。タイトルと本文を入力して、「Create Post」ボタンをクリックしてみましょう。

記事が作成されると、その詳細画面が表示されます。ここから「Edit」(編集)、「Back」(一覧に戻る)、「Destroy」(削除)などの操作ができます。

このように、scaffoldを使うだけで、データの作成・表示・編集・削除といった基本機能(CRUD機能)を持つWebアプリケーションが、わずか数分で完成します。

scaffoldで何が作られたのか

scaffoldコマンドを実行すると、多くのファイルが自動生成されていました。

それぞれ、どのような役割を持っているのかを見ていきましょう。

モデル

app/models/post.rb というファイルが Post モデルを定義しています。このモデルは、データベースの posts テーブルと連携し、データの操作を行います。

モデルというのは、データベースのテーブルを操作するためのクラスです。Railsでは、モデル名は単数形で始まります。 例えば、Post モデルは posts テーブルに対応しています。

class Post < ApplicationRecord
  # バリデーションや関連付けなどの処理をここに記述します
end

Rails においては直接データベースを操作するのではなく、モデルを通じてデータの追加・取得・編集・削除を行います。

言うなれば、モデルはデータベースの「窓口」のようなものです。

デパートなどで商品を買うとき、いきなり商品棚で直接お金を払うのではなく、レジでお金を払いますよね。モデルはそのレジのような役割を果たしています。

コントローラ

app/controllers/posts_controller.rb というファイルが PostsController を定義しています。このコントローラは、HTTPリクエストを受け取り、適切な処理を行います。

コントローラについておさらいすると、コントローラはMVCの「C」にあたる部分で、ユーザーからのリクエストを受け取り、適切なモデルやビューを呼び出す役割を持っています。

class PostsController < ApplicationController
  before_action :set_post, only: %i[show edit update destroy]

  # GET /posts => Post の一覧画面
  def index
    @posts = Post.all
  end

  # GET /posts/:id => Post の詳細画面
  def show
  end

  # ...略
end

言うなれば、コントローラは「ユーザーのリクエストを受け取って、どのモデルやビューを使うかを決める役割」を持っています。

デパートなどに行くと、案内係の人がいて、どのフロアに行けばいいか教えてくれますよね。コントローラはその案内係のような役割を果たしています。

ビュー

app/views/posts/ というフォルダには、PostsController に関連するビュー(画面表示)が格納されています。

ビューというのは、ユーザーに表示される部分で、HTMLやCSSを使ってデザインされています。

例えば、index.html.erb というファイルは、記事の一覧を表示するためのHTMLテンプレートです。

ビューの例:

<h1>Posts</h1>
<table>
  <thead>
    <tr>
      <th>Title</th>
      <th>Body</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @posts.each do |post| %>
      <tr>
        <td><%= post.title %></td>
        <td><%= post.body %></td>
        <td><%= link_to 'Show', post %></td>
        <td><%= link_to 'Edit', edit_post_path(post) %></td>
        <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

このように、ビューはユーザーに見せる部分を担当しています。

デパートなどに行くと、商品が並んでいる棚がありますよね。ビューはその棚のような役割を果たしています。

マイグレーションファイル

db/migrate/YYYYMMDDHHMMSS_create_posts.rb などのようなファイルが、データベースのマイグレーションを定義しています。このファイルには、テーブルの構造やカラムの情報が記述されています。

class CreatePosts < ActiveRecord::Migration[6.0]
  def change
    create_table :posts do |t|
      t.string :title
      t.text :body

      t.timestamps
    end
  end
end

このファイルは、rails db:migrate コマンドを実行することで、実際にデータベースにテーブルを作成するためのものです。 マイグレーションは、データベースの設計図を変更するためのもので、実際にデータベースに反映させるためには rails db:migrate コマンドを実行する必要があります。

詳しい扱い方は今後の章で学んでいきますが、ここでは「マイグレーションはデータベースの設計図を変更するためのもの」と覚えておきましょう。

ルーティング設定

config/routes.rb というファイルには、URLとコントローラのアクションを結びつける設定が記述されています。

Rails.application.routes.draw do
  resources :posts
end

上記の設定により、/posts というURLにアクセスすると、PostsControllerindex アクションが呼び出されるようになります。 他にも、/posts/:idshow アクション、/posts/newnew アクションなどが自動的に設定されます。

このように、ルーティングはURLとコントローラのアクションを結びつける役割を持っています。

※詳しくは今後の章で学んでいきますが、ここでは「ルーティングはURLとコントローラのアクションを結びつけるもの」と覚えておきましょう。

ルーティングは、デパートなどで「どのフロアに行けばいいか」を教えてくれる案内板のような役割を果たしています。

まとめ

本章では、Railsのscaffold機能を使って、データを扱うWebアプリケーションを簡単に作成する方法を学びました。以下の内容を理解できたことと思います。

  • テーブルはデータを保存するための表で、カラム(項目)を持つ
  • モデルはテーブルを操作する窓口で、テーブルと1対1で対応する
  • モデル名は単数形、テーブル名は複数形にするというRailsの命名規則
  • scaffoldコマンドを使うと、モデル・テーブル・コントローラ・ビューを一括で作成できる
  • マイグレーションを実行することで、実際にデータベースにテーブルが作成される

scaffoldは、Railsの強力な機能の一つであり、Webアプリケーション開発の基本的な流れを手軽に体験できるツールです。ここで学んだ概念は、今後のRails開発の基礎となります。

Previous
ルーティングとコントローラを試す - 静的ページ編