MIKAZUKI 開発者ブログ

MIKAZUKI で開発を進める上で見つけた気づきやノウハウをお伝えするテックブログです。

Rails5のAPImodeでアプリケーションを作成するところまでやってみた話

やったこと

開発しているiosアプリのAPIを作りたく、せっかくなら18日に出たRails5のベータでも使ってみようと思い、環境を構築した。

rbenvのアップデート

rbenvを使っているのだが、rails5はruby2.2.2以上が必要だったのでアップデートをする必要があった。

# ruby-buildをアップデート
$ brew upgrade ruby-build

$ rbenv install 2.2.3

# 今回作成するアプリケーションにのみ2.2.3を使用する
$ rbenv local 2.2.3

# 設定結果を確認
$ rbenv versions

rails5のインストール

本当はrailsアプリケーション内のGemfileで管理したかったのだが、

$ rails new my_api --api

を試してみたかったので普通に

$ gem install rails --pre

を叩いた

APImodeでのアプリケーション作成

http://edgeguides.rubyonrails.org/api_app.html を参考に

$ rails new my_api --api

と打ってみる。

generateされたアプリケーションのapplication.rbを見てみると

config.api_only = true

application_controller.rb

class ApplicationController < ActionController::API
end

APIモードでのrailsアプリケーションが生成されていた。

起動させてみる

なにも考えずに

$ bundle exec rails server

=> Booting Puma
=> Rails 5.0.0.beta1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
I, [2015-12-26T13:58:52.252332 #10939]  INFO -- : Celluloid 0.17.2 is running in BACKPORTED mode. [ http://git.io/vJf3J ]
Puma 2.15.3 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:3000

WeblickではなくPumaが立ち上がった。(rails5がpumaを採用しているのか、apiモードのみなのかはまだ調べられていない。というか4.1系をずっと使っていたのでどこかのタイミングで変わったのか、、?)

とりあえずアクセスするといつものページが表示されたので、ひとまず起動はうまくいったっぽい。

APIっぽい仕事をさせてみる

class PostsController < ApplicationController

  def index
    @posts = Post.all
    render json: @posts
  end

  def show
    @post = Post.find_by(params[:id])
    render json: @post
  end
end

上記のような適当なコントローラを作成して(省略しますがモデルやルーティングも) localhost:3000/posts/1を叩いたら {"id":1,"name":"hogehoge","contents":"fugafuga","created_at":"2015-12-26T05:46:08.955Z","updated_at":"2015-12-26T05:46:08.955Z"} と結果が返ってきてくれた。

なにが嬉しいのか

正直上のようにjsonで返すことを明記すれば今までのrailsでも同じような挙動になっていたはず。(というかそのようにAPIサーバをrailsで構築していたものを多いと思う。もちろんGrapeとか使っているのも多いけど)

おそらく僕がリファレンスなどを全然読めてないので、もっとAPIに特化したうまい書き方があるはず。

また、今回のAPIモードの最大のポイントはAPIサーバとして必要最低限のミドルウェアで動かせる、というところのような気がしているのでもっと大きなデータで検証とかしてみたいと思った。

そんなわけでさらっと使ってみただけだと、なにが嬉しいのかあまり実感できなかったが、ミドルウェア周りの話とかAPサーバの話とか、単に自分に知識がないから実感できていないだけの気がしたので勉強します。。。