Slide 1

Slide 1 text

GraphQL で作る GitHub events viewer @mtsmfm Fumiaki Matsushima GraphQL ナイト 6/28 @ 五反田

Slide 2

Slide 2 text

➔ Quipper Ltd 所属 ➔ Ruby と麻雀が好き ➔ GraphQL Tokyo 主催 @mtsmfm.inspect

Slide 3

Slide 3 text

https://www.quipper.com/

Slide 4

Slide 4 text

https://studysapuri.jp/

Slide 5

Slide 5 text

https://techplay.jp/event/680406

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

GraphQL Tokyo https://www.meetup.com/ja-JP/GraphQL-Tokyo/

Slide 8

Slide 8 text

https://www.meetup.com/ja-JP/GraphQL-Tokyo/events/251782724/

Slide 9

Slide 9 text

GraphQL で作る GitHub events viewer @mtsmfm Fumiaki Matsushima GraphQL ナイト 6/28 @ 五反田

Slide 10

Slide 10 text

Quipper では すべて GH issue

Slide 11

Slide 11 text

新機能

Slide 12

Slide 12 text

バグ

Slide 13

Slide 13 text

問い合わせ

Slide 14

Slide 14 text

日報

Slide 15

Slide 15 text

ポエム

Slide 16

Slide 16 text

一瞬であふれる通知

Slide 17

Slide 17 text

Jasper 使ってますか https://jasperapp.io/

Slide 18

Slide 18 text

https://jasperapp.io/

Slide 19

Slide 19 text

We ♥ Jasper

Slide 20

Slide 20 text

とはいえ

Slide 21

Slide 21 text

何が起きたか見るた め GitHub Issue 開 くの億劫

Slide 22

Slide 22 text

ふいんきでいいので 全体をざっとみたい

Slide 23

Slide 23 text

Tweet Deck っぽいやつ?

Slide 24

Slide 24 text

つくることにした

Slide 25

Slide 25 text

GitHub API v4 GraphQL

Slide 26

Slide 26 text

GitHub ブラウザ

Slide 27

Slide 27 text

なぜか events が ない

Slide 28

Slide 28 text

Graph QL サー バ Action Cable サーバ GitHub GitHub クローラ Postgres ブラウザ

Slide 29

Slide 29 text

[WIP] GH deck https://github.com/mtsmfm/gh-deck

Slide 30

Slide 30 text

graphql-ruby ActionCable Relay

Slide 31

Slide 31 text

なぜ GraphQL?

Slide 32

Slide 32 text

A. 使いたかったから

Slide 33

Slide 33 text

https://github.com/mtsmfm/gh-deck/blob/db507a455f754c25864557ee4e7bd788776e529f/app/javascript/gh-deck/ containers/GithubEventListItem.jsx

Slide 34

Slide 34 text

みどころ1

Slide 35

Slide 35 text

graphiql-rails を使わない

Slide 36

Slide 36 text

https://github.com/mtsmfm/gh-deck/blob/db507a455f754c25864557ee4e7bd788776e529f/app/jav ascript/packs/graphiql.jsx

Slide 37

Slide 37 text

graphiql のアプデが gemメンテナ頼みに

Slide 38

Slide 38 text

Sprockets 前提

Slide 39

Slide 39 text

認証を考えると 結局 fetcher 必要

Slide 40

Slide 40 text

みどころ2

Slide 41

Slide 41 text

Relay Client Schema

Slide 42

Slide 42 text

https://github.com/mtsmfm/gh-deck/blob/db507a455f754c25864557ee4e7bd788776e529f/app/jav ascript/gh-deck/clientSchema.graphql

Slide 43

Slide 43 text

今までは Redux を 併用する必要が

Slide 44

Slide 44 text

https://medium.com/@matt.krick/replacing-redux-with-relay-47ed085bfafe

Slide 45

Slide 45 text

既存の Type に 追加しかできない

Slide 46

Slide 46 text

relay-compiler の --src 以下に Client Schema がないといけな い

Slide 47

Slide 47 text

https://medium.com/@matt.krick/replacing-redux-with-relay-47ed085bfafe

Slide 48

Slide 48 text

https://medium.com/@matt.krick/replacing-redux-with-relay-47ed085bfafe

Slide 49

Slide 49 text

実はそんなオプショ ンはない

Slide 50

Slide 50 text

relay-compiler CLI が 単に無視してるだけ

Slide 51

Slide 51 text

※ ドキュメントは何 ひとつない

Slide 52

Slide 52 text

みどころ3

Slide 53

Slide 53 text

GraphQL Subscription

Slide 54

Slide 54 text

Graph QL サー バ Action Cable サーバ GitHub GitHub クローラ Postgres ブラウザ

Slide 55

Slide 55 text

https://github.com/mtsmfm/gh-deck/commit/d490c523eef32fa489625e65c835e5d1d370c861

Slide 56

Slide 56 text

https://speakerdeck.com/hibariya/graphql-subscription-with-relay-and-action-cable

Slide 57

Slide 57 text

https://github.com/mtsmfm/gh-deck/blob/db507a455f754c25864557ee4e7bd788776e529f/app/javascrip t/gh-deck/subscriptions/GithubEventCreatedSubscription.js

Slide 58

Slide 58 text

動くは動くが どれくらい捌けるか は謎

Slide 59

Slide 59 text

みどころ4

Slide 60

Slide 60 text

テスト

Slide 61

Slide 61 text

はない

Slide 62

Slide 62 text

テスト書いてないと かお前それry

Slide 63

Slide 63 text

[WIP] だから...

Slide 64

Slide 64 text

テストについて 思うこと

Slide 65

Slide 65 text

Q. GraphQLサーバ はどうテストすれば いいか?

Slide 66

Slide 66 text

GraphQL だからといって、Request Spec (API 単位で正常なリクエストを返すかのテスト) も E2E テスト (ブラウザを動かしてユーザ操作を再現する テスト) も、今までとやり方が変わることはない

Slide 67

Slide 67 text

パラメータが多い REST API をどうテストするかという話

Slide 68

Slide 68 text

やってみたいこと

Slide 69

Slide 69 text

そもそも Event ごとに Component 作りきってちゃん と使えるようにしないと :innocent:

Slide 70

Slide 70 text

- Relay -> Apollo - Client Schema つらい... - Relay の歩みが遅い... - Apollo Engine - Cache、メトリクス

Slide 71

Slide 71 text

Fork me on GitHub! https://github.com/mtsmfm/gh-deck