graphql-rubyのGetting Startedを翻訳してみる

こんにちは!kossyです!




さて、今回はGraphQLの勉強がてら、graphql-rubyのreadmeを翻訳してみようと思います。(こうでもしないと真面目に読まない気がして、、、)
Getting Startedまでの翻訳を頑張ってみます。



偉大なる本家様リポジトリはこちら

Getting Started

インストール

あなたのアプリケーションのGemfileに追加することで、RubyGemsからgraphqlをインストールできます。

./Gemfile

gem 'graphql'

bundle install を 忘れずに。

$ bundle install

はじめに

Railsでは、いくつかのGraphQLジェネレーターを使い始めることができます。

# graphql-rubyのボイラープレートを追加し、開発環境にgraphiqlをマウントします

$ rails g graphql:install



# 最初のオブジェクトタイプを作成します

$ rails g graphql:object Post title:String rating:Int comments:[Comment]

または、以下のようなGraphQLサーバーを手動で構築することもできます。

・いくつかのタイプを定義する
・それらをスキーマに接続する
スキーマを使用してクエリを実行する

タイプ宣言

タイプはアプリケーション内のオブジェクトを記述し、GraphQLのタイプシステムの基礎を形成します。

# app/graphql/types/post_type.rb

module Types
  class PostType < Types::BaseObject
    description "A blog post"
    field :id, ID, null: false
    field :title, String, null: false

    # フィールドはキャメルケースで問い合わせる必要があります(これは `truncatedPreview`になります)
    field :truncated_preview, String, null: false

    # フィールドは他のオブジェクトのリストを返すことができます
    field :comments, [Types::CommentType], null: true,

      # また、フィールドには独自の説明を付けることができます。
      description: "This post's comments, or null if this post has comments disabled."
  end
end

# app/graphql/types/comment_type.rb

module Types
  class CommentType < Types::BaseObject
    field :id, ID, null: false
    field :post, PostType, null: false
  end
end

スキーマを構築する

スキーマを構築する前に、システムへのエントリポイントである「クエリルート」を定義する必要があります。

class QueryType < GraphQL::Schema::Object
  description "The query root of this schema"

  # 最初にフィールドの署名について記述します。
  field :post, PostType, null: true do
    description "Find a post by ID"
    argument :id, ID, required: true
  end

  # 次に、実装を行います。
  def post(id:)
    Post.find(id)
  end
end

次に、QueryTypeをクエリエントリポイントとして使用してスキーマを構築します。

class Schema < GraphQL::Schema
  query QueryType
end

これでこのスキーマはGraphQLクエリを提供する準備ができています!ガイドを参照して、他のGraphQLRuby機能について学習してください。


クエリを実行する

クエリ文字列からクエリを実行できます。

query_string = "
{
  post(id: 1) {
    id
    title
    truncatedPreview
  }
}"
result_hash = Schema.execute(query_string)
# {
#   "data" => {
#     "post" => {
#        "id" => 1,
#        "title" => "GraphQL is nice"
#        "truncatedPreview" => "GraphQL is..."
#     }
#   }
# }

スキーマでクエリを実行する方法の詳細については、クエリの実行を参照してください。

Relayを使う

Relayのバックエンドを構築する場合は、次のものが必要です。

GraphQL :: Introspection :: INTROSPECTION_QUERYを送信することで取得できるスキーマJSONダンプ
・GraphQLのRelay固有のヘルパー。GraphQL:: Relayガイドを参照してください。

Appollo Clientを使う

Apollo Clientは、人気のあるビューレイヤーに便利に統合された、フル機能の使いやすいGraphQLクライアントです。
Apolloクライアントをgraphql-rubyサーバーに接続するために特別なことをする必要はありません。

GraphQL.jsクライアントを使う

GraphQL.jsクライアントは、プラットフォームやフレームワークに依存しない小さなクライアントです。
GraphQLリクエストはHTTPを介して転送される単純なクエリ文字列であるため、graphql-rubyサーバーでうまく機能します。