SlideShare a Scribd company logo
1 of 11
Download to read offline
ScalaでGraphQL
芸者東京
竹下義晃
GraphQLとは
https://graphql.org/learn/
クライアント <-> サーバー間のリクエストを行うためのク
エリ言語仕様
Facebookが開発。githubも採用
GraphQLとは
Schema Query
type Query {
user (id : Long!): User
}
type User {
id: Long!
nickname: String!
friends: [User!]!
}
query {
user(id: 1) {
id
nickname
friends {
nickname
friends {
nickname
}
}
}
}
Schemaを定義して、サーバーとクライアントで共有
Queryで取得したいフィールドをだけを指定して取得
Schema,Queryは独自文法、結果はjson(が普通)
結果
{
“data”: {
“id”: 1,
“nickname”: “Hoge”,
“friends”: [{
“nickname”: “Fuga,
“friends”: [{
“nickname”:”foo”
}, ...]
}, …]
}
}
メリット
● 複数のリクエストを一つにまとめられる
● サーバーとクライアントの実装をGraphQLで分断できる
● 様々なツール、ライブラリのサポートを受けられる
デメリット
● パフォーマンスを出すための暗黙の知識が結構必要
● まだ普及仕切っていないので使える人は限られる
複数のリクエストを1つにまとめられる
query getUserAndNews{
user(id: 1) {
nickname
}
news(size: 20) {
title
body
}
}
Restだと2つのAPIを呼び出す(かわざわざ2つの機能を合体させた新しいEndpointを作
る)必要があるような呼び出しを、クエリを書き換えるだけでまとめて呼び出せる
ただ、Http2が普及すれば、このメリットはほぼ無くなる。よくメリットとして上げられるが、
割とどうでもいいと思っている
サーバーとクライアントの実装を分断できる
Schemaを共有することで、サーバーができていなくても事前にクライアントの実装がで
きる。また、細かな仕様変更もクライアント側でQueryを修正するだけで対応できる
ただのRestAPI
API仕様策定 -> サーバー実装 -> 修正
-> クライアント実装 -> 接続試す -> 修正
(サーバー、クライアント共に実装完了しないとテストが困難)
GraphQL
API仕様策定 -> サーバー実装 -> 適当なQuery投げてテスト
-> クライアント実装 -> 投げるQuerySchemaに合うかチェック -> 接続試す
様々なツール、ライブラリのサポートを受けられる
標準化されていることで、対応したツール、ライブラリを使用できるのでいろいろらくでき
る
# GraphiQL
Queryを書いて、投げて、結果を見れるツール。Queryの保管もやってくれる
# 各言語ライブラリ
Schema,Queryのパースや組み立てをやってくれる
デメリット
# パフォーマンスを出すための暗黙の知識が結構必要
これはRestAPIだとしてもあり得るのでそこまでデメリットではないが、やはり特有の最
適化知識は必要になってきそう
# まだ普及仕切っていないので使える人は限られる
即使えますって人はまだあまりいないと思います。啓蒙必要
Scalaでは?
Sangria( https://sangria-graphql.org/ )
というライブラリがある。サーバー/クライアントどちらにも使用可能
機能は大体ドキュメントとサンプルみればわかる
機能
Query
● DSLによるQuery構築
● テキストからのQueryのパース
● Schema検証
● Queryの実行
Schema
● DSLによるSchema構築
● AnnotationベースによるDSL自動生成
● テキストからのSchemaのパース
自分で書きたく無い機能群
# Introspectionの機能
Schemaの情報を返す機能。勝手にサポートしてくれる
# やばいクエリの検証機能
リスト取得時に大きすぎるsize指定や、深すぎるネストをバリデーションして実行時に弾
く機能がある
# N+1問題の対応機能
(すごく使いやすいわけでは無いが)内部で複数のDBアクセスをまとめて1回の実行にす
ることのできる汎用機構がある
余談
GraphQLを使うとリクエストがqueryとmutationに分離されるので、
CQRS( https://docs.microsoft.com/ja-jp/azure/architecture/patterns/cqrs )
の設計パターンと親和性が高いのでは?

More Related Content

Similar to GraphQL with scala

2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame IntroductionYu Ishikawa
 
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】洵貴 佐川
 
Caliban: Functional GraphQL Library for Scala
Caliban: Functional GraphQL Library for ScalaCaliban: Functional GraphQL Library for Scala
Caliban: Functional GraphQL Library for ScalaPierre Ricadat
 
Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編DevTakas
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractTakeshi Ogawa
 
JapanDreamin24_はじめてのGraphQL×LWC.pptx
JapanDreamin24_はじめてのGraphQL×LWC.pptxJapanDreamin24_はじめてのGraphQL×LWC.pptx
JapanDreamin24_はじめてのGraphQL×LWC.pptxRyota Tabuse
 
Angular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべるAngular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべるMasashi Haga
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Akira Inoue
 
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法decode2016
 
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)Amazon Web Services Japan
 
named_scope more detail - WebCareer
named_scope more detail - WebCareernamed_scope more detail - WebCareer
named_scope more detail - WebCareerKyosuke MOROHASHI
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境Katsutoshi Nagaoka
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門Sho A
 
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計y_taka_23
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 

Similar to GraphQL with scala (20)

2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
 
GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)GraphQL入門 (AWS AppSync)
GraphQL入門 (AWS AppSync)
 
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
 
