Help us understand the problem. What is going on with this article?

【入門】Ruby on Rails アプリケーションを作成してみる

はじめに

つい先日お仕事で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」フォルダ配下に生成されました。
生成時のソースコードについては以下のようになっています。

hello_world_controller.rb
class HelloWorldController < ApplicationController
end

3.アクションの作成

コントローラで定義されるメソッドをアクションと呼びます。
先に作成した「hello_world_controller.rb」を編集し、「index」アクションを定義してみます。

hello_world_controller.rb
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」には以下のように記載します。

index.html.erb
<h1>Hello World</h1>

5.ルーティングの設定追加

ブラウザからのリクエストを受け、コントローラに振り分ける設定を追加します。
修正するファイルは「config」フォルダ配下の「routes.rb」です。

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形式で返却する処理を追加します。

hello_world_controller.rb
class HelloWorldController < ApplicationController
  def index
    render json: { data: "Hello World" }
  end
end

4.ルーティングの設定変更

コントローラとアクションを一括作成されたことにより、ルーティングの設定追加が自動に行われていますが、変更しておきます。

変更前_routes.rb
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
変更後_routes.rb
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


無事JSONにて"Hello World"が戻ってきました!

AoiLaurent
現役ITエンジニアです。JavaとJavaScriptでご飯食べていましたが、最近Railsに転向しました。 まだまだ修行中…
https://note.com/aoilaurent
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away