10/26に開催されたginza.rb「Ginza.rb 第4回 Rails 4.0時代の json ライブラリ頂上決定戦!!」のレポート記事です。
今回は、Rails 4で有名どころのjsonライブラリ、jbuilder、rabl、Activemodel Seriarizerを比較してその特徴を考えていくのがテーマでした。参加して、jsonのライブラリにもそれぞれ設計に思想の違いがあって、その特徴の違いを意識して、ライブラリを選択するべきだと実感できました^^
ちなみに、次回は11/26(火)に「Ginza.rb 第5回 ハラショー! Russian Doll Caching!」がもしご興味があればぜひ!
🏈 jbuilder
jbuilderはJSONレスポンスを出力するテンプレートエンジンです。Rails 4のbundle installでデフォルトでインストールされます。
jbuilderの一番簡単な使い方のイメージは/app/views/articles/show.json.jbuilder
内でこんな風に使います。
json.id @article.id |
これで、http://localhost/articles/1.json
でアクセスするとjsonを出力してくれます。
jbuilderはviewなどに書くことも可能で、DSLもRubyらしくて読みやすいです。
特徴は次のとおり。
* Viewでき術できる。部分テンプレートなども使える * Rails インテグレーションが優れている * キャッシュにも対応している
jbuiderに関するリンクはこちら。
😸 rabl
rablはRuby API Builder Languageの略で、jbuilderなどに比べて機能も豊富です。json、xml、MessagePack、PList、BSONなどに対応しています。
rablの簡単な例は、/app/views/articles/show.json.rabl
で次のように書くとjsonを出力してくれます。
object @article |
少しだけ書き方にクセがありますが、覚えてしまえば書きやすそうです。
rablの特徴は次のとおり。
* 記述量が、jbuilderよりも少ない。 * bson, message_list, xmlなど幅広く対応 * 設定がかなり多いので細かい対応がしやすい
rablに関するリンクはこちら。
🍮 Active Model Serializers
Active Model Serializersは、Active Modelをシリアライズするためのライブラリで、jsonに対応しています。
Active Model Serializersの簡単な使い方としては、/app/serializers/article_serializer.rb
に次のように書きます。
class ArticleSerializer < ActiveModel::Serializer |
jbuilderやrablと違って、専用のクラスを作るところが特徴的です。
* コントローラに記述しないといけないので気持ち悪い * rails g serializer も提供されている * キャッシュにも対応、継承もできてオブジェクト思考的
Active Model::Serializerにかんするリンクはこちら!
#409 Active Model Serializers - RailsCasts
active_model_serializersを試してみた
😎 パフォーマンス比較
簡単なABテストを会場で行いました。その際のパフォーマンスはserializer/jbuilderが同じくらい、rablは2倍くらいの時間がかかるっぽかったです。
ちなみにABコマンドの説明はこちら。
Abコマンドを使ったウェブアプリケーションのパフォーマンス計測
🎳 考察
それぞれのライブラリは得手不得手や、設計上の思想の違いがあり、一概にコレが一番というわけではなさそうです。各ライブラリの特徴を意識しつつ、ぜひ試してみてください!