カテゴリ: Rails 更新日: 2026/03/15

Rails GraphQL入門|graphql-rubyでスキーマ・タイプ・リゾルバをやさしく理解

GraphQL入門:graphql-ruby でスキーマ/タイプ/リゾルバを実装
GraphQL入門:graphql-ruby でスキーマ/タイプ/リゾルバを実装

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

生徒

「RailsでAPIを作るとき、GraphQLってよく聞くんですが、何ができるんですか?」

先生

「GraphQLは、必要なデータだけを指定して取得できる仕組みです。Railsでは graphql-ruby を使って実装できます。」

生徒

「REST APIと何が違うんですか?」

先生

「RESTはURLごとに返すデータが決まっていますが、GraphQLは質問内容を自分で決められます。順番に仕組みを見ていきましょう。」

1. Rails の基本・概要(MVC・コンベンション・Railsとは)

1. Rails の基本・概要(MVC・コンベンション・Railsとは)
1. Rails の基本・概要(MVC・コンベンション・Railsとは)

Railsは、Rubyというプログラミング言語を使ってWebアプリケーションを作るためのフレームワークです。MVCとは、Model(データ管理)、View(画面表示)、Controller(処理の流れ)の役割を分ける考え方です。GraphQLを使う場合も、この基本構造は変わりません。Controllerの代わりにGraphQLのリゾルバが、データ取得の窓口になります。

2. 開発環境とインストール(Ruby・Bundler・Node・DB準備)

2. 開発環境とインストール(Ruby・Bundler・Node・DB準備)
2. 開発環境とインストール(Ruby・Bundler・Node・DB準備)

GraphQLをRailsで使うには、まずRubyとRailsが動く環境が必要です。Bundlerは、必要なライブラリをまとめて管理する道具です。graphql-rubyもGemとして追加します。Gemとは、Railsで使う部品セットのようなものです。


# Gemfile
gem 'graphql'

3. プロジェクト作成と構成(rails new・ディレクトリ構造・設定)

3. プロジェクト作成と構成(rails new・ディレクトリ構造・設定)
3. プロジェクト作成と構成(rails new・ディレクトリ構造・設定)

Rails APIモードでプロジェクトを作成すると、画面表示よりもAPI提供に特化した構成になります。GraphQLを導入すると、app/graphql ディレクトリが作られ、スキーマやタイプをここで管理します。これは設計図を置く場所だと考えると分かりやすいです。


rails new sample_api --api
rails generate graphql:install

4. ルーティング入門(resources・namespaces・constraints)

4. ルーティング入門(resources・namespaces・constraints)
4. ルーティング入門(resources・namespaces・constraints)

通常のRailsでは routes.rb にURLと処理の対応を書きます。GraphQLの場合、多くは /graphql という1つのエンドポイントを使います。ここにクエリ(質問)を送ることで、必要なデータを取得します。


post "/graphql", to: "graphql#execute"

5. コントローラ基礎(アクション・フィルタ・Strong Parameters)

5. コントローラ基礎(アクション・フィルタ・Strong Parameters)
5. コントローラ基礎(アクション・フィルタ・Strong Parameters)

GraphQL用のコントローラでは、受け取ったクエリをスキーマに渡して実行します。アクションとは処理の入口です。Strong Parametersは、受け取ってよいデータを制限する安全装置です。


class GraphqlController < ApplicationController
  def execute
    result = SampleSchema.execute(params[:query])
    render json: result
  end
end

6. ビューとテンプレート(ERB・Haml・Slim・パーシャル・レイアウト)

6. ビューとテンプレート(ERB・Haml・Slim・パーシャル・レイアウト)
6. ビューとテンプレート(ERB・Haml・Slim・パーシャル・レイアウト)

APIモードではHTMLビューはほとんど使いません。GraphQLはJSON形式でデータを返します。JSONとは、データを整理して渡すための書き方です。画面表示はフロントエンド側が担当します。

7. モデルとActive Record基礎(CRUD・スキーマ・ORMの基本)

7. モデルとActive Record基礎(CRUD・スキーマ・ORMの基本)
7. モデルとActive Record基礎(CRUD・スキーマ・ORMの基本)

GraphQLで取得するデータは、Railsのモデルから来ます。Active Recordは、データベース操作を簡単にする仕組みです。CRUDとは、作成・取得・更新・削除の基本操作です。


class User < ApplicationRecord
end

8. マイグレーションとスキーマ設計(型・インデックス・外部キー)

8. マイグレーションとスキーマ設計(型・インデックス・外部キー)
8. マイグレーションとスキーマ設計(型・インデックス・外部キー)

マイグレーションは、データベースの設計図です。型とはデータの種類のことです。GraphQLのタイプ定義は、このデータ構造を元に作ります。


create_table :users do |t|
  t.string :name
  t.timestamps
end

9. バリデーションとコールバック(presence・uniqueness・before_*)

9. バリデーションとコールバック(presence・uniqueness・before_*)
9. バリデーションとコールバック(presence・uniqueness・before_*)

バリデーションは、正しいデータかどうかを確認する仕組みです。GraphQLでデータを返す前にも、このチェックが働きます。コールバックは、保存前後に自動で実行される処理です。

10. アソシエーション(belongs_to・has_many・through・多対多)

10. アソシエーション(belongs_to・has_many・through・多対多)
10. アソシエーション(belongs_to・has_many・through・多対多)

アソシエーションは、モデル同士のつながりです。GraphQLのリゾルバでは、この関係を使って関連データを一緒に取得できます。これにより、必要な情報を一度にまとめて返せます。


field :users, [Types::UserType], null: false

def users
  User.all
end
カテゴリの一覧へ
新着記事
New1
Ruby
Rubyの文法超入門:式と文・endの役割をやさしく解説
New2
Rails
Nodeは本当に不要?Railsのimportmap最小構成とjsbundling構成の違いと選び方
New3
Rails
Rails開発で使うデータベースの選び方とSQLite・MySQL・PostgreSQLの初期設定
New4
Ruby
Ruby環境構築の最終チェック!セットアップ失敗あるあると確認リスト
人気記事
No.1
Java&Spring記事人気No1
Rails
Railsメール確認(confirmable)の実装手順を完全ガイド!初心者でもわかる有効化リンクと期限設定
No.2
Java&Spring記事人気No2
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.3
Java&Spring記事人気No3
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.4
Java&Spring記事人気No4
Ruby
RubyのEnumerable完全解説!cycle・zipで繰り返しの達人になろう
No.5
Java&Spring記事人気No5
Ruby
プロキシ環境でも安心!社内ネットワーク下でのRuby gemインストール完全ガイド【SSL対応も解説】
No.6
Java&Spring記事人気No6
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.7
Java&Spring記事人気No7
Rails
asdfで複数言語を一元管理:Ruby/Node/psql をまとめてセットアップ
No.8
Java&Spring記事人気No8
Ruby
Rubyのany? all? none? one? を完全攻略!条件判定を劇的に短く書く方法