Caliban: Functional GraphQL Library for Scala
Caliban: Functional GraphQL Library for ScalaCaliban: Functional GraphQL Library for Scala
Caliban: Functional GraphQL Library for Scala
 
Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編Microsoft Graphことはじめ クエリパラメータ編
Microsoft Graphことはじめ クエリパラメータ編
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
 
JapanDreamin24_はじめてのGraphQL×LWC.pptx
JapanDreamin24_はじめてのGraphQL×LWC.pptxJapanDreamin24_はじめてのGraphQL×LWC.pptx
JapanDreamin24_はじめてのGraphQL×LWC.pptx
 
Angular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべるAngular.jsについてちょっとしゃべる
Angular.jsについてちょっとしゃべる
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
DEV-010_エンプラ系業務 Web アプリ開発に効く! 実践的 SPA 型モダン Web アプリ開発の選択手法
 
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
 
Google Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushiGoogle Cloud Dataflow を理解する - #bq_sushi
Google Cloud Dataflow を理解する - #bq_sushi
 
named_scope more detail - WebCareer
named_scope more detail - WebCareernamed_scope more detail - WebCareer
named_scope more detail - WebCareer
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境AWSとGCPを使用したインフラ環境
AWSとGCPを使用したインフラ環境
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 

More from Yoshiteru Takeshita

Developing large-scale smart-phone game servers by a single person
Developing large-scale smart-phone game servers by a single personDeveloping large-scale smart-phone game servers by a single person
Developing large-scale smart-phone game servers by a single personYoshiteru Takeshita
 
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイPlay framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイYoshiteru Takeshita
 
Scala Matsuri 2016コミュニティセッション
Scala Matsuri 2016コミュニティセッションScala Matsuri 2016コミュニティセッション
Scala Matsuri 2016コミュニティセッションYoshiteru Takeshita
 
Dslからのコードジェネレーションで楽々play開発
Dslからのコードジェネレーションで楽々play開発Dslからのコードジェネレーションで楽々play開発
Dslからのコードジェネレーションで楽々play開発Yoshiteru Takeshita
 

More from Yoshiteru Takeshita (7)

Developing large-scale smart-phone game servers by a single person
Developing large-scale smart-phone game servers by a single personDeveloping large-scale smart-phone game servers by a single person
Developing large-scale smart-phone game servers by a single person
 
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイPlay framework+docker+aws ecr+aws beanstalk で楽々デプロイ
Play framework+docker+aws ecr+aws beanstalk で楽々デプロイ
 
Scala Matsuri 2016コミュニティセッション
Scala Matsuri 2016コミュニティセッションScala Matsuri 2016コミュニティセッション
Scala Matsuri 2016コミュニティセッション
 
Scala導入あれこれ
Scala導入あれこれScala導入あれこれ
Scala導入あれこれ
 
Unityでreflection入門
Unityでreflection入門Unityでreflection入門
Unityでreflection入門
 
Dslからのコードジェネレーションで楽々play開発
Dslからのコードジェネレーションで楽々play開発Dslからのコードジェネレーションで楽々play開発
Dslからのコードジェネレーションで楽々play開発
 
Scala web framework比較
Scala web framework比較Scala web framework比較
Scala web framework比較
 

GraphQL with scala