こんにちは!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サーバーでうまく機能します。