Edited at

GraphQL を練習するための小さなスクリプトの例

More than 1 year has passed since last update.

話題の GraphQL を試してみようと graphql gem に加えて graphiql-rails を入れ、ジェネレーターを実行し、その上 yarn で apollo-boost graphql-tag graphql を入れ、Vue 用に vue-appollo も入れとくか、としていたら自分が何をしているのかわからなくなってきたのでスタート地点に戻って GraphQL のみを単体で簡単に試せる方法を調べました。

下のコードは手動で gem i graphql すれば ruby ですぐに実行できます。


ping に対して pong を返す

require "bundler/inline"

gemfile do
gem "graphql"
end

GraphQL::VERSION # => "1.8.5"

class QueryType < GraphQL::Schema::Object
field :ping, String, null: false, description: "疎通確認"
def ping
"pong"
end
end

class FooSchema < GraphQL::Schema
query(QueryType)
end

FooSchema.execute("{ ping }").to_h # => {"data"=>{"ping"=>"pong"}}


User.find(1) の結果を返す

require "bundler/inline"

gemfile do
gem "graphql"
end

GraphQL::VERSION # => "1.8.5"

class UserType < GraphQL::Schema::Object
field :id, ID, null: false
field :name, String, null: false
end

class QueryType < GraphQL::Schema::Object
field :user, UserType, null: true do
description "指定IDのユーザーを取得"
argument :id, ID, "ユーザーID", required: true
end

def user(id:)
Struct.new(:id, :name).new(id, "alice") # User.find(id) したことにする
end
end

class FooSchema < GraphQL::Schema
query(QueryType)
end

FooSchema.execute(<<~QUERY).to_h # => {"data"=>{"user"=>{"id"=>"1", "name"=>"alice"}}}
{
user(id: 1) {
id
name
}
}
QUERY