Webブラウザ上にリレーショナルデータベースから取得したデータを表示したり、登録、更新、削除できるように実装する前に、Railsが推奨するアプリケーションの設計について学習しましょう。
まずは、これまで学習した内容を振り返ります。
振り返り(RDBMSとActiveRecord)
Pikawakaカリキュラムでは、Webアプリケーションのデータの保存先としてリレーショナルデータベースを利用します。リレーショナルデータベースとは、各データをテーブルで整理して、互いに関連付けて扱えるデータベースのことでしたね。
データベースにはデータを溜め込むだけではなく、その溜め込んだデータを必要な形に整形して活用することができます。

データベースの機能を利用するには、データベース管理システムと呼ばれるソフトウェアが必要になります。リレーショナルデータベースの場合、リレーショナルデータベース管理システム(RDBMS)で制御されます。
リレーショナルデータベース管理システムは、ユーザーなどの「データベースを利用する側」のSQL文の指示を受けて、リレーショナルデータベースを操作します。

SQL文は、データベース言語であるSQLで記述された命令文のことでしたね。
例えばリレーショナルデータベースにユーザー情報を管理するusersテーブルがあり、idが1のユーザー情報だけが欲しい場合、以下のSQL文でRDBMSへ指示を出します。
1
SELECT * FROM users WHERE id = 1;

Railsアプリケーションでリレーショナルデータベースを利用する場合も、同じようにSQL文を発行して、RDBMSに指示を出します。

しかし、Railsでは標準で採用される「ActiveRecord」というO/Rマッピングを担うライブラリのおかげで、リレーショナルデータベースのレコードをオブジェクトとして直感的に扱えるようになります。裏側ではSQL文が発行されます。

先ほどの例のようにusersテーブルからidが1のユーザー情報だけが欲しい場合、Railsでは、以下のようにUserモデルに対してfindメソッドを呼び出すだけで、RDBMSに指示するSQL文が裏側で発行されます。
1
2
User.find(1)
#SELECT * FROM users WHERE id = 1;

MVC
Ruby on Railsは、MVC(Model View Controller)というデザインパターンを採用しているフレームワークでしたね。各要素にはそれぞれ役割がありますが、Modelの役割のうち、アプリケーションのデータ操作は「Active Record」が担当しています。
つまり、これまではモデルとリレーショナルデータベース間でのデータのやり取りを学習してきたことになります。

多くの場合は、アプリケーションを利用するユーザーに対して、Webブラウザ(クライアント)に表示された入力フォームなどからデータの登録、更新、削除ができるように画面を用意します。
次の章からは、Webブラウザ上にリレーショナルデータベースから取得したデータを表示したり、登録、更新、削除できるように実装していきます。

アプリケーションの設計思想はいくつがありますが、Railsでは「REST」に従ってアプリケーションを設計することを推奨しています。
実装に入る前に、RailsにおけるRESTを学習していきましょう。
RailsにおけるRESTを学ぼう
Railsでは、設計の根本的な考え方に「REST」があります。その考えに則って設計を行うことで、Webアプリケーションの実装が簡潔になります。
RailsにおけるRESTを学習する前に、RESTの重要な概念の1つであるリソース(リソース指向アーキテクチャ)について確認してみます。
リソースとは
リソース指向アーキテクチャ(Resource Oriented Architecture、以下ROA)は、Webサービスを提供する際に、その基礎となるデータ、情報を「リソース」として捉えて、リソースを中心に物事を考えるアーキテクチャのことです。
リソースとは、一言で説明すると「Web上に存在する情報」のことです。Railsでは、処理の対象となる共通点を持つ情報のかたまり、つまりデータベースのテーブルをリソースとして捉えることが大半です。
下の画像のようにemployeesテーブルをemployeesリソースとして捉えます。

Railsでリソースについて考えてみます。
Railsではモデルを通して、このリソースをオブジェクトとして扱うことができます。そして、リソースごとの処理は「MVC」で構成します。

例えばemployeesリソースの処理は、以下のようにMVCで構成します。

RESTとは
REST(Representational State Transfer)とは、リソースを中心に物事を考える「リソース指向アーキテクチャ」をベースとした一連の設計原則のことです。
RESTの考え方に則って設計されたWebサービスでは、クライアント側(Webサービスを利用する側)は一意なURIとHTTPメソッドによって、提供されるリソースを利用することができます。
URI
RESTでは、すべてのリソースは一意の名前を持ちます。
リソースの名前は、URIで表現されます。
例えば、以下のように/employeesはemployeesリソースを表します。

