Slide 1

Slide 1 text

(SBQI2-Λ3FMBZͱ 1IPFOJYͰ࣮૷͢Δ :BT0LBEB

Slide 2

Slide 2 text

ܦྺ w ࢓ࣄͱͯ͠ͷϓϩάϥϚʔྺɿ̍̕೥͙Β͍ w ݱࡏɺϑϦʔΤϯδχΞ w σεΫτοϓ༻ΞϓϦɿ̍̌೥͙Β͍ w "OESPJE༻ΞϓϦɿ̑೥͙Β͍ w ͱ͖Ͳ͖J048FC4FSWFSͷ͓ख఻͍

Slide 3

Slide 3 text

ݱࡏ w ೥݄͔ΒΞΧπΩͷ৽نࣄۀ෦ w 8FCαʔϏεͷ։ൃ w αʔόɿ&MJYJS1IPFOJY w ϑϩϯτɿ3FBDU3FEVY w Α͏΍͘ɺHVMQ &4 BOTJCMFɺɾɾɾͳͲ Ͱ࿩ʹೖΕΔΑ͏ʹͳ͖ͬͯͨ

Slide 4

Slide 4 text

(SBQI2-

Slide 5

Slide 5 text

8FC"1*ͷελΠϧ 3&45 w ϦιʔεΛ63*Ͱද͠ɺ w (&51045165%&-&5&Ͱૢ࡞͢Δ w (&5VTFSTϢʔβϦετऔಘ w (&5VTFSTϢʔβऔಘ w 165VTFSTϢʔβߋ৽

Slide 6

Slide 6 text

8FC"1*ͷελΠϧ ΦʔέετϨʔγϣϯ૚ w ΫϥΠΞϯτͷ͋Δը໘ʹಛԽͨ͠"1* w ྫ͑͹ɺ"1*ը໘ w (&5WJFXUPQ هࣄͷϦετɺϢʔβεςʔλεɺఱؾʜ

Slide 7

Slide 7 text

"1*ͷελΠϧ 3&45 ΦʔέετϨʔγϣϯ૚ %#ΞΫηε "1* ˓গͳ͍ɾγϯϓϧ ☓ଟ͍ɾෳࡶ ൚༻ੑ ˓ ☓ "1*਺ ˓গͳ͍ ☓ଟ͍ "1*਺ը໘ ☓ଟ͍ ˓গͳ͍ ΫϥΠΞϯτ ͝ͱͷ࠷దԽ ☓ ˓

Slide 8

Slide 8 text

ཧ૝ͷ"1* w αʔόͷ࡞Γ͕γϯϓϧͰ w ൚༻తͰ w "1*਺͕࠷খݶͰ w ΫϥΠΞϯτ͔Βͷ௨৴͕গͳ͘ w σόΠε΍ը໘ͳͲͷ༻్͝ͱʹ࠷దԽͰ͖Δ

Slide 9

Slide 9 text

(SBQI2- w 'BDFCPPL͕։ൃ w ΫΤϦʔܕͷ"1* w ̎ͭͷૢ࡞ w RVFSZͱNVUBUJPO query Q { viewer { totalCount todos(first:3) { edges { node { id text } } } } }

Slide 10

Slide 10 text

(SBQI2- w αʔόͰTDIFNBΛఆٛ w TDIFNBϦιʔεͷܕͳͲ w ΫϥΠΞϯτ͸औಘ͢ΔϦιʔεɺϦιʔεͷ਺ɺ ϑΟʔϧυΛࣗ༝ʹ૊ΈཱͯΔ͜ͱ͕Ͱ͖Δɻ

Slide 11

Slide 11 text

%&.0

Slide 12

Slide 12 text

3FMBZ

Slide 13

Slide 13 text

3FMBZ w (SBQI2-ͷػೳΛ3FBDUʹ௥Ճ͢Δ+BWB4DSJQU ͷϥΠϒϥϦ

Slide 14

Slide 14 text

3FBDU w 8FCͷ7JFXͷͨΊͷ+BWB4DSJQUϥΠϒϥϦ w 7JSUVBM%0. w ίϯϙʔωϯτࢦ޲ w TUBUF w มߋ͢Δͱؔ࿈͢Δίϯϙʔωϯτ͕ߋ৽͞ΕΔ w QSPQT w JNNVUBCMF਌͔Βࢠ΁σʔλΛ౉͢

Slide 15

Slide 15 text

3FBDU class Comment extends React.Component {
 render() {
 return (



 {this.props.comment.author}



 {this.props.comment.text}


 );
 }
 }
 
 class CommentList extends React.Component {
 : 
 componentDidMount() {
 $.ajax({
 success: function(data) {
 this.setState({comments: data});
 }.bind(this),
 });
 }
 
 render() {
 let commentNodes = this.state.comments.map(comment => {
 return (
 
 );
 });
 
 return (


 {commentNodes}


 );
 }
 }

Slide 16

Slide 16 text

3FMBZ w 3FBDUʹ(SBQI2-ͷػೳΛ௥Ճ͢ΔϥΠϒϥϦ w (SBQI2-ʹΑΔσʔλͷऔಘɾߋ৽ w QSPQT΁ͷ൓ө w TUBUF͸3FMBZ͕؅ཧ

Slide 17

Slide 17 text

3FMBZ 5PEP-JTU 
 export default Relay.createContainer(TodoList, {
 
 fragments: {
 viewer: () => Relay.QL`
 fragment on User {
 completedCount,
 todos(status: $status, first: $limit) {
 edges {
 node {
 id,
 ${Todo.getFragment('todo')},
 },
 },
 },
 }
 `,
 },
 });
 class TodoList extends React.Component {
 renderTodos() {
 return this.props.viewer.todos.edges.map(edge =>
 
 );
 }
 render() {
 return (
 

    
 {this.renderTodos()}


 
 );
 }
 }


Slide 18

Slide 18 text

3FMBZ export default Relay.createContainer(Todo, {
 fragments: {
 todo: () => Relay.QL`
 fragment on Todo {
 complete,
 id,
 text,
 }
 `,
 },
 });
 5PEP class Todo extends React.Component {
 render() {
 return (

  • 
 {this.props.todo.text}
 
 

  • 
 );
 }
 }

    Slide 19

    Slide 19 text

    ͜͜·ͰͰɺ w 3FBDU3FMBZ w (SBQI2-ͷΫϥΠΞϯτͷ४උ͕Ͱ͖ͨ w αʔό͸ʁ

    Slide 20

    Slide 20 text

    &MJYJS

    Slide 21

    Slide 21 text

    &MJYJS w ؔ਺ܕݴޠ select( where( from(w in Weather), [w], w.population > 0), [w], w.city)

    Slide 22

    Slide 22 text

    &MJYJS w ύΠϓϥΠϯ w લͷؔ਺ͷ໭Γ஋Λɺ࣍ͷؔ਺ͷୈ̍Ҿ਺ʹ౉͢ɻ w ؔ਺Λॎʹදݱ͢Δ͜ͱͰɺؔ਺ͷؔ܎΍ྲྀΕΛΘ͔Γ ΍͘͢දݱͰ͖Δɻ from(w in Weather) |> where([w], w.population > 0) |> select([w], w.city)

    Slide 23

    Slide 23 text

    &MJYJS w ϚΫϩ w %4-ʢಠࣗͷݴޠʣΛ࡞Δ͜ͱ͕Ͱ͖Δ from(w in Weather) |> where([w], w.population > 0) |> select([w], w.city)

    Slide 24

    Slide 24 text

    &DUP w σʔλϕʔεૢ࡞༻ͷϞδϡʔϧ w 03.ͷΑ͏ͳ໾ׂɻ w %4-Ͱσʔλϕʔεͷૢ࡞Λهड़

    Slide 25

    Slide 25 text

    &DUP %4- w จͷߏ଄͸&MJYJS͕ͩɺҙຯ͸ಠࣗʹղऍ w ྫɿԼͷྫͰɺMJTU΍NBQͷදݱ͕ͩɺG΍V͕ಥવొ৔͠ ͍ͯͯɺ&MJYJSͱͯ͠͸ਖ਼͘͠ͳ͍ w TFMFDU΍MJNJUͷ ͷத͸&DUPઐ༻ͷݴޠ %-4 feed = RssFeed |> Query.select([f], %{ id: f.id, title: f.title }) |> Query.limit([u], 1) |> Repo.all

    Slide 26

    Slide 26 text

    &DUP &DUPΛ࢖ͬͯ(SBQI2-ͷRVFSZͰࢦఆ͞Εͨ ϑΟʔϧυͷΈΛऔಘ͢Δɻ (SBQI2-"1*ʹσʔλΛฦ͢ʹ͸ʁ

    Slide 27

    Slide 27 text

    &DUP w TFMFDUʹࢦఆ͢ΔΧϥϜΛߏங͠ͳ͚Ε͹ ͳΒ͍ɻ w TFMFDUͷ ͷத͸&DUPಠࣗͷධՁ͕ͩɺ ֎ʹग़Δͱ&MJYJSͱͯ͠ධՁ͞ΕΔͷ Ͱɺ֎ͰߏஙͰ͖ͳ͍ɻ cols = %{ title: f.title, summary: f.summary } feed = RssFeed |> Query.select([f], cols) |> Query.limit([u], 1) |> Repo.all fragment on RssFeed {
 title,
 subtitle,
 summary
 }

    Slide 28

    Slide 28 text

    &DUP w ৽͍͠%4-ʢখ͞ͳϚΫϩʣΛ࡞੒͢Δ w 2VFSZ&YTFMFDU w &DUPͷTFMFDU͸ԿΛ͍ͯ͠Δ͔ʁ w Ecto.Query.Select.build/4ΛݺΜͰ͍Δɻ defmodule Ecto.Query do defmacro select(query, binding, expr) do
 Select.build(query, binding, expr, __CALLER__)
 end end

    Slide 29

    Slide 29 text

    &DUP defmodule QueryEx do
 defmacro select(query, cols) do
 quote do
 Ecto.Query.Builder.Select.build(unquote(query), [{:f, [], nil}], ɹɹɹɹɹɹQueryEx.make_select(unquote(cols)), __ENV__)
 |> Code.eval_quoted
 |> elem(0)
 end
 end
 
 def make_select(cols) do
 {:%{}, [], make_col([], cols)}
 end
 
 defp make_col(cols, [col|tl]) do
 cols = Keyword.put(cols, String.to_atom(col), ɹɹɹɹɹɹɹɹɹɹɹɹɹɹ{{:., [], [{:f, [], nil}, String.to_atom(col)]}, [], []})
 make_col(cols, tl)
 end
 
 defp make_col(cols, []) do
 cols
 end
 end


    Slide 30

    Slide 30 text

    %&.0

    Slide 31

    Slide 31 text

    (SBQI2-Λ3FMBZͱ 1IPFOJYͰ࣮૷͢Δ

    Slide 32

    Slide 32 text

    1IPFOJY w &MJYJSͷ3VCZPO3BJMTͷΑ͏ͳαʔόͷϑϨʔϜ ϫʔΫ

    Slide 33

    Slide 33 text

    ࢀߟࢿྉ w IUUQUFDICMPHOFUqJYDPNFNCSBDJOHEJ⒎FSFODFT JOTJEFOFUqJYIUNM w IUUQGBDFCPPLHJUIVCJPHSBQIRM w IUUQTGBDFCPPLHJUIVCJPSFBDU w IUUQTGBDFCPPLHJUIVCJPSFMBZ w αϯϓϧίʔυ w IUUQTHJUIVCDPNZBTVIJSPPLBEBBLUTL TBNQMF@QIPFOJY@SFBDU