Rails5 APIモード

こんばんは、くぼたです。
今回はRails5の話です。

めちゃくちゃ今更感がありますが、betaも3まできているので、まだまだホットなのかなと思い、取り上げました!

今回はRails5の中でも、新機能の「APIモード」のお話をして行こうかなと思います。


ここ数年、アプリはもちろんフロントでもSPAなどAPIにアクセスしてjsonなどを受け取り、パースして使ったりする機会も増えていますし、
誰もが一度はAPIを作ったことがあると思います。


しかし、今まではRailsAPIを作るとなると、
respond_toで渡す形式を返えたり、など、若干のめんどくささがありました。


そんなわりと気になるレベルのかゆさにとどくのが、今回Rails5で標準搭載された「APIモード」です。

こちらはその名の通り、APIとして構築するために最適化されたRailsです。


百聞は一見にしかず、さっそく見て行きましょう!


今回の環境は以下の通りです。
・Centos7.0
Ruby 2.3.0
Rails 5beta3

(ちなみにrails5はRuby 2.2.0以上が必須です。)


Gemfileに以下を書きます。


gem "rails", "5.0.0.beta3"


そしていつものbundle install !!!


さて、ここからが超大事です!APIモードでアプリを作ります。

bundle exec rails new アプリ名 -B --api


これでAPIモードでRailsアプリ完成です!

何がちがうのか、さらっと見てみましょう。app以下に移動します。

app_dir


あれ、なんだろう、何かがいつもと違う。。。少ない気がする。。。
試しにAPIモードではないアプリも作ってみました。そしてapp以下を見ると。。。

app_dir_no_api


あ、helpersとassetsだ!!

それもそのはず、だって、APIなんですから。
viewsはメールだったりjsonのテンプレートを使うときに使いますから、生き残りましたね。
他にも、bundle install されるGemの数も普通より少なかったり、APIモードは省エネなんですね。
js関連や、css関連、web-consoleやErubisなどなどがないですね。


さて、では実際に動かして遊んでみましょう。

適当にscaffoldします。

bundle exec rails g scaffold Foo name:string age:integer

そしてmigrate

bundle exec rails db:migrate

あ、Rails5からrakeコマンドがrailsに統合されたのでご注意を。

そしてまたまた適当にデータ入れて。。。

bundle exec rails console

irb > Foo.create(name: 'adways', age: 15)


そして、rails startします。

bundle exec rails s -b 0.0.0.0
 

Rails5では、デフォルトのサーバーがPumaになっており、早いです。これは私はかなり気に入っているところです。
APIモードだからか、気持ち普通のRailsよりも早い気がします!笑
 

ではアクセスしてみましょう。
するとjson形式で値が返ってきているはずです。


[{"id":1,"name":"adways","age":15,"created_at":"2016-03-11T01:08:45.179Z","updated_at":"2016-03-11T01:08:45.179Z"}]


Controllerを見てみると、デフォルトでrender json: @foos
が書かれているんですね。

ちなみにここのrender jsonを書かなくても一応、同じ値が返ってきます。
しかしステータスコード的には204になっているので、あまりよくないかもしれないですね。



僕の総評としては、やはり無駄な機能を省いているところがすばらしいなと思います。
フレームワークを使っていると、ファイルの数が膨大になり、僕は管理が煩雑によくなってしまうんですが、これくらいシンプルにしてくれるととても助かりますね。
今度自宅で作るwebアプリは、サーバーとフロントを完全に分けて開発したかったので、使ってみようかなと思います。 


今回色々触ってて、またRails5が楽しくなってきたので、次回はActionCableあたりをいじってみようかなと思います。

以上です。