URIは、リソースの名前だけではなく、リソースのアドレス(住所)を表します。URIをみるだけで「どのソースが動くか」という判断ができるようになります。
Railsでは、リソース毎の処理をMVCで構成させます。URIの/employeesを見るだけで、以下のソースが動くことがわかります。

リソースは、情報のかたまりのように「集合」を表します。URIはこのリソースを示すので、/getEmployeeではなく、/employeesのように名詞の複数形が適切です。
このようにRESTにおけるURIは、リソースの「名前」と「アドレス」です。
HTTPメソッド
RESTでは、リソースに対するCRUD操作は、HTTPメソッド(GET、POST、PUT、DELETE)を利用して、リクエストするものとしています。
URIがリソースを表すものだとしたら、HTTPメソッドはリソースに対して「何をするか」という操作を表すものです。

CRUDとは、Create(作成)・Read(読み込み)・Update(更新)・Delete(削除)の頭文字を繋げた用語で、データ操作の基本となる4つの処理のことでしたね。
CRUDに対応するHTTPメソッドは、以下の通りです。
| CRUD | HTTPメソッド | HTTPメソッドの説明 |
|---|---|---|
| Create(作成) | POST | リソースへのデータを追加する |
| Read(読み込み) | GET | リソースを取得する |
| Update(更新) | PUT | リソースを更新する |
| Delete(削除) | DELETE | リソースを削除する |
例えば、employeesリソースを取得したい場合は、次のように/employeesというURIに対してHTTPメソッドのGETを利用して、リクエストをおこないます。

Railsでは、リソース毎の処理をMVCで構成させます。Webブラウザ(クライアント側)からのリクエストは、ルーティングを経由します。そのリクエストに応じて、コントローラを司令塔とするMVCでリソースの処理が行われます。
データベースのリソースは、モデルを通してオブジェクトとして扱われます。

他にもDELETE /employees/1は、employeesリソースをid:1で読み込み、その「リソースを削除する」という処理だと判断することができます。
HTTPメソッドのリソースに対するCRUD操作は、以下の通りです。

RESTfulなサービス
RESTの考え方に則っていることを「RESTful」と呼びます。
RESTの考え方に則って設計されたWebサービスは、RESTfulなサービスと呼びます。Railsでは、RESTfulなサービスを作成するための機能が用意されています。その機能を利用することで、実装が簡潔になります。
リソースベースのルーティング
Railsでは、リソースをベースとしたRESRfulルーティング(RESTの考え方に則っているルーティング)を手動で設定する場合は、次のように7つのアクション(index・show・new・create・edit・update・destroy)を割り当てます。

1
2
3
4
5
6
7
8
9
Rails.application.routes.draw do
get '/employees', to: 'employees#index'
get '/employees/new', to: 'employees#new'
post '/employees', to: 'employees#create'
get '/employees/:id', to: 'employees#show'
get '/employees/:id/edit', to: 'employees#edit'
put '/employees/:id', to: 'employees#update'
delete '/employees/:id', to: 'employees#destroy'
end
アクションとは、Webブラウザからのリクエストに対して必要な処理を実行するコントローラ内のメソッドでしたね。
上記のルーティングでは、以下のようにemployeesリソースに関連するさまざまなリクエストを1つのコントローラ内のアクションに割り当てます。

リソース毎にコントローラは異なりますが、7つのアクションの名前と目的は同じです。

7つのアクションは「Rails開発者の中で共通認識を持てるアクション」でもあります。
リソースをベースとしたRESRfulルーティングを7つのアクションに割り当てれば、複数の人数で開発を進めたとしても統一性を保てます。 その結果、リクエスト(HTTPメソッド+URI)からどんな処理をするのか判断できるようになります。
次はWebブラウザ上にリレーショナルデータベースから取得したデータを表示したり、登録、更新、削除できるように実装します!
この記事のまとめ
- Railsでは「REST」に従ってアプリケーションを設計することを推奨している
- RESTの考えに則って設計を行うことで、Webアプリケーションの実装が簡潔になる
この記事で学んだことをTwitterに投稿して、アウトプットしよう!
Twitterの投稿画面に遷移します