scaffoldでデータ処理機能を素早く作ってみよう
学習の目標
本章では、以下の内容を学習します。
- データベースのテーブルとカラムの基本概念を理解する
- Railsのモデルとデータベースの関係を把握する
- scaffoldコマンドを使ってデータ処理機能を一括生成する方法を習得する
- データベースマイグレーションの基本を学ぶ
- 実際にデータベースを操作するWebアプリケーションを体験する
はじめに
Webアプリケーションを作ると聞くと、「なんだか難しそう…」と感じるかもしれません。しかし、Ruby on Rails(以下、Rails)を使えば、驚くほど簡単に基本的なWebアプリケーションを作ることができます。
今回は、Railsが持つ scaffold(スキャフォールド)という機能を使って、データを保存したり、編集したり、削除したりできるアプリケーションを作ってみましょう。たった数回のコマンド入力だけで、データを扱うWebアプリケーションの基本形が完成します。
これを体験することで、Railsのスピード感や、MVC(モデル・ビュー・コントローラ)という仕組みを直感的に理解できるようになります。
内容は少し多めですが、何度か繰り返し実践すれば、Webアプリケーション開発の流れがつかめるはずです。焦らず、一緒に進めていきましょう!
データベースの基本概念
テーブルとカラムとは?
データを保存するには、データベースという仕組みを使います。その中で、データを整理して保存するための箱がテーブルです。
テーブルは「エクセルの表」をイメージすると分かりやすいでしょう。横に並ぶ列(カラム)がデータの種類、縦に並ぶ行(レコード)が実際のデータとなります。
| id | title | body | created_at | 
|---|---|---|---|
| 1 | 初めての投稿 | こんにちは! | 2025-05-01 12:00:00 | 
| 2 | Railsの学習 | 楽しいです! | 2025-05-02 14:00:00 | 
| 3 | scaffold機能 | 便利ですね! | 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:textscaffoldコマンドの意味
このコマンドの各部分には次のような意味があります。
- rails generate scaffold→ scaffoldを使って基本的なCRUD機能を作成
- Post→ モデル名(単数形)
- title:string→ 「title」というカラムを文字列型(string)で作成
- body:text→ 「body」というカラムをテキスト型(text)で作成
つまり、このコマンドを実行すると、次のようなことが自動で行われます。
- 「Post」モデルの作成
- 「posts」テーブルの作成(titleカラムとbodyカラム付き)
- 「PostsController」の作成(CRUD機能付き)
- ビュー(画面表示)の作成
- ルーティング(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  # バリデーションや関連付けなどの処理をここに記述しますendRails においては直接データベースを操作するのではなく、モデルを通じてデータの追加・取得・編集・削除を行います。
言うなれば、モデルはデータベースの「窓口」のようなものです。
デパートなどで商品を買うとき、いきなり商品棚で直接お金を払うのではなく、レジでお金を払いますよね。モデルはそのレジのような役割を果たしています。
コントローラ
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  endendこのファイルは、rails db:migrate コマンドを実行することで、実際にデータベースにテーブルを作成するためのものです。 マイグレーションは、データベースの設計図を変更するためのもので、実際にデータベースに反映させるためには rails db:migrate コマンドを実行する必要があります。
詳しい扱い方は今後の章で学んでいきますが、ここでは「マイグレーションはデータベースの設計図を変更するためのもの」と覚えておきましょう。
ルーティング設定
config/routes.rb というファイルには、URLとコントローラのアクションを結びつける設定が記述されています。
Rails.application.routes.draw do  resources :postsend上記の設定により、/posts というURLにアクセスすると、PostsController の index アクションが呼び出されるようになります。 他にも、/posts/:id で show アクション、/posts/new で new アクションなどが自動的に設定されます。
このように、ルーティングはURLとコントローラのアクションを結びつける役割を持っています。
※詳しくは今後の章で学んでいきますが、ここでは「ルーティングはURLとコントローラのアクションを結びつけるもの」と覚えておきましょう。
ルーティングは、デパートなどで「どのフロアに行けばいいか」を教えてくれる案内板のような役割を果たしています。
まとめ
本章では、Railsのscaffold機能を使って、データを扱うWebアプリケーションを簡単に作成する方法を学びました。以下の内容を理解できたことと思います。
- テーブルはデータを保存するための表で、カラム(項目)を持つ
- モデルはテーブルを操作する窓口で、テーブルと1対1で対応する
- モデル名は単数形、テーブル名は複数形にするというRailsの命名規則
- scaffoldコマンドを使うと、モデル・テーブル・コントローラ・ビューを一括で作成できる
- マイグレーションを実行することで、実際にデータベースにテーブルが作成される
scaffoldは、Railsの強力な機能の一つであり、Webアプリケーション開発の基本的な流れを手軽に体験できるツールです。ここで学んだ概念は、今後のRails開発の基礎となります。