Hachinet Logo
×

Rails 5 によるAPIの概要・Rails API 5でJSON APIを構築

ご存知のように、API アプリケーションはブラウザにユーザー インターフェイスを持たず、代わりに JSON または XML データ ... のみが表示されます。したがって、API アプリケーションを作成する場合、ライターは、API を使用する開発者、特に QA をサポートするために添付されたドキュメントを作成する必要があります。 ドキュメントを作成するには多くの方法がありますが、最も簡単な方法は、たとえば Excel または Word ファイルに手書きで書き込むことです。この API が何のためにあるのか、それにアクセスするための URL は何なのか、リクエストを送信するデータは何か、返すレスポンス データは何なのかを指定してください... その後、必要に応じて開発者/QA 側に送信します。使う・読みます。 この方法は非常に手作業であり、多くの労力を要しますが、それらを使用する人にもたらされる価値は必ずしも高いとは言えません。なぜなら、単純に統一されたフォーマットがなく、情報が不足しやすいからです。

 2021年06月10日

ご存知のように、API アプリケーションはブラウザにユーザー インターフェイスを持たず、代わりに JSON または XML データ ... のみが表示されます。したがって、API アプリケーションを作成する場合、ライターは、API を使用する開発者、特に QA をサポートするために添付されたドキュメントを作成する必要があります。 ドキュメントを作成するには多くの方法がありますが、最も簡単な方法は、たとえば Excel または Word ファイルに手書きで書き込むことです。この API が何のためにあるのか、それにアクセスするための URL は何なのか、リクエストを送信するデータは何か、返すレスポンス データは何なのかを指定してください... その後、必要に応じて開発者/QA 側に送信します。使う・読みます。 この方法は非常に手作業であり、多くの労力を要しますが、それらを使用する人にもたらされる価値は必ずしも高いとは言えません。なぜなら、単純に統一されたフォーマットがなく、情報が不足しやすいからです。

ご存知のように、API アプリケーションはブラウザにユーザー インターフェイスを持たず、代わりに JSON または XML データ ... のみが表示されます。したがって、API アプリケーションを作成する場合、ライターは、API を使用する開発者、特に QA をサポートするために添付されたドキュメントを作成する必要があります。

ドキュメントを作成するには多くの方法がありますが、最も簡単な方法は、たとえば Excel または Word ファイルに手書きで書き込むことです。この API が何のためにあるのか、それにアクセスするための URL は何なのか、リクエストを送信するデータは何か、返すレスポンス データは何なのかを指定してください... その後、必要に応じて開発者/QA 側に送信します。使う・読みます。

この方法は非常に手作業であり、多くの労力を要しますが、それらを使用する人にもたらされる価値は必ずしも高いとは言えません。なぜなら、単純に統一されたフォーマットがなく、情報が不足しやすいからです。

 

1. Rails 5 のAPI モードの概要


Rails 5 がついに正式にリリースされ、それで、使用する新しい追加機能を見てみましょう。

最初に話すのは、Rails 5 のAPI モードの登場です。これにより、以前にコントローラーに含める必要があった面倒なものを使用することなく、Web API を構築できます。

1.1 Web API とは

API は Application Programming Interfaces の略です。簡単に理解すると、2 つのソフトウェアが相互に通信できるインターフェースです。現在、Web API を構築する為に非常に一般的で使われ、モバイルアプリケーションやJavaScriptアプリケーションのバックエンドとして使用されています。Web API は、HTML の代わりに JSON (または XML) を使用することがよくあります。 JSON は、自動化されたクライアントにとって理解しやすく、使用しやすく、現在、使用する Web API で簡単に見つけることができます。

1.2 Rails5のAPIモードの起源

実際には、この機能はRails 5 に統合された Rails API プロジェクトです。

1.3 Rails 5 のAPI モードの使用方法

単純な Rails API のみのアプリケーションの作成は次のとおりです。

 rails new my_app --api 

--api を使用することで、生成されたアプリケーションはミドルウェアを削減し、ActionController::API によって ActionController::Base から継承する代わりに、ビュー/ヘルパー/アセットと ApplicationControllers も作成しません。その後、config/application.rb ファイルに追加され、アプリケーションが Web API のみになります。

 # config/application.rb 

 MyApp モジュール 

 class Application < Rails::Application 

 config.api_only = true 

 end 

 end 

