フロントエンドで
GraphQLを使った所感
1
自己紹介
名前
李 超(31)
経歴
中国上海出身。2008年来日、2015年11月サイバーエージェントに入社。
職種
フルスタック修行中のフロントエンジニア。
広告関連システムの管理画面やSDKの開発を担当している。
2
目次
・GraphQLを導入した理由
・実際使った時の問題
・現時点の改善案
・一フロントエンジニアとしての感想
3
GraphQLを導入した理由
・柔軟性
スキーマさえ定義すれば好きな組み合わせで取れる。
・可読性
JSONっぽい構文なので、直感的でわかりやすい。
・技術的なチャレンジ
何より新しい技術であること。
4
・フロント
AngularJS 1.5.X
・サーバ
Scala + Sangria
5
実際使った時の問題点
・クエリ変換時に罠が多い
・jsファイルがとにかく重い
・コンソールでデバッグしづらい
・サーバ側で処理の重さが把握しづらい
6
クエリ変換時の罠が多い
const str = ‘abcde’; => `strParam: ”${str}”`
const arr = [1, 2, 3]; => `arrParam: [${arr}]`
const enum = { RED: 0, GREEN: 1 }; ではなく
const enum = { RED: ‘RED’, GREEN: ‘GREEN’ }; じゃないと
求められているのは ‘enumParam: RED’
‘enumParam: 0’は決して許されない
const obj = { a: 1, b: 2 }; => `${JSON.stringify(obj)}` orz...
String
Array
Enum
Object
7
jsファイルがとにかく重い
短い方 =>
長い方 =>
8
似ているクエリは山ほどある!
すべてはjsファイルに入っている!
それは重いよね。。。
更にクエリを最適化すると、バリエーションも増えるので、
もちろん更に重くなる。。。
9
コンソールでデバッグしづらい
こちらはとある編集画面のリクエスト一覧
すべてがgqlへのpostなので、
どれが何をするためのクエリ
はわからない><
途中でさすがに我慢できなく
なり、_getLoginUserみたいな
query stringを目印としてつけ
たけど。。。
10
うん。。。やっぱりわからん。。。
これは人が読めるものではない。。。
中身を見てみると
11
サーバ側で処理の重さが把握しづらい
ちょっと極端な例をあげると
まず、下記のような関係があると
class has many students
student belongs to class
もちろん、親から子、子から親は取れるようにスキーマを定義した
とすると。。。
12
class { students } が投げられる => 想定内だと
class { students [{ class }] } も投げられる => まあ、大丈夫だろ
classes [{ students [{ class }] }] も投げられる => あれ?ちょっと。。。
実際はフロントで上記のように好きな組み合わせで投げられる => (@_@);;
「やはりフロントは処理の重さを理解した上で投げましょ」
という属人的なものが出てきてしまう
13
現時点の改善案(フロント)
・クエリにvariablesを利用とセグメント化
・nodejsの中間サーバを用意し、GraphQLをすべて中間サーバに移動
・クライアントとサーバのやり取りをRESTに戻す
14
15
・ソース記述量が増えるが、クエリ文字列への変換はvariablesの型宣言により、
小細工をしなくて済む
・マスターデータは使う時基本同じ形にしているのでセグメント化をし、メンテ
ナンス性がよくなる
・使う場面によってほしいカラムが変わるものはセグメント化しない。
16
client nodejs
resource
server
request
merged
response
merged
request 1
merged
request 2
response1
response2
GraphQLをnodejsに移動し、RESTに戻す
17
現時点の改善案(サーバ)
色々試してくれたそうだけど、結果GraphQLをやめることになった
18
一フロントエンジニアとしての感想
・GraphQLでフロントが幸せになったことはない
・GraphQLには向き不向きがある
向き: インスタやタイムラインなどクエリのバリエーションが少ないもの
不向き: 広告関連の管理画面などテーブル構造が複雑で、クエリのバリエーションが多いもの
・GraphQLの誕生によってRESTが消えることはないと思う
19
ご清聴ありがとうございました!
20

More Related Content

PDF
ユーザーストーリー駆動開発で行こう。
PPTX
Cloud Spanner をより便利にする運用支援ツールの紹介
PDF
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
PPTX
RenderTextureの正しいα値は?
PDF
イミュータブルデータモデルの極意
PPTX
WayOfNoTrouble.pptx
PPTX
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 TOKYO
PDF
Re: ゼロから始める監視設計
ユーザーストーリー駆動開発で行こう。
Cloud Spanner をより便利にする運用支援ツールの紹介
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
RenderTextureの正しいα値は?
イミュータブルデータモデルの極意
WayOfNoTrouble.pptx
IncrediBuildでビルド時間を最大90%短縮! - インクレディビルドジャパン株式会社 - GTMF 2018 TOKYO
Re: ゼロから始める監視設計

What's hot (20)

PDF
Unityではじめるオープンワールド制作 エンジニア編
PDF
リクルート式 自然言語処理技術の適応事例紹介
PDF
例外設計における大罪
PDF
ドメイン駆動設計のための Spring の上手な使い方
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
PDF
こんなに使える!今どきのAPIドキュメンテーションツール
PPTX
Spanner移行について本気出して考えてみた
PDF
アプリを生み出す現場でUI/UXデザイナーが意識するべきこと:RoomClip
PDF
協調フィルタリング入門
PDF
トランザクションスクリプトのすすめ
PDF
新人研修資料 向き合うエンジニア
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
PDF
継承やめろマジやめろ。 なぜイケないのか 解説する
PPTX
[DL輪読会]Human Pose Estimation @ ECCV2018
PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方
PDF
[DL輪読会]マテリアルズインフォマティクスにおける深層学習の応用
PDF
基礎線形代数講座
KEY
やはりお前らのMVCは間違っている
PDF
大規模レガシー環境に立ち向かう有機的な開発フォーメーション #devsumi #devsumic
PDF
REST API のコツ
Unityではじめるオープンワールド制作 エンジニア編
リクルート式 自然言語処理技術の適応事例紹介
例外設計における大罪
ドメイン駆動設計のための Spring の上手な使い方
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
こんなに使える!今どきのAPIドキュメンテーションツール
Spanner移行について本気出して考えてみた
アプリを生み出す現場でUI/UXデザイナーが意識するべきこと:RoomClip
協調フィルタリング入門
トランザクションスクリプトのすすめ
新人研修資料 向き合うエンジニア
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
継承やめろマジやめろ。 なぜイケないのか 解説する
[DL輪読会]Human Pose Estimation @ ECCV2018
分散トレーシングAWS:X-Rayとの上手い付き合い方
[DL輪読会]マテリアルズインフォマティクスにおける深層学習の応用
基礎線形代数講座
やはりお前らのMVCは間違っている
大規模レガシー環境に立ち向かう有機的な開発フォーメーション #devsumi #devsumic
REST API のコツ
Ad

Viewers also liked (15)

PDF
Performance optimisation with GraphQL
PDF
Apolloを使って、React-Reduxの世界にGraphQLを持ち込む
PDF
Neo4jで始めるグラフDB入門 - LT Thursday
PDF
React native実践談
PDF
フロントでのGraphQL
PDF
React Redux Redux-Saga + サーバサイドレンダリング
PPTX
React.js + Reduxで作るSPA
PPTX
React を導入した フロントエンド開発
PDF
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
PDF
Phantom Type in Scala
PPTX
おっさんES6/ES2015,React.jsを学ぶ
PPTX
Introduction to GraphQL in Scala (ScalaMatsuri 2017)
PPTX
React.js・ReactNative・Redux入門
PDF
SPAと覚悟
PDF
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Performance optimisation with GraphQL
Apolloを使って、React-Reduxの世界にGraphQLを持ち込む
Neo4jで始めるグラフDB入門 - LT Thursday
React native実践談
フロントでのGraphQL
React Redux Redux-Saga + サーバサイドレンダリング
React.js + Reduxで作るSPA
React を導入した フロントエンド開発
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
Phantom Type in Scala
おっさんES6/ES2015,React.jsを学ぶ
Introduction to GraphQL in Scala (ScalaMatsuri 2017)
React.js・ReactNative・Redux入門
SPAと覚悟
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
Ad

Similar to フロントエンドで GraphQLを使った所感 (20)

PDF
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
PDF
Angularおじさんの1年
PDF
LIGでのDocker活用
PPTX
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka -
KEY
テスト駆動開発の導入ーペアプログラミングの学習効果ー
PPTX
テストしなイカ? Seleniumで自動ブラウザテスト
PDF
アジャイルソフトウェア開発の道具箱
PDF
アドテクを支える技術 〜1日40億リクエストを捌くには〜
PPTX
Html5 framework montagejs
PDF
アドテクを支える技術 〜1日40億リクエストを捌くには〜
PDF
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
PDF
Intalio japan special cloud workshop
PDF
既存プロダクトにGraphQLを導入する際に心がけておくべきポイント.
PPTX
【SQiP2016】楽天のアジャイル開発とメトリクス事例
PDF
楽天エンジニアライフ
PDF
MVCフレームワークとの付き合い方
PDF
効果的なXPの導入を目的とした プラクティス間の相互作用の分析
PDF
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
PPTX
JSX Design Overview (日本語)
PDF
Stripeを1年使ってみて思ったこと
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
Angularおじさんの1年
LIGでのDocker活用
初心者歓迎 機械学習Chalk Talk (de:codeリバイバル) in Osaka -
テスト駆動開発の導入ーペアプログラミングの学習効果ー
テストしなイカ? Seleniumで自動ブラウザテスト
アジャイルソフトウェア開発の道具箱
アドテクを支える技術 〜1日40億リクエストを捌くには〜
Html5 framework montagejs
アドテクを支える技術 〜1日40億リクエストを捌くには〜
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
Intalio japan special cloud workshop
既存プロダクトにGraphQLを導入する際に心がけておくべきポイント.
【SQiP2016】楽天のアジャイル開発とメトリクス事例
楽天エンジニアライフ
MVCフレームワークとの付き合い方
効果的なXPの導入を目的とした プラクティス間の相互作用の分析
[Observability conference 2022/3/11] NewsPicks のプロダクト開発エンジニアが実践するスキルとしての SRE
JSX Design Overview (日本語)
Stripeを1年使ってみて思ったこと

フロントエンドで GraphQLを使った所感