カテゴリ: Rails 更新日: 2025/11/11

RailsのAPIルーティング設計を完全ガイド!初心者でもわかるバージョン管理と名前空間

APIルーティング設計:versioning・namespaces・JSON Only の定石
APIルーティング設計:versioning・namespaces・JSON Only の定石

先生と生徒の会話形式で理解しよう

生徒

「RailsでAPIを作るとき、どうやってルーティングを設計すればいいんですか?」

先生

「とても大事なポイントですね。APIのルーティングでは、バージョン管理名前空間の使い方が重要なんですよ。」

生徒

「バージョン管理って、アプリのバージョンですか?」

先生

「そうです!Web APIでは将来の変更に備えて、v1、v2のようにversioningするのが一般的なんですよ。それでは、RailsでのAPIルーティング設計を一緒に見ていきましょう!」

1. RailsでのAPIルーティングとは?

1. RailsでのAPIルーティングとは?
1. RailsでのAPIルーティングとは?

Railsでは、Web API(ウェブ エーピーアイ)を作るときに、どのURLにどの処理を対応させるかをルーティングで決めます。たとえば「商品一覧を取得するAPI」なら、/api/productsのようなURLを用意します。

APIはWebブラウザからではなく、スマホアプリやJavaScriptなど他のシステムからアクセスされるため、HTMLではなくJSON形式のデータを返すのが一般的です。

2. JSON形式に限定したAPIにするには?

2. JSON形式に限定したAPIにするには?
2. JSON形式に限定したAPIにするには?

Railsでは、ルーティングの段階でdefaultsオプションを使えば、全てのレスポンスをJSONに限定することができます。これは「このAPIはJSON専用です」と明確にするための大事な設定です。


Rails.application.routes.draw do
  namespace :api, defaults: { format: :json } do
    resources :products
  end
end

namespace(ネームスペース)とは、フォルダのようにAPI用の機能を分けて整理するための仕組みです。ここではapiという名前空間を使っており、URLは/api/productsのようになります。

3. バージョン管理(versioning)でAPIを将来も使いやすく

3. バージョン管理(versioning)でAPIを将来も使いやすく
3. バージョン管理(versioning)でAPIを将来も使いやすく

APIは一度作ったらずっと同じというわけではなく、あとで仕様を変えることもあります。そのために最初からv1v2といったバージョン番号をURLに含めておくのが定石です。


Rails.application.routes.draw do
  namespace :api, defaults: { format: :json } do
    namespace :v1 do
      resources :products
    end
  end
end

このように書くことで、URLは/api/v1/productsになります。次のバージョンを作るときにはv2フォルダを用意し、影響のない形で新しい仕様に切り替えることができます。

4. コントローラも名前空間ごとに整理

4. コントローラも名前空間ごとに整理
4. コントローラも名前空間ごとに整理

ルーティングでnamespaceを使うと、コントローラの場所も分けて管理する必要があります。たとえばapi/v1/products_controller.rbのような形でファイルを作成し、Api::V1::ProductsControllerというクラス名にします。


class Api::V1::ProductsController < ApplicationController
  def index
    render json: Product.all
  end
end

このようにすることで、API専用のロジックと通常のWeb画面用のロジックを完全に分離することができ、保守性が高まります。

5. constraintsでAPIアクセスを限定する

5. constraintsでAPIアクセスを限定する
5. constraintsでAPIアクセスを限定する

constraints(コンストレインツ)を使うと、特定の条件に当てはまるリクエストだけをルーティングに通すことができます。たとえば、ドメイン名リクエストヘッダーなどで制御できます。

以下は、Acceptヘッダーがapplication/jsonのリクエストだけをAPIとして受け付ける例です。


constraints(lambda { |req| req.format == :json }) do
  namespace :api do
    namespace :v1 do
      resources :products
    end
  end
end

このようなconstraintsを使うと、誤ったアクセスを防ぎ、セキュリティと安全性を高めることができます。

6. API専用アプリケーションの作成オプション

6. API専用アプリケーションの作成オプション
6. API専用アプリケーションの作成オプション

実はRailsでは最初から「APIモード」でアプリを作成することも可能です。--apiオプションを付けてプロジェクトを作ると、ビュー(画面)機能を省いたJSON専用アプリになります。


rails new my_api_app --api

このようにしておけば、軽量で高速なAPI専用アプリケーションをすぐに作ることができます。

7. URLの意味を初心者向けに解説

7. URLの意味を初心者向けに解説
7. URLの意味を初心者向けに解説

たとえば/api/v1/productsというURLを分解すると、以下のような意味になります:

  • /api:API専用の機能です
  • /v1:APIのバージョン1です
  • /products:「商品」という意味のリソースです

このようにURLに意味を持たせることで、APIの設計が分かりやすく保守しやすいものになります。

関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Rails
RailsモデルとActive Record基礎|クエリログの読み方を理解してEXPLAIN・joins・includesの違いを学ぼう