そして、通常の RoR アプリケーションとまったく同じようにアプリケーションを簡単に開発できます。そのアプリケーションには、ビュー、ヘルパー、またはアセットはすべて既にクライアント内にあるため、何もありません。ビューの代わりに、おそらくシリアライザーのようなものを使用して JSON ドキュメントを構築します。

1.4 Sinatra や Grape の代わりに Rails API モードを使用するのはなぜ

Grape や Sinatra などのよりコンパクトでシンプルなものを使用するのではなく、Rails を使用して Web API を構築する理由をよく尋ねられます。フレームワークは小さなアプリケーションの構築に対応できますが、ORM、いくつかのビルダー、自動リロード機能などに加えて、使用するライブラリをすばやく見つけることができます。そして最終には、アプリケーションをさまざまなライブラリから構成された巨大な Rails アプリケーションに変えることができます。それは本当に悪いことではありません。このアプローチでは、使用する gem を正確に選択できます。しかし、Rails を使用することを決定することは、他の選択肢に対する適切な選択肢でもあります。さらに、Rails ハンドルには使用できるものがたくさんあり、別の小さなフレームワーク (セキュリティ、条件付き GET、キャッシングなど) を探す必要はありません。

1.5 Rails API モードはいつ使用する

アプリケーションが Web API である場合は、Rails 5 のAPI モードのみを使用したほうがいいです。これは、HTML を送信するのではなく、クライアントが簡単に使用でき、好んで使用できる JSON または XML を送信することを意味します。ラックミドルウェアは、パイプラインのデザインパターンの完全な実装であり、非常に重く、要求と応答のオブジェクト上で実行するためにRoRのに使用されています。

1.6 ミドルウェア

Rack ミドルウェアは、パイプライン設計パターンの完全な実装であり、要求および応答オブジェクトで実行するために RoR で非常に頻繁に使用されます。デフォルトでは、Rails API のみのアプリケーションには限られたミドルウェアが付属しています。これは、それらが不要な機能に削減されていることを意味します。 ミドルウェアの追加は、application.rb ファイルに宣言行を追加するのと同じくらい簡単です。 たとえば、API に Rack::Deflater を追加する場:

 # config/application.rb 

 module Alexandria class Application < Rails::Application 

 config.api_only = true 

 config.middleware.use Rack::Deflater 

 end 

次のコマンドを使用して、アプリケーションで使用されているミドルウェアを一覧表示できます。

 

2 . Rails API を構築するのはJSON API バージョン。


2.1 JSON API とは

JSON API は、リソースに対するクライアント要求を取得または変更する方法と、サーバーがそれらの要求をバックアップする方法の仕様です。

JSON API は、クライアントとサーバーの間で渡される要求の数とデータの量の両方を最小限に抑えるように設計されています。 この効果は、読みやすさと柔軟性を損なうことなく実現されます。

2.2 データをフォーマットする方法

api JSON シリアル化データ には、次のものが含まれている必要があります。

  • JSOn API 応答のルート レベルは JSON オブジェクトです。
  • このオブジェクトには、トップレベルのデータを持つキーが含まれます。
  • キーには、レコードを表す単一の JSON オブジェクト、またはレコードを表すJSON オブジェクトのコレクションを指します。データが含まれます。
  • JSON オブジェクトは、以下を含むレコードを表します。
  • レコードの IDです。
  • レコードタイプ、つまりposts cats などのリソースの名前です。
  • そのレコードのプロパティを表すキーと値のペアを含む JSON オブジェクトを指す属性キー。 ここに表示されるプロパティがある場合は、データをシリアル化する方法によって決まります。
  • リソースと他の JSON API リソースとの間の関係を説明する JSON オブジェクトを指す関係のランダム キーです。

2.3 Rails 5 API JSON API を実装する

 gem install rails --pre 

 rails new catbook --api --database=postgresql 

JSON API が進むべき道であり、データのフォーマット方法の基本的な理解ができたので、JSON API を構築してみましょう。

2.4 アプリ

Cat の関連のデータとその設定を提供する単純な Rails 5 API を構築します。したがって、私たちのアプリには の主2つ要なリソースがあります: 猫と趣味です。 猫は興味がたくさんあり、趣味は猫がたくさんいます。 私たちは多対多の関係を持っています。

  •  ステップ1: 開始する

Rails 5 での最初の実行:

次に、先に進み、ディレクトリに 入りGemfile に次の gem を追加します。

 gem 'active_model_serializers' 

 gem 'rack-cors' 

次に実行します:

 bundle install 

次に、JSON API API アダプターを設定する必要があります。 ファイルを作成する

 config/initializers/active_model_serializer.rb 

そして確立する:

 ActiveModelSerializers.config.adapter = :json_api 

これにより、Rails にデータを JSON API 形式でシリアル化するように指示します。

また、データを受信するとき (サーバーへの jhacsh POST データのとき) JSON API

受け入れるようにアプリに指示する必要があります。 同じファイルに次を追加します。

 api_mime_types = %W( 

 application/vnd.api+json 

 text/x-json 

 application/json) 

 Mime::Type.register 'application/vnd.api+json', :json, api_mime_types 

最後に CORS を設定することを忘れないでください。 Rack-cors gem を使用しています。

 

  • ステップ2:ドメイン モデル

CatHobbyCat Hobbies のリソースを作成します。 次のプロパティを持つ Cat に移行します。

 class CreateCats < ActiveRecord::Migration[5.0] 

 def change 

 create_table :cats do |t| 

 t.string :name 

 t.string :breed 

 t.string :weight 

 t.string :temperament 

 t.timestamps 

趣味:

 class CreateHobbies < ActiveRecord::Migration[5.0] 

 def change 

 create_table :hobbies do |t| 

 t.string :name 

 t.timestamps 

 end 

と猫の趣味:

 class CreateCatHobbies < ActiveRecord::Migration[5.0] 

 def change 

 create_table :cat_hobbies do |t| 

 t.references :cat, index: true 

 t.references :hobby, index: true 

 t.timestamps 

 end 

次に、関連付けを使用してモデルを設定します。

 # app/models/cat.rb 

 class Cat < ApplicationRecord 

 has_many :cat_hobbies 

 has_many :hobbies, through: :cat_hobbies 

 end 

 # app/models/hobby.rb 

 class Hobby < ApplicationRecord 

 has_many :cat_hobbies 

 has_many :cats, through: :cat_hobbies 

 end 

 # app/models/cat_hobby.rb 

 class CatHobby < ApplicationRecord 

 belongs_to :cat 

 belongs_to :hobby 

 end 

  • ステップ 3: ルートとコントローラー

次の方法でルーターの名前空間を設定します。

 Rails.application.routes.draw do 

 namespace :api do not 

 namespace :v1 do you 

 resources :cats, except: [:new, :edit] 

 resources :hobbies, except: [:new, :edit] 

 end 

およびコントローラー構造:

 ├── app 

 ├── controllers 

 ├── api 

 └── v1 

 ├── cats_controller.rb 

 └── hobbies_controller.rb 

 ├── application_controller.rb 

Cat Hobbies ルーターの定義がないことに注意してください。 これは、このデータを使用するユーザーは、関連する猫と趣味、および関連する趣味と猫を表示する必要がありますが、猫の趣味は表示する必要がないためです。

  • ステップ4: シリアライザー と JSON レンダリン

顧客が猫に関する記録を要求する場合、関連する趣味の記録も含めたいと考えています。

実際、そのデータをサイドローディングしたいと考えています。

これは、顧客が猫の記録を要求したときに、特定の趣味または関連する趣味の記録全体を含めることを意味します。

2.5 猫のシリアライザ

次に、猫のプロパティとそれに関連する趣味をシリアル化するために、猫のシリアライザーを定義します。

 class CatSerializer < ActiveModel::Serializer 

 attributes :id, :name, :breed, :weight, :temperament 

 has_many :hobbies 

 end 

これにより、Rail は cat にレコードを提供するときに、関係するデータを説明する関係のキーを含めるように指示します。 したがって、次のように Cats#index を定義するとします。

 module Api 

 module V1 

 class CatsController < ApplicationController 

 def index 

 render json: Cat.all 

各猫の関連する趣味のデータを説明するキーの関係が存在することがわかります。 しかし、まだデータをサイドローディングしていません。 ここには実際の趣味の記録はありません。データをサイドローディングするには、コントローラーに追加する必要があります。

 render json: Cat.all, include: ['hobbies'] 

これで、猫のリクエストに関連する実際の趣味の記録を含むトップレベルのキーができました。

2.6 最適化: N+1

ただし、このデータは、各猫の好みのリクエストを1つずつデータベースに送信するため、現時点では読み込みが少し遅いです。 次の2つのデータベース リクエストを行っています。

 Cat Load (0.4ms) SELECT "cats".* FROM "cats" INNER JOIN "cat_hobbies" ON "cats"."id" = "cat_hobbies"."cat_id" WHERE "cat_hobbies"."hobby_id" = $1 [["hobby_id", 1]] 

これをきれいにして、猫に関連するすべての設定について、データベースに1回だけクエリを実行します。

コントローラーのレンダリングを変更します。

 render json: Cat.includes(:hobbies), include: ['hobbies'] 

これにより、データベース内のクエリが次のように変更されます。

2.7 ホビーシリアライザ

Hobby レコードで提供されるデータには、関連する猫の説明データを指すキー関係が含まれていることに気付いたかもしれません。

それは、私のホビー シリアライズをセットアップしているからです。

 class HobbySerializer < ActiveModel::Serializer 

 attributes :id, :name 

 has_many :cats 

 end 

または、ホビー コントローラーで以下を使用して、ホビーのリクエストに応じて、Cat レコード フォレストが含まれる ことを確認できます。

 

3. まとめ

多くのテスト バージョンを使用した長い開発期間を経て、数百人の開発者と数千のコミットを備えた Rails 5.0 は、これまでで最も安定した完全な Rails バージョンの 1 つになりました。

Rails 5.0 のリリースは、Rails コミュニティが依然として非常に強力に維持および発展していることを証明しています。

 

オフショア開発をご検討されている方々はぜひ一度ご相談ください。

※弊社の連絡先は以下の通り

アカウントマネージャー: クアン(日本語・英語対応可)

電話番号: (+84)2462 900 388

メール:  konnichiwa@hachinet.jp

お電話でのご相談/お申し込み等、お気軽にご連絡くださいませ。

If you need advice regarding any of our services, please feel free to contact us.
  • Offshore Development
  • Engineer Staffing
  • Lab Development
  • Software Testing
*Our contact information is as follows:
Phone: (+84) 2462 900 388
Email: contact@hachinet.com
Please feel free to contact us for consultations or applications via phone.
Click here for a free quote.

Tags

If you have any questions or would like to collaborate with Hachinet, please leave your information here. We will get back to you shortly.

 Message is sending ...

Related Articles

 2026年05月13日

テスト戦略:品質を保証する仕組みを実務視点で徹底解説

Webアプリ開発において、品質は「最後にテストして確認するもの」ではありません。実際の現場では、設計・実装・レビュー・CI/CD・監視までを含めて、継続的に品質を維持する仕組みを作ることが重要になります。特に現代の開発では、リリース速度を落とさずに安全性を保つ必要があるため、単なるバグ検出ではなく、「変更に強いシステム」を作るためのテスト戦略が求められています。本記事では、単体テスト・E2E・CI/CD・契約テスト・非機能テストまで含めて、実務で使われる品質保証の考え方を体系的に整理します。

 2026年05月08日

バックエンド開発とは?堅牢なシステムを作るための設計・実装・運用を徹底解説

バックエンド開発は、ユーザーからは見えない部分を担当する領域ですが、実際にはシステム全体の安定性・性能・安全性を支える中核です。特にWebアプリやSaaSでは、API、データベース、認証、非同期処理、監視など、多くの要素が連携して動作しています。本記事では、堅牢なバックエンドを実現するために必要な設計思想、実装パターン、運用戦略を、実務視点で体系的に整理します。

 2026年05月06日

技術選定で失敗しないために:最適なアーキテクチャの選び方を実務視点で解説

技術選定は単なるツール選びではありません。それは「将来の開発速度」「運用コスト」「組織の生産性」を決定する経営判断です。特にWebアプリ開発では、一度選んだアーキテクチャが数年単位で影響を及ぼすため、初期判断の質がプロジェクトの成否を大きく左右します。本記事では、既存の判断軸をベースにしつつ、より実務に踏み込んだ評価方法と具体的な意思決定プロセスを解説します。

 2026年05月05日

最短でリリースするためのMVP開発戦略|Webアプリを高速で市場投入する実践ガイド

Webアプリ開発において最も重要なのは「完璧なプロダクト」ではなく、「最速で検証できるプロダクト」を作ることです。市場ニーズが不確実な状態で機能を作り込みすぎると、開発コストだけが膨らみ失敗するリスクが高まります。そこで重要になるのがMVP(Minimum Viable Product)という考え方です。本記事では、MVPの基本から具体的な開発手順、技術選定、失敗しやすいポイントまでを、実務視点で体系的に解説します。

 2026年04月29日

Web開発に必要な技術スタック完全マップ【2026年版・初心者から実務まで】

Web開発の学習でつまずく最大の理由は、「技術が多すぎて全体像が見えない」ことにあります。実際の現場では、フロントエンド・バックエンド・データベース・インフラが連携して1つのプロダクトを構成しており、個別に学ぶだけでは実装に結びつきません。本記事では、2026年時点の標準スタックをベースに、「なぜその技術が使われるのか」「どうつながるのか」まで踏み込んで整理します。

 2026年04月23日

Androidゲーマー向けパフォーマンス最適化ガイド|安定動作とFPS向上の実践方法

Androidにおけるゲームパフォーマンスは、単純なスペック比較では評価できません。実際の体験は、CPU・GPU・メモリ・サーマル制御・ネットワークといった複数の要素が相互に影響することで決まります。特に近年のモバイルゲームは描画負荷と通信負荷の両方が高く、適切な最適化を行わない場合、本来の性能を維持できません。本記事では、Androidのゲームパフォーマンスを改善するための具体的な手法を、「測定」「設定」「運用」の観点から体系的に整理し、実践可能な形で解説します。

 2026年04月20日

海外旅行でも迷わない!Androidで旅をもっと快適&安心にする必携ツール

海外旅行は、新しい文化や景色に出会える一方で、言語や通信、移動手段など、日常とは異なる環境に直面します。そんなとき、Androidスマートフォンは単なるデバイスではなく、「旅を支えるインフラ」として機能します。本記事では、海外でも安心して行動するために役立つAndroidツールを、実際の利用シーンに沿って紹介します。事前準備から現地での活用まで、一連の流れをイメージしながら読み進めてください。

 2026年04月17日

MiXplorer活用術 ― 「ファイル管理めんどくさい」を一気に解決する最強ツール

スマートフォンを使い続けていると、写真や動画、ダウンロードファイルが知らないうちに増え続け、「どこに何があるのか分からない」という状態になりがちです。整理しようと思っても後回しになり、いざ必要なときに見つからず、無駄な時間とストレスが積み重なっていきます。こうした“地味だけど確実に効いてくる不便さ”を解消してくれるのがMiXplorerです。単なるファイル管理アプリではなく、探す・整える・操作するという一連の流れをスムーズにし、スマートフォンの使い勝手そのものを底上げしてくれる存在です。

 2026年04月15日

音量・ロックのクイックメニューカスタム ― 毎日の操作を1秒短縮する最強時短テクニック

スマートフォンを使っていると、「音量を変える」「画面をロックする」といった操作を1日に何度も繰り返していませんか。これらは一つひとつは小さな操作ですが、回数が増えるほど無駄な時間として積み重なっていきます。設定画面を開いて操作する、ボタンを何度も押す――こうした“当たり前の手間”を減らすだけで、スマホの使いやすさは大きく変わります。本記事では、Android のクイックメニューをカスタマイズし、日常操作を最小限にする方法を実践的に解説します。