WEB系の技術を詳しく解説

【Rails5】RailsのAPIモードでアプリを作成し、実際に動かしてみよう!

Rails5には「APIモード」と呼ばれるモードが搭載されており、Railsを使ってAPIを作成する事が可能です(しかも簡単に!)。

仕組みさえ理解したらいくらでも応用が効くので、Railsをある程度学習した人は是非一度体験しておくと良いと思います。

スポンサードリンク

アプリケーションを作成する

まずはRailsのバージョンが5である事を確認しておきます。

$ rails -v
Rails 5.2.1

5であればアプリケーションを作成します。

$ rails new rails-api --api

newする時に「–api」オプションを付けるとAPIモードでRailsアプリケーションを作成する事が可能です。

アプリを作成したら bundle install  でgemをインストールしましょう。その後、rails s にてサーバーを立ち上げ、localhostでrailsのページにアクセスできるか確認します。

APIでレスポンスとして返すモデルを作成する

次に、モデルを作成します。このモデルが実際にAPIのレスポンスとして返るデータ構造そのものになります。

$ rails g model User name:string email:string age:integer

生成されたマイグレーションファイルは以下の様になります

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email
      t.integer :age

      t.timestamps
    end
  end
end

内容を確認して問題がなければ rails db:migrate  を行なってマイグレーションします。

これでモデルの作成は終了です。

スポンサードリンク

ルーティングを設定する

次に、ルーティングを設定しておきます。ここで設定したルーティングがAPIを返すためのURLなので、以下のように設定しておきましょう。

Rails.application.routes.draw do
  resources :users, only: [:index, :show]
end

この設定によるルーティングは以下の様になります。

 Prefix Verb URI Pattern    Controller#Action
users GET  /users(.:format)    users#index
user GET  /users/:id(.:format)    users#show

コントローラーを作成する

さて、コントローラが未だできていないので作成していきましょう。

$ rails g controller users index show

今回必要なアクションは「index」と「show」だけなので、このようなコマンドで大丈夫です。

作成されたUsersコントローラを以下の様に変更してみましょう。

class UsersController < ApplicationController
  def index
    @users = User.all
    render json: @users
  end

  def show
    @user = User.find(params[:id])
    render json: @user
  end
end

これでAPIを返す準備が整いました。(え!もう!?笑)

APIが返ってくるか確認する

では実際にAPIが返ってくるか確認してみましょう!rails s  にてサーバーを立ち上げた後、http://localhost:3000/users にアクセスしてみてください。

無事jsonがレスポンスとして返ってきているのが確認できるかと思います。(ただの空の配列の状態ですが、json形式です。)

今はまだデータが入っていないので、ちょっとデータを入れてみましょう。折角なのでgemを使ってダミーデータを投入してみましょうか。

番外編:fakerを使ってダミーデータを投入する

Gemfileにgemを追加します。

gem 'faker'

$ bundle install  してgemをインストールして下さい。

次に、$ vi db/seed.rb で seed.rbを作成します。そこにダミーデータ投入用のコードを記述します。以下をコピペ。

100.times do
    User.create(
       name: Faker::Name.name,
       email: Faker::Internet.email,
       age: rand(15..60)
     )
end

保存したら、$ rails:db seed コマンドを実行しすると、ダミーデータが100個投入されます。

(自分の環境では以下の様になりました。fakerは楽にダミーデータが投入できるので良いですね)

#<ActiveRecord::Relation [#<User id: 1, name: "Mariano Bauch DDS", email: "marybethberge@mrazkoch.com", age: 17, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 2, name: "Maragaret Murray", email: "ayakohuels@bailey.org", age: 47, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 3, name: "Ms. Leonie Hoeger", email: "kris@windlergibson.com", age: 29, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 4, name: "Eliseo Stiedemann", email: "simonelemke@johns.co", age: 60, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 5, name: "Melva Watsica", email: "efrainthompson@ritchie.co", age: 34, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 6, name: "Mrs. Kelley McGlynn", email: "loyd@wolffnitzsche.io", age: 39, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 7, name: "Johnnie Klein", email: "toneycasper@hoegergoyette.net", age: 40, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 8, name: "Katrice Durgan", email: "freda@gleasonosinski.net", age: 37, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 9, name: "Grant Ledner", email: "bradygorczany@cainrohan.org", age: 44, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, #<User id: 10, name: "Racheal Ullrich", email: "hymanlittle@haag.name", age: 32, created_at: "2019-03-19 09:42:15", updated_at: "2019-03-19 09:42:15">, ...]>
irb(main):002:0>

改めて同じページにアクセスしてみる

では、再度 http://localhost:3000/users にアクセスしてみて下さい。

ちゃんとjsonデータが返ってきています!ついでに http://localhost:3000/users/1 にもアクセスしてみましょう。

idが1のUserデータがきちんとレスポンスとして返ってきていますね!

APIモードで作成したアプリの差分

Rails5でAPIモードでアプリを作成すると、通常のアプリ作成と何が事なるのでしょうか。

正直知らなくても良いのですが、ちょっとした知識として把握しておくと良いかと思います。

sass-rails

uglifier

coffee-rails

therubyracer

jquery-rails

turbolinks

web-console

等のUI関連のgemが省かれています。さらに、APIとして動作するのでビューファイル関連のファイルも一式無いです。ペルパー等もありません

そして、config/environment/ 配下のファイルについてアセット関連の記述が無くなっていたり、config/initializers/ 配下のアセットやらのファイルもありません

APIモードでのコントローラはActionController::APIを継承しています。

class ApplicationController < ActionController::API
end

まとめ

Rails5のAPIモードについてアプリを実際に作成して解説していきました。

結構作るの簡単じゃないですか?少なくとも僕は「APIを作る」という事は難しそうなイメージだったので最初「Railsで簡単にAPIを作れる」という事を知った時に感動しました。

バックエンドはRailsでAPIを作成して処理を行い、フロントはAPIを使って今流行りのVue.jsを使ってアプリを作ると面白そうだな〜と思ったりしました。

これからもRailsのAPIモードをどんどん活用していきましょう!

 

未経験から効率よくWebプログラミングを学習したいのであればプログラミングスクールの「テックブースト」をオススメします。オンラインでどこにいても聞き放題です。無料カウンセリングも行なっているので一度話を聞きに行ってみるというのもアリだと思います。

テックブーストについてより詳しく

スポンサードリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です