フロントでのGraphQL
自己紹介
名前
李 超(31)
経歴
中国上海出身。2008年来日、2015年11月サイバーエージェントに入社
職種
フロントエンジニア
目次
・GraphQLを導入し、フロントで使っていて感じたこと
・フロントでのちょっとした改善の試み
フロントで使っていて感じたこと
・jsからquery文字列変換には罠が多い
・コンソールでのデバッグはしづらい
・jsファイルがとにかく重い
jsからqueryの文字列変換に罠が多い
const str = ‘abcde’; => `strParam: ”${str}”`
const arr = [1, 2, 3]; => `arrParam: [${arr}]`
あれ?jsにそんなもんないよ><とりあえずそういう感じでいいかな
const enum = { RED: 0, GREEN: 1 };
そうするとこう渡すでしょう => `enumParam: ${enum.RED}`
と思っている方もいるだろう。
String
Array
Enum
違う!!!
求められているのはこう => ‘enumParam: RED’
‘enumParam: 0’は決して許されない
つまりjs側の定義はこうした方がいい
const enum = { RED: ‘RED’, GREEN: ‘GREEN’ };
=> `enumParam: ${enum}`;
Stringとの違いは${}の外にダブルクオーテーションをつけないこと!
コンソールでのデバッグはしづらい
こちらはagencyのADG編集画面のリクエスト一覧
すべてgqlへのpostなので、
どれが何をするためのクエリは
わからないorz...
途中でさすがに我慢できなくなっ
たので_getLoginUserみたいな
query stringを目印としてつけた
><
コンソールでのデバッグはしづらい
うん。。。わからん。。。
これは人が読めるものではない。。。
getLoginUserの中身を見てみましょう
jsファイルはとにかく重い
短い方 =>
長い方 =>
似ているクエリは山ほどある!
すべてはjsファイルに入っている!
それは重いよね。。。
クエリを更に最適化をすると、更にバリエーションが増えるので、
更に重くなることも全然夢ではない。
フロントでのちょっとした改善の試み
・クエリにvariablesを利用とセグメント化
・nodeの中間サーバを用意し、GraphQLをすべてnodeに移動
・クライアントとサーバのやり取りをRESTに戻す
クエリにvariables利用とセグメント化
・ソース記述量が増えるが、クエリ文字列への変換はvariablesの型宣言により、小細工
をしなくて済む
・agencyやadvertiserなど使う時基本同じ形にしているものをセグメント化をし、メンテナ
ンス性がよくなる
・サーバ側のschemaとの二重管理をしたくないため、campaignやadGroupなど使う場
面によって必要なカラムが変わるものはセグメント化しない。
フロントでのGraphQL
client node resource
request
merged
response
merged
request 1
merged
request 2
response1
response2
GraphQLをnodeに移動し、RESTに戻す
・クエリ用の文字列はすべてnodeに移動したため、jsファイルがかなり軽くなる
・リソースの改修はある程度nodeの改修で吸収できる
・nodeはフロントにとって馴染みがあるので学習コストが低い
・node側で複数GraphQLをまとめて一気に投げ、整形済みのjsonをクライアントに返す
ようにしてあるため、GraphQLの長所である柔軟性は生かされている
・将来的に、おしゃれなSSRやリソースサーバとのschema共有するとかの夢も
ご清聴ありがとうございました!

More Related Content

PPTX
フロントエンドで GraphQLを使った所感
PDF
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
PPTX
JavaScriptで味わう! 関数型プログラミングのメリット!!
PDF
Arachne Unweaved (JP)
PDF
[Japanese] Style validator-html5etcstudy20151125
PDF
これができたらエンジニア|YAPC::Asia 2015 LT rejected
PDF
ジョイ・インク 役職も部署もない全員主役のマネジメント
PDF
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)
フロントエンドで GraphQLを使った所感
単体テストをやってみた~既存サービスに単体テストを追加するチャレンジ~
JavaScriptで味わう! 関数型プログラミングのメリット!!
Arachne Unweaved (JP)
[Japanese] Style validator-html5etcstudy20151125
これができたらエンジニア|YAPC::Asia 2015 LT rejected
ジョイ・インク 役職も部署もない全員主役のマネジメント
レガシーと向き合い技術スタックを代謝する(ElasticBeanstalk / Vue.js)

What's hot (6)

PDF
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
PDF
Android meets RxJava - 渋谷Java#6
PDF
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
PDF
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
PPTX
特大のヤラカシからの復活 -俺とみんながテストコードを書き出すまで-
PPTX
スクラムマスター1年生⇒2年生
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Android meets RxJava - 渋谷Java#6
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
特大のヤラカシからの復活 -俺とみんながテストコードを書き出すまで-
スクラムマスター1年生⇒2年生
Ad

Viewers also liked (20)

PPTX
課題を解決するためにやりたいこと
PPTX
GenisysでTableauを導入した話
PDF
20170112 tristan 勉強会_社外
PDF
Maglev: A Fast and Reliable Software Network Load Balancer
PDF
ニューラルネットと深層学習の歴史
PPTX
Elastic Beanstalkでアプリ/インフラかんたん一括管理
PDF
Database sql
PDF
20161110 tristan 広告ランキング
PDF
レスポンシブWebデザインでうまくやるための考え方
PPTX
goa Design first API Generation
PPTX
AbemaTV on tvOS
PDF
祭りから半年たったプロジェクトにジョインしてみた
PDF
Atomic designで助かった人たち
PDF
Introduction to Resource Hints
PDF
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
PDF
BloomFilterを直感的に理解する
PPTX
LT Thursday Intro. (Rust使ってみた←釣り)
PDF
Akka/Actor introduction
PDF
tvOSネイティブアプリを作る
PDF
AndroidにおけるCocos2d-x製ゲームの画面の録画
課題を解決するためにやりたいこと
GenisysでTableauを導入した話
20170112 tristan 勉強会_社外
Maglev: A Fast and Reliable Software Network Load Balancer
ニューラルネットと深層学習の歴史
Elastic Beanstalkでアプリ/インフラかんたん一括管理
Database sql
20161110 tristan 広告ランキング
レスポンシブWebデザインでうまくやるための考え方
goa Design first API Generation
AbemaTV on tvOS
祭りから半年たったプロジェクトにジョインしてみた
Atomic designで助かった人たち
Introduction to Resource Hints
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
BloomFilterを直感的に理解する
LT Thursday Intro. (Rust使ってみた←釣り)
Akka/Actor introduction
tvOSネイティブアプリを作る
AndroidにおけるCocos2d-x製ゲームの画面の録画
Ad

Similar to フロントでのGraphQL (20)

PDF
第3回 JavaScriptから始めるプログラミング2016
PDF
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
PDF
マーブル図で怖くないRxJS
PDF
JJUG CCC 2017 Spring LT about JPA
PPT
タダで始めるテストファースト入門 ~ C# Express + NUnit
PDF
歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech
ODP
2008-07-12 / WCAN 2008 Summer Ligntning Talks #2
PDF
フロント作業の効率化
PDF
JavaScriptことはじめ
KEY
今さら始めるJavaScript
PDF
⑯jQueryをおぼえよう!その2
PPTX
Angular js はまりどころ
PDF
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
PDF
WordBench Kobe jQueryどうでしょう
PDF
Log解析の超入門
PDF
Javaで1から10まで書いた話(sanitized)
PDF
JasmineによるJavascriptテスト駆動開発
PDF
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
PPT
第4回勉強会 Groovyの文法からSpockまで
PDF
ServerSideJavaScript
第3回 JavaScriptから始めるプログラミング2016
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
マーブル図で怖くないRxJS
JJUG CCC 2017 Spring LT about JPA
タダで始めるテストファースト入門 ~ C# Express + NUnit
歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech
2008-07-12 / WCAN 2008 Summer Ligntning Talks #2
フロント作業の効率化
JavaScriptことはじめ
今さら始めるJavaScript
⑯jQueryをおぼえよう!その2
Angular js はまりどころ
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
WordBench Kobe jQueryどうでしょう
Log解析の超入門
Javaで1から10まで書いた話(sanitized)
JasmineによるJavascriptテスト駆動開発
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
第4回勉強会 Groovyの文法からSpockまで
ServerSideJavaScript

フロントでのGraphQL