はじめに
つい先日お仕事でRuby on Railsデビューを果たしました。
Railsというと画面表示を伴うWebサービスが作られている印象が大きかったのですが、お仕事ではRailsでAPIが作られていました。
なので、ここではWebサービス、APIの作成を両方試してみようと思います。
環境
Windows 10 Home 64ビット
※環境構築は「Ruby on Railsインストール(Windows10)」にて。
Railsが動く仕組み
RailsはMVCモデルをベースとした仕組みにより動きます。
MVCはそれぞれ「Model」(モデル)、「View」(ビュー)、「Controller」(コントローラ)の頭文字からきており、Railsでアプリケーションを開発するときに度々出てきます。
※MVCの詳細は「Ruby on Rails - MVCモデルとRESTアーキテクチャ」にて。
Webサービス作成
初学者恒例の "Hello World" を表示するWeb画面を作成します。
1.新規プロジェクト作成
以下のコマンドを実行し、Webサービスの新規プロジェクトを作成します。
rails new アプリケーション名
※フォルダ構成について
アプリケーションフォルダ配下のフォルダ構成は、Railsドキュメントの
「Ruby on Railsとは > フォルダ構造 > フォルダ一覧」にて確認できます。
2.コントローラの作成
以下のコマンドを実行し、コントローラを作成します。
コントローラを作成する際は、先に作成したアプリケーションフォルダへ移動してから作成します。
cd アプリケーションフォルダ
rails generate controller コントローラ名
※ここではコントローラ名を「hello_world」としました。
コントローラである「hello_world_controller.rb」が「app/controllers」フォルダ配下に生成されました。
生成時のソースコードについては以下のようになっています。
class HelloWorldController < ApplicationController
end
3.アクションの作成
コントローラで定義されるメソッドをアクションと呼びます。
先に作成した「hello_world_controller.rb」を編集し、「index」アクションを定義してみます。
class HelloWorldController < ApplicationController
def index
end
end
※コントローラとアクションの一括作成
ここではコントローラとアクションを別で作成しましたが、コントローラ作成時に一括で作成することも可能です。
一括で作成するときは、以下のコマンドを実行します。
rails generate controller コントローラ名 アクション名1 アクション名2 ...
# 例
rails generate controller hoge index create
4.ビューの追加
「app/views/hello_world」フォルダ配下に、indexアクションに対応するビュー「index.html.erb」を追加します。
※アクションに何も記述されていない場合は、デフォルトで「app/view/コントローラ名/アクション名.html.erb」に紐付くようになっています。
今回は"Hello World"を表示させる想定なので、「index.html.erb」には以下のように記載します。
<h1>Hello World</h1>
5.ルーティングの設定追加
ブラウザからのリクエストを受け、コントローラに振り分ける設定を追加します。
修正するファイルは「config」フォルダ配下の「routes.rb」です。
Rails.application.routes.draw do
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
get '/helloworld', to: 'hello_world#index'
end
書式については、Railsドキュメントの「ルーティング定義」で確認できます。
今回はGETリクエストに対応したgetメソッドを記載しました。
6.Railsサーバの起動
以下のコマンドを実行し、Railsサーバを起動します。
rails s
7.ブラウザから動作を確認
http://localhost:3000/helloworld にアクセスします。
※URLの"helloworld"は、「routes.rb」の get で定義した'/helloworld'の部分になります。
無事"Hello World"が表示されました!
API作成
"Hello World" をJSON形式で返却するAPIを作成します。
大まかな流れはWebサービスと同じです。
1.新規プロジェクト作成
以下のコマンドを実行し、APIの新規プロジェクトを作成します。
通常のコマンドに--api
を付与し、APIモードとしてプロジェクトを作成します。
rails new アプリケーション名 --api
2.コントローラとアクションの作成
実行コマンドについてはWebサービスと同様です。
今回はコントローラとアクションを一括で作成してみます。
コントローラ名、アクション名はWebサービスと同様とします。
プロジェクト作成時のAPIモードの効果がここで確認できます。
普通にコントローラを作成した場合、view、helper、assetといったビューに関わるファイルも同時作成されますが、APIにはビューは不要であるためそれらのファイルは作成されません。
3.コントローラの編集
"Hello World" をJSON形式で返却する処理を追加します。
class HelloWorldController < ApplicationController
def index
render json: { data: "Hello World" }
end
end
4.ルーティングの設定変更
コントローラとアクションを一括作成されたことにより、ルーティングの設定追加が自動に行われていますが、変更しておきます。
Rails.application.routes.draw do
get 'hello_world/index'
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
Rails.application.routes.draw do
get '/helloworld', to: 'hello_world#index'
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
5.Railsサーバの起動
以下のコマンドを実行し、Railsサーバを起動します。
※並行でWebサービスのプロジェクトも作成しているため、デフォルトポートとは別のポートでサーバを起動します。
rails s -p 3001
6.curlコマンドを実行し動作を確認
以下のコマンドを実行し、JSONが返却されることを確認します。
curl --request GET --url http://localhost:3001/helloworld