すでにメンバーの場合は

無料会員登録

GitHubアカウントで登録 Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

登録がまだの方はこちらから

Pikawakaにログイン

GitHubアカウントでログイン Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

RESTfulなサービス設計について学ぼう

この記事で出来るようになること

Webブラウザ上にリレーショナルデータベースから取得したデータを表示したり、登録、更新、削除できるように実装する前に、Railsが推奨するアプリケーションの設計について学習しましょう。

まずは、これまで学習した内容を振り返ります。

振り返り(RDBMSとActiveRecord)

Pikawakaカリキュラムでは、Webアプリケーションのデータの保存先としてリレーショナルデータベースを利用します。リレーショナルデータベースとは、各データをテーブルで整理して、互いに関連付けて扱えるデータベースのことでしたね。

データベースにはデータを溜め込むだけではなく、その溜め込んだデータを必要な形に整形して活用することができます。

リレーショナルデータベース

データベースの機能を利用するには、データベース管理システムと呼ばれるソフトウェアが必要になります。リレーショナルデータベースの場合、リレーショナルデータベース管理システム(RDBMS)で制御されます。

リレーショナルデータベース管理システムは、ユーザーなどの「データベースを利用する側」のSQL文の指示を受けて、リレーショナルデータベースを操作します。

データベース言語

SQL文は、データベース言語であるSQLで記述された命令文のことでしたね。

例えばリレーショナルデータベースにユーザー情報を管理するusersテーブルがあり、id1のユーザー情報だけが欲しい場合、以下のSQL文でRDBMSへ指示を出します。

SQL文 | idが1の値を持つレコードを取得する
1
SELECT * FROM users WHERE id = 1;

SQL文

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

railsの場合

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

ActiveRecord

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

Rails(ActiveRecord)の場合 | idが1の値を持つレコードを取得する
1
2
User.find(1)
#SELECT * FROM users WHERE id = 1;

Railsの場合

MVC

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

つまり、これまではモデルとリレーショナルデータベース間でのデータのやり取りを学習してきたことになります。

MVC

多くの場合は、アプリケーションを利用するユーザーに対して、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」で構成します。

Railsの場合のリソース1

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

リソース毎の処理をMVCで構成

ポイント
  1. リソースは、Web上に存在する情報のこと
  2. Railsアプリでは、データベースのテーブルをリソースとして捉える

RESTとは

REST(Representational State Transfer)とは、リソースを中心に物事を考える「リソース指向アーキテクチャ」をベースとした一連の設計原則のことです。

RESTの考え方に則って設計されたWebサービスでは、クライアント側(Webサービスを利用する側)は一意なURIHTTPメソッドによって、提供されるリソースを利用することができます。

URI

RESTでは、すべてのリソースは一意の名前を持ちます。

リソースの名前は、URIで表現されます。
例えば、以下のように/employeesemployeesリソースを表します。

リソースの名前

URIは、リソースの名前だけではなく、リソースのアドレス(住所)を表します。URIをみるだけで「どのソースが動くか」という判断ができるようになります。

Railsでは、リソース毎の処理をMVCで構成させます。URIの/employeesを見るだけで、以下のソースが動くことがわかります。

リソース毎の処理をMVCで構成

リソースは、情報のかたまりのように「集合」を表します。URIはこのリソースを示すので、/getEmployeeではなく、/employeesのように名詞の複数形が適切です。

このようにRESTにおけるURIは、リソースの「名前」と「アドレス」です。

ポイント
  1. すべてのリソースは一意の名前を持つ
  2. リソースの名前は、URIで表現される
  3. URIは、リソースのアドレスも表現される

HTTPメソッド

RESTでは、リソースに対するCRUD操作は、HTTPメソッド(GET、POST、PUT、DELETE)を利用して、リクエストするものとしています。

URIがリソースを表すものだとしたら、HTTPメソッドはリソースに対して「何をするか」という操作を表すものです。

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操作は、以下の通りです。

HTTPメソッドのCRUD操作

ポイント
  1. すべてのリソースはURIで表現される一意なアドレスを持っている
  2. リソースに対するCRUD操作は、HTTPメソッドを利用する
  3. RESTは、全てのリソースは一意のURIを持ち、リソースに対するCRUD操作はHTTPメソッドでリクエストするものとしている

RESTfulなサービス

RESTの考え方に則っていることを「RESTful」と呼びます。

RESTの考え方に則って設計されたWebサービスは、RESTfulなサービスと呼びます。Railsでは、RESTfulなサービスを作成するための機能が用意されています。その機能を利用することで、実装が簡潔になります。

リソースベースのルーティング

Railsでは、リソースをベースとしたRESRfulルーティング(RESTの考え方に則っているルーティング)を手動で設定する場合は、次のように7つのアクション(index・show・new・create・edit・update・destroy)を割り当てます。

ルーティングの記述方法

例:config/routes.rb | blogsリソースに含まれるRESRfulルーティング
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つのアクションの名前と目的は同じです。

7つのアクションは「Rails開発者の中で共通認識を持てるアクション」でもあります。

リソースをベースとしたRESRfulルーティングを7つのアクションに割り当てれば、複数の人数で開発を進めたとしても統一性を保てます。 その結果、リクエスト(HTTPメソッド+URI)からどんな処理をするのか判断できるようになります。

次はWebブラウザ上にリレーショナルデータベースから取得したデータを表示したり、登録、更新、削除できるように実装します!

ぴかわかさん

この記事のまとめ

  • Railsでは「REST」に従ってアプリケーションを設計することを推奨している
  • RESTの考えに則って設計を行うことで、Webアプリケーションの実装が簡潔になる