LoginSignup
2
1

More than 1 year has passed since last update.

Rails Gem JSONをシリアライズする active_model_serializersを学ぶ

Last updated at Posted at 2021-05-07

はじめに

RailsでAPIモードでアプリケーションを作ったことすらないですが
active_model_serializersというGemについて学んだことをまとめておきます。


シリアライズとは

シリアライズとは、複数の並列データを直列化して送信することである。

具体的には、メモリ上に存在する情報を、ファイルとして保存したり、ネットワークで送受信したりできるように変換することである。他方、既にファイルとして存在しているデータや、一旦シリアライズされたデータがネットワークから送られてきた際に、プログラムで扱えるようにする作業をデシリアライズと呼ぶ。

とのことですが、データをJSONで返すのもシリアライズされた結果のようです。
今回は置いておきます。。


  

active_model_serializersとはどんなGem?

active_model_serializersとはJSONを簡単にいい感じに整形してくれるGemらしいです。
他にも同じようなGemやjbuilder(APIの記事によく出てきました)のような機能はありますが

  • レスポンスが早い
  • SerializerクラスにJSONを整形する処理をまとめられる
  • 直感的にわかりやすい書き方ができる

というメリットがあるようです。

active_model_serializersの導入

Gemfileに記述してbundle installして導入します。

Gemfile
gem ' active_model_serializers'
% bundle install

モデル生成

% rails g serializer モデル名

このコマンドを実行することで、appディレクトリ下にserializersディレクトリが自動的に作成され、
指定したモデル名のファイルも作成されます。
例えば
console
% rails g serializer user

とするとuser_serializer.rbが作成されます。
自動生成されたserializerファイルにいろいろな記述をすることで自由にJSONを整形することができます。

JSONに含める値を追加、削除する

app/serializers/user_serializer
class UserSerializer < ActiveModel::Serializer
  attributes :id
end

初期状態ではこのような形になっていますが
ここに表示したいモデルのカラム名を入れることでJSONに含めることができます。

app/serializers/user_serializer
class UserSerializer < ActiveModel::Serializer
  attributes :id, :name, :email
end

nameとemailを追加しています。

controllerにシリアライザーを指定します

users_controller.rb
class UsersController < ApplicationController
  def index
    users = User.all
    #このように指定します
    render json: users, each_serializer: UserSerializer
  end
end
json
{
  "id": 1,
  "name": "Tom",
  "email": Tom@example.com
}

まだまだ理解が足りないので
随時追加していきます。

*追記

現在active_model_serializersは更新されていないようです。
ご指摘ありがとうございます。

active_model_selializersのGitHubに代わりになるGemが書いてありました。
記載します。

  • jsonapi-rbは、高いパフォーマンスとモジュール化されたJSON:API専用の実装。 JSON:API Suiteのようなプロジェクトが生まれ、活発なコミュニティが存在します。
  • fast_jsonapiは、Rubyオブジェクト用の超高速なJSON:APIシリアライザです。
  • jsonapi-resourcesは、JSON:API サーバーを実装するための、リソースに焦点を当てた人気のフレームワーク。
  • blueprinterは、高速で宣言的な、API仕様にとらわれないシリアライザーで、コンポーザブルビューを使って重複を減らします。

参考サイト
Rails 6で認証認可入り掲示板APIを構築する #9 serializer導入
gem Active Model Serializers のドキュメントを翻訳しました
Rails – ActiveModelSerializers gemでサクサクAPI開発
Railsのactive_model_serializerについて学ぶ_100DaysOfCodeチャレンジ10日目(Day_10:#100DaysOfCode)

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1