GraphQL RubyでGraphQL::ExecutionErrorを使ってみる (Rails)

December 22, 2022

確認環境

$ bundle exec ruby --version
ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-darwin19]
$ bundle exec rails --version
Rails 6.0.4.6
$ bundle info graphql
  * graphql (2.0.13)
	Summary: A GraphQL language and runtime for Ruby
	Homepage: https://github.com/rmosolgo/graphql-ruby
	Path: /Users/xxxxx/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/graphql-2.0.13

データ準備

テーブル定義確認

$ rails db
sqlite> .schema posts
CREATE TABLE IF NOT EXISTS "posts" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "description" text, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL, "status" integer);

検証コードを実装

app/graphql/types/query_type.rb

module Types
  class QueryType < Types::BaseObject

    field :error_samples, Types::ErrorSampleType, null: false
    def error_samples
      # new するだけでエラーが発生する
      GraphQL::ExecutionError.new('abcde error')

      # raise GraphQL::ExecutionError.new('abcde error')
    end
  end
end

app/graphql/types/error_sample_type.rb

# frozen_string_literal: true

module Types
  class ErrorSampleType < Types::BaseObject
    field :title, String, null: true
  end
end

graphiql でクエリを発行する

query {
  errorSamples {
    title
  }
}

取得結果

{
  "data": null,
  "errors": [
    {
      "message": "abcde error",
      "locations": [
        {
          "line": 68,
          "column": 3
        }
      ],
      "path": [
        "errorSamples"
      ]
    }
  ]
}

SHARE

Profile picture

Written by tamesuu