RustのSchema First GraphQLライブラリrusty-gqlを作った話
Takuro Iwamoto
Introduction
・Tak-Iwamoto / 岩本卓朗
・webアプリケーションエンジニア
Outline
・RustとGraphQL
・rusty-gqlの紹介、デモ
・GraphQLライブラリの実装方法
RustとGraphQL
GraphQL
Rust
・APIのスキーマ、型の定義
・クライアントのクエリに基づいたAPIレスポンス
・メモリ効率、パフォーマンスに優れた言語
・リッチな型システム
GraphQL
Rust
・APIのスキーマ、型の定義
・クライアントのクエリに基づいたAPIレスポンス
・メモリ効率、パフォーマンスに優れた言語
・リッチな型システム
GraphQL
Rust
既存のRustのGraphQLライブラリ
・juniper
・async-graphql
・Code Firstのアプローチ
Code First vs Schema First
・Code First: コードでGraphQLのスキーマ定義と実装を行う
・Schema First: GraphQLでスキーマ定義した後にコードを生成
Code First vs Schema First
・Code First: コードでGraphQLのスキーマ定義と実装を行う
・Schema First: GraphQLでスキーマ定義した後にコードを生成
どちらが良いのか?
At Netflix we strongly prefer schema-first development.
・The schema design is front and center of the developer experience.
参照: Netflix Technology Blog: Open Sourcing the Netflix Domain Graph Service Framework: GraphQL For Spring Boot
Netflix製のGraphQLライブラリ
At Netflix we strongly prefer schema-first development.
・The schema design is front and center of the developer experience.
参照: Netflix Technology Blog: Open Sourcing the Netflix Domain Graph Service Framework: GraphQL For Spring Boot
Netflix製のGraphQLライブラリ
At Netflix we strongly prefer schema-first development.
・The schema design is front and center of the developer experience.
参照: Netflix Technology Blog: Open Sourcing the Netflix Domain Graph Service Framework: GraphQL For Spring Boot
Netflix製のGraphQLライブラリ
rusty-gqlはSchema Firstを採用
rusty-gql
rusty-gql
・Schema First
・Convention Over Configuration
・Code Generate from GraphQL schema
Getting Started
・CLIをinstallしてProject作成
GraphQLのスキーマ定義
・schema/** 配下に.graphqlファイルを定義
・rusty-gql generate(rusty-gql g)を実行
・関連ファイルが生成される
schema/schema.graphql
Resolverの実装
schema/schema.graphql
src/graphql/query/todos.rs
Demo
GraphQLライブラリの実装方法
GraphQLライブラリとは
・GraphQLライブラリ: GraphQLの仕様通りに処理を行うもの
GraphQLライブラリとは
・GraphQLライブラリ: GraphQLの仕様通りに処理を行うもの
GraphQL処理系
GraphQLライブラリとは
・GraphQLライブラリ: GraphQLの仕様通りに処理を行うもの
GraphQL処理系
言語処理系のプロセスと類似
GraphQL処理系の実装方法
GraphQL処理系の実装方法
GraphQL AST
GraphQL Spec https://spec.graphql.org/October2021/
Parser
・github.com/graphql-rust/graphql-parser
GraphQL処理系の実装方法
Resolver
GraphQL
Rust
Queryは並列に実行
GraphQLクエリ
Rustの処理
※疑似コードです
GraphQL処理系の実装方法
Serdeを使用してSerialize
GraphQL
Rust
Serdeを使用してSerialize
GraphQL
Rust
どうやってGqlValueを
生成するのか?
FieldResolver trait
GqlValueを返すFieldResolver traitを定義
組み込みの型に対してもtraitをimplしている
proc-macroの活用
GraphQLの型にはproc-macroでFieldResolverをimplする
Summary
・RustとGraphQLは型定義が柔軟にできる点で相性が良い
・Schema FirstなGraphQLライブラリrusty-gqlを作った
・rusty-gqlは並列処理、proc-macroなどRustの機能を最大限
利用して実装している
Thank you for watching!