Slide 1

Slide 1 text

(SBQI2-%JSFDUJWFTΛ ࢼͯ͠Έͨ &*5ߴଜ

Slide 2

Slide 2 text

(SBQI2-%JSFDUJWFT ͱ͸Կ͔ʁ

Slide 3

Slide 3 text

࠷ॳ͔Β͋ΔσΟϨΫςΟϒ IUUQTXXXBQPMMPHSBQIRMDPNEPDTBQPMMPTFSWFSGFBUVSFT EJSFDUJWFTIUNM%FGBVMU%JSFDUJWFT

Slide 4

Slide 4 text

ಠ࣮ࣗ૷ྫ IUUQTXXXBQPMMPHSBQIRMDPNEPDTHSBQIRMUPPMTTDIFNB EJSFDUJWFTIUNM&YBNQMFT

Slide 5

Slide 5 text

Ͳ͏͍͏छྨ͕
 ͋Δͷ͔ʁ

Slide 6

Slide 6 text

εΩʔϚͰ࢖͏ IUUQTHJUIVCDPNHSBQIRMHSBQIRMKTCMPC BFFBEBCEDGDBGFTSDMBOHVBHF EJSFDUJWF-PDBUJPOKT--

Slide 7

Slide 7 text

ϦΫΤετͰ࢖͏ IUUQTHJUIVCDPNHSBQIRMHSBQIRMKTCMPC BFFBEBCEDGDBGFTSDMBOHVBHF EJSFDUJWF-PDBUJPOKT--

Slide 8

Slide 8 text

࢖ͬͯΈ͍ͨ☺

Slide 9

Slide 9 text

͓୊ w ഑ྻΛฦ͢ෳ਺ͷ3&45GVM"1*63-Λ౉͢ͱɺ
 ݁ՌΛܨ͛ͯฦͯ͘͠ΕΔ
 !DPODBU VSMT σΟϨΫςΟϒ

Slide 10

Slide 10 text

σΟϨΫςΟϒΛએݴ

Slide 11

Slide 11 text

# .graphql directive @concat(urls: [String]) on FIELD_DEFINITION

Slide 12

Slide 12 text

σΟϨΫςΟϒΛ࣮૷

Slide 13

Slide 13 text

// .js import { SchemaDirectiveVisitor } from 'apollo-server'; class ConcatDirective extends SchemaDirectiveVisitor { visitFieldDefinition(fieldDefinition) { const { urls } = this.args; fieldDefinition.resolve = (obj, args, context, info) => Promise.all( urls.map( url => fetch(url).then( res => res.json() ) ) ).then( rs => rs.reduce((xs, arr) => [...xs, ...arr], []), ); } } export const schemaDirectives = { concat: ConcatDirective, };

Slide 14

Slide 14 text

ͦΕΛεΩʔϚͰ࢖͏

Slide 15

Slide 15 text

# .graphql type Issue { id: String url: String } type RootQuery { # ... ghissues: [Issue] @concat(urls: [ "https://api.github.com/repos/apollographql/apollo-link/issues", "https://api.github.com/repos/apollographql/apollo-client/issues", "https://api.github.com/repos/apollographql/apollo-server/issues", ]) }

Slide 16

Slide 16 text

ͦͷΫΤϦΛୟ͘

Slide 17

Slide 17 text

# .graphql query { ghissues { id url } }

Slide 18

Slide 18 text

# the graphql response { data: { ghissues: [ { id: 393044392, url: https://api.github.com/repos/apollographql/apollo-link/issues/897 }, // ... { id: 392713767, url: https://api.github.com/repos/apollographql/apollo-client/issues/4252 }, // ... { id: 386114424, url: https://api.github.com/repos/apollographql/apollo-server/issues/2051 } ] } }

Slide 19

Slide 19 text

w 3&45GVM"1*͕࠶ར༻Մೳͳ΋ͷʹͳΕ͹ͳΔ΄Ͳɺ(SBQI2- 3FTPMWFS࣮૷͸୯ௐͳ΋ͷʹͳΔɻͦ͜Λղܾ͢Δ w ʮεΩʔϚͰఆٛͨ͠63-ʹର͠ɺϢʔβϦΫΤετ࣌ʹύ ϥϝʔλΛ௥ՃʯͳͲ΋΋ͪΖΜՄೳ w '*&-%ΑΓ΋ɺ(SBQI2-αʔόଆΛ֦ு͢Δ '*&-%@%&'*/*5*0/ͷํ͕ເ͕޿͕Δײ͋Δ w ࡞Δ࣌ɺ(SBQI2-γϯλοΫεΤϥʔʹؾ෇͖΍͍͢Α͏ૉ ૣ͘ىಈͰ͖Δঢ়ଶΛ࡞͓͚ͬͯ͹͔ͳΓָ
 ʢ34,ͰΫϥΠΞϯτίʔυͷίϯύΠϧΛؚΊىಈͯͨ͠ Β৸ͦ͏ʹͳͬͨʣ

Slide 20

Slide 20 text

// ./dev-graphql-server.js import { ApolloServer } from 'apollo-server'; global.__DEV__ = true; const { default: schema } = require('./src/data/schema'); new ApolloServer(schema).listen().then(({ url }) => { console.log(` Server ready at ${url}`); }); (SBQI2-αʔόͷΈΛ5SZ&SSPSͰ͖ΔΑ͏ʹ͓ͯ͘͠

Slide 21

Slide 21 text

w (SBQI2-ͷޙΖͷ࣮૷Λແͤ͘Δເ w ϑϩϯτΤϯυΤϯδχΞ͕ɺ(SBQI2-εΩʔϚͱϑϩϯτͷ
 ίʔυΛॻ͚ͩ͘Ͱׂͱڽͬͨ8FCΞϓϦΛσϓϩΠ͢Δະདྷ w ྫ͑͹!NZTRM΍!SFEJTͳͲͱ͍ͬͨσΟϨΫςΟϒΛ࡞Ε͹ɺ
 ετϨʔδ઀ଓ෦෼ͷ࣮૷ͳ͠Ͱσʔλऔಘɾॻ͖׵͑Ͱ͖ͦ͏ɻ
 !BVUI΋࢓༷ΛݻΊΒΕΕ͹͔ͳΓεέʔϧͦ͠͏ w ΧελϜσΟϨΫςΟϒҰࣜΛ഑෍ͯ͠Δ੎
 IUUQTXXXOQNKTDPNQBDLBHFHSBQIRMDVTUPNEJSFDUJWFT
 !EBUF BTz:::: ͱ͔͸͸·Ε͹ڧͦ͏ʣ w (SBQI2-εΩʔϚͰ%#εΩʔϚ΋ࡁ·ͤΔ੎
 IUUQTXXXOQNKTDPNQBDLBHFHSBQIRMEJSFDUJWFTRM