Slide 1

Slide 1 text

(SBQI2-͸͍͍ͧ ʙ-BSBWFMͰֶͿ(SBQI2-ೖ໳ʙ 1)1ΦϨΧϯϑΝϨϯεਆށ 4"8

Slide 2

Slide 2 text

1)1ΦϨΧϯϑΝϨϯεਆށ $(whoami) w ࢯ໊Ճ౻फҰ࿠ ࡀ w ϋϯυϧωʔϜ4"8 w 9 چ5XJUUFS !B[VLJ@FBUFS w ؔ੢ͷ*5ΤϯδχΞίϛϡχςΟͷ೐΍͔͠୲౰ ࣗশ w େࡕࡏॅɾѪ஌ग़਎ w ಘҙ෼໺8FCΞϓϦέʔγϣϯ։ൃ w -BSBWFM 7VF w झຯήʔϜ🎮ɾυϥΠϒ🏎ɾϰΝΠΦϦϯ🎻

Slide 3

Slide 3 text

1)1ΦϨΧϯϑΝϨϯεਆށ $(history) w ֶྺम࢜ ιϑτ΢ΣΞ޻ֶ w ೆࢁେֶ৘ใཧ޻ֶ෦ιϑτ΢ΣΞ޻ֶՊ೥݄ଔۀ w ೆࢁେֶཧ޻ֶݚڀՊιϑτ΢ΣΞ޻ֶઐ߈ത࢜લظ՝ఔ೥݄मྃ w ओͳ৬຿࣮੷ w Ξϯέʔτ࡞੒γεςϜͷϦϓϨΠε 7VFKT -BSBWFM w ֎ࠃޠൃԻ࿅श8FCΞϓϦέʔγϣϯͷ։ൃ 7VFKT -BSBWFM w ݸਓ։ൃ w ӳ୯ޠֶश༻8FCΞϓϦέʔγϣϯΛ։ൃத🍊 7VFKT -BSBWFM

Slide 4

Slide 4 text

1)1ΦϨΧϯϑΝϨϯεਆށ ͓͠ͳ͕͖ (SBQI2-ͷجૅ εΩʔϚఆٛͱσʔλܕ -BSBWFMΛ༻͍ͨ(SBQI2-αʔόʔͷߏங

Slide 5

Slide 5 text

1)1ΦϨΧϯϑΝϨϯεਆށ (SBQI2-ͷجૅ

Slide 6

Slide 6 text

1)1ΦϨΧϯϑΝϨϯεਆށ (SBQI2-ͱ͸ w "1*ͷͨΊͷ໰͍߹Θͤݴޠ w (SBQI2-Ͱ͸ΫΤϦͰඞཁͳσʔλΛࢦఆ w ͞·͟·ͳϓϩάϥϛϯάݴޠͰͷαʔόʔ࣮૷ϥΠϒϥϦ͕ଘࡏ w αʔόʔ࣮૷ͷͨΊͷϥΠϒϥϦͷྫ w 1)1-JHIUIPVTF w 1ZUIPO(SBQIFOF 4USBXCFSSZ w ΫϥΠΞϯτ༻ͷϥΠϒϥϦͷྫ w +BWB4DSJQU"QPMMP$MJFOU w 4XJGU"QPMMPJ04 4XJGU(SBQI2-

Slide 7

Slide 7 text

1)1ΦϨΧϯϑΝϨϯεਆށ (SBQI2-ͷಛ௃ w ඞཁͳσʔλΛͭͷΫΤϦͰաෆ଍ͳ͘ॊೈʹऔಘՄೳ w 3&45Ͱ͸"1*ͷΤϯυϙΠϯτ͕ฦ͢σʔλߏ଄͸Ұఆ w (SBQI2-͸ΫΤϦͷ֊૚ߏ଄ͱಉ͡σʔλߏ଄ͷϨεϙϯεΛฦ٫ w (SBQI2-ͷΤϯυϙΠϯτ͸ͭ w 3&45"1*͸"1*ͷ਺͚ͩΤϯυϙΠϯτ͕ඞཁ w (SBQI2-͸εΩʔϚϑΝʔετ w εΩʔϚͷఆ͔ٛΒΫΤϦͷܕݕূ͕Մೳ

Slide 8

Slide 8 text

1)1ΦϨΧϯϑΝϨϯεਆށ ΫϥΠΞϯτ͕ΫΤϦΛૹ৴͢Δ αʔόʔ͸ཁٻ͞ΕΔϑΟʔϧυͷσʔλΛऔಘ͢ΔॲཧΛ࣮ߦ͢Δ औಘͨ͠σʔλΛΫϥΠΞϯτʹฦ٫͢Δ (SBQI2-Λར༻ͨ͠"1*௨৴ͷྲྀΕ ΫϥΠΞϯτ αʔόʔ query loginUser { user { me } } { "data": { "user": { "me": "SAW" } } } ΫΤϦΛૹ৴ ཁٻ͞ΕΔϑΟʔϧυͷ σʔλΛऔಘ σʔλΛ+40/Ͱฦ٫

Slide 9

Slide 9 text

1)1ΦϨΧϯϑΝϨϯεਆށ σʔλૢ࡞ͷ෼ྨ w (SBQI2-ʹ͓͚Δσʔλૢ࡞ͷ෼ྨ͸ҎԼͷͭ w 2VFSZσʔλͷಡΈࠐΈૢ࡞ w $36%ͷ3 3FBE Λ୲౰ w .VUBUJPOσʔλͷॻ͖ࠐΈૢ࡞ w $36%ͷ$ $SFBUF 6 6QEBUF % %FMFUF Λ୲౰ w 4VCTDSJQUJPOαʔόʔͷߋ৽ΛϦΞϧλΠϜʹऔಘ w αʔόʔͷσʔλ͕มߋ͞ΕΔͱTVCTDSJCF͍ͯ͠ΔΫϥΠΞϯτʹ௨஌

Slide 10

Slide 10 text

1)1ΦϨΧϯϑΝϨϯεਆށ εΩʔϚఆٛͱσʔλܕ

Slide 11

Slide 11 text

1)1ΦϨΧϯϑΝϨϯεਆށ εΩʔϚఆٛ w "1*Ͱར༻ՄೳͳσʔλܕΛఆٛ w (SBQI2-ʹ͓͚ΔεΩʔϚఆٛݴޠʹΑͬͯఆٛ w (SBQI2-ͷεΩʔϚఆٛʹΑͬͯܕݕূΛ࣮ݱ w ΫϥΠΞϯτͱαʔόʔͷ྆ํͰ(SBQI2-ͷΫΤϦΛݕূՄೳ w 2VFSZ .VUBUJPO 4VCTDSJQUJPO΋εΩʔϚʹఆٛ w "1*ͷΠϯλʔϑΣΠεΛఆٛ͢ΔΑ͏ͳΠϝʔδ

Slide 12

Slide 12 text

1)1ΦϨΧϯϑΝϨϯεਆށ (SBQI2-ͷσʔλܕ w (SBQI2-ʹ͸εΧϥʔܕͱΦϒδΣΫτܕͷछྨ͕ଘࡏ w εΧϥʔܕϑΟʔϧυΛ࣋ͨͣͦΕҎ্෼ղͰ͖ͳ͍ܕ w ૊ΈࠐΈͷεΧϥʔܕͱΧελϜεΧϥʔܕ͕ଘࡏ w ΦϒδΣΫτܕෳ਺ͷϑΟʔϧυͰߏ੒͞ΕΔܕ w +40/ͷΦϒδΣΫτͷΑ͏ͳΠϝʔδ w OPOOVMMBCMFͷࢦఆʹ͸ΤΫεΫϥϝʔγϣϯϚʔΫ ! Λར༻ w IntInt·ͨ͸null w Int!Int

Slide 13

Slide 13 text

1)1ΦϨΧϯϑΝϨϯεਆށ (SBQI2-ʹ͓͚Δ૊ΈࠐΈͷεΧϥʔܕ w جຊతʹ͸ϓϩάϥϛϯάݴޠͷϓϦϛςΟϒܕͱಉ͡ w *%ܕ͸஋͕ॏෳ͠ͳ͍͜ͱΛݕূ w Ϩεϙϯεͷ+40/Ͱ͸จࣈྻͱͯ͠ฦ٫ ܕ ಺༰ Int ੔਺ܕ Float ුಈখ਺ܕ String จࣈྻܕ Boolean ࿦ཧܕ ID ࣝผࢠܕ

Slide 14

Slide 14 text

1)1ΦϨΧϯϑΝϨϯεਆށ Ϧετܕʹ͍ͭͯ w (SBQI2-Ͱ͸ϦετΛׅ֯ހ [] Ͱදݱ w Ϧετͷத਎ͱϦετࣗ਎͕OVMMBCMF͔ΛͦΕͧΕࢦఆ Ϧετͷܕએݴ ఆٛ [Int] ϦετOVMMBCMF த਎OVMMBCMFͳ*OU [Int!] ϦετOVMMBCMF த਎OPOOVMMBCMFͳ*OU [Int]! ϦετOPOOVMMBCMF த਎OVMMBCMFͳ*OU [Int!]! ϦετOPOOVMMBCMF த਎OPOOVMMBCMFͳ*OU

Slide 15

Slide 15 text

1)1ΦϨΧϯϑΝϨϯεਆށ -BSBWFMΛ༻͍ͨ (SBQI2-αʔόʔͷߏங

Slide 16

Slide 16 text

1)1ΦϨΧϯϑΝϨϯεਆށ -JHIUIPVTFͱ͸ w -BSBWFMͰ(SBQI2-αʔόʔΛ࣮૷͢ΔͨΊͷϥΠϒϥϦ w &MPRVFOU.PEFMΛར༻ͯ͠؆୯ʹαʔόʔػೳΛ࣮ݱՄೳ w σΟϨΫςΟϒʹΑͬͯػೳΛ؆୯ʹ࣮ݱՄೳ w &MPRVFOU.PEFMͷ$36%ૢ࡞ w ೝূɾೝՄػೳ

Slide 17

Slide 17 text

1)1ΦϨΧϯϑΝϨϯεਆށ -JHIUIPVTFΛ࢖࣮ͬͨ૷ͷཁૉ εΩʔϚఆٛ Ϧκϧό &MPRVFOU.PEFM (SBQI2-αʔόʔͷ಺෦ TDIFNB SFTPMWFS .PEFM $MJFOU ϦκϧόΛ࣮ߦ ϞσϧΛࢀর ϞσϧΛฦ٫ ࣮ߦ݁ՌΛฦ٫ ϦΫΤετΛૹ৴ ϨεϙϯεΛฦ٫

Slide 18

Slide 18 text

1)1ΦϨΧϯϑΝϨϯεਆށ Ϧιϧόͱ͸ w εΩʔϚఆ͚ٛͩͰ͸σʔλͷऔಘॲཧͳͲͷૢ࡞͸࣮ߦ͞Εͳ͍ w "1*ͷΠϯλϑΣʔεΛఆٛ͢Δ͜ͱ͕εΩʔϚͷ໾ׂ w ࣮ࡍͷૢ࡞Λ࣮ݱ͢ΔͨΊʹ͸Ϧκϧόͷ࣮૷͕ඞཁ w ॲཧΛඥ෇͚ΔϑΟʔϧυͷฦ٫ܕͱಉ͡ߏ଄ͷσʔλΛฦ͢Α͏ʹ࣮૷

Slide 19

Slide 19 text

1)1ΦϨΧϯϑΝϨϯεਆށ &MPRVFOU.PEFMͷ࣮૷ྫ w &MPRVFOUϞσϧͱςʔϒϧΛ࡞੒͢Δ.JHSBUJPOΫϥεΛ࡞੒ w &MPRVFOU.PEFMPost w ςʔϒϧposts public function up(): void { Schema::create('posts', function (Blueprint $table) { $table->id('id'); $table->string('title'); $table->string('content'); $table->timestamps(); }); } QPTUTςʔϒϧͷ.JHSBUJPOͷఆٛ final class Post extends Model { } 1PTUϞσϧͷఆٛ

Slide 20

Slide 20 text

1)1ΦϨΧϯϑΝϨϯεਆށ εΩʔϚఆٛͷ࣮૷ྫ w graphql/schema.graphqlΛฤूͯ͠εΩʔϚఆٛΛ௥Ճ w &MPRVFOU.PEFMͷߏ଄ΛΦϒδΣΫτͱͯ͠ܕఆٛ w "1*ͱͯ͠Մೳͳૢ࡞Λ2VFSZʹͦΕͧΕఆٛ w posts͢΂ͯͷPostϞσϧͷϦετΛฦ٫ w postࢦఆͨ͠idʹҰக͢ΔPostϞσϧΛฦ٫ type Post { id: ID! title: String! content: String! } type Query { posts: [Post!]! post(id: Int!): Post } graphql/schema.graphql

Slide 21

Slide 21 text

1)1ΦϨΧϯϑΝϨϯεਆށ Ϧιϧόͷ࣮૷ྫ w εΩʔϚͰఆٛͨ͠ૢ࡞ʹରԠ͢ΔॲཧΛ࣮૷ w 2VFSZͷϦκϧόͷTDB ff PME͸ҎԼͷartisanίϚϯυ͔Βੜ੒Մೳ w php artisan lighthouse:query 操作名 use App\Models\Post as ModelsPost; // posts のリゾルバ final readonly class Posts { public function __invoke() { $posts = ModelsPost::all(); return $posts; } } App\GraphQL\Queries\Posts use App\Models\Post as ModelsPost; // post のリゾルバ final readonly class Post { public function __invoke(null $_, array $args) { $id = $args['id']; $post = ModelsPost::find($id); return $post; } } App\GraphQL\Queries\Post

Slide 22

Slide 22 text

1)1ΦϨΧϯϑΝϨϯεਆށ σΟϨΫςΟϒʹ͍ͭͯ w (SBQI2-ͷεΩʔϚʹԿΒ͔ͷػೳΛ௥Ճ w εΩʔϚఆٛ಺ͰػೳΛ෇ਵ͍ͨ͠ՕॴʹσΟϨΫςΟϒΛهࡌ w -JHIUIPVTFͷ૊ΈࠐΈσΟϨΫςΟϒͷҰྫ w @allฦ٫ܕͷ&MPRVFOU.PEFMΛ͢΂ͯฦ٫ w @paginateෳ਺ͷ&MPRVFOU.PEFMΛϖʔδωʔγϣϯͯ͠ฦ٫ w @findࢦఆ͞Εͨ*%ʹҰக͢Δ&MPRVFOU.PEFMΛฦ٫ w *%ͷࢦఆ͸@eqΛࢦఆ

Slide 23

Slide 23 text

1)1ΦϨΧϯϑΝϨϯεਆށ εΩʔϚͰσΟϨΫςΟϒΛར༻͢Δ৔߹ w ϞσϧΛฦ٫͢ΔσΟϨΫςΟϒΛར༻͢Δ৔߹͸Ϧκϧόͷ࣮૷͕ෆཁ w posts@allͰPostϞσϧͷ͢΂ͯΛฦ٫ w post@findͰidʹ߹க͢ΔϞσϧΛฦ٫ w @eqΛར༻͢Δ͜ͱͰҾ਺ͷ஋ͱPostͷidͱ߹க͢ΔϞσϧΛฦ٫ type Query { posts: [Post!]! @all post(id: Int! @eq): Post @find } graphql/schema.graphql

Slide 24

Slide 24 text

1)1ΦϨΧϯϑΝϨϯεਆށ -JHIUIPVTFͷศར͞Λମײͯ͠Έ͍ͨ

Slide 25

Slide 25 text

1)1ΦϨΧϯϑΝϨϯεਆށ ެࣜυΩϡϝϯτͷ 5VUPSJBMΛࢼͦ͏

Slide 26

Slide 26 text

1)1ΦϨΧϯϑΝϨϯεਆށ ૯ׅ w (SBQI2-ͷجૅʹ͍ͭͯઆ໌ w "1*௨৴ͷྲྀΕΛઆ໌ w (SBQI2-ͷεΩʔϚఆٛͱσʔλܕʹ͍ͭͯઆ໌ w -BSBWFMͰ(SBQI2-αʔόʔΛ࣮૷͢Δํ๏Λ঺հ w -JHIUIPVTFʹ͍ͭͯͷઆ໌ w جຊతͳ࣮૷ͷྲྀΕΛઆ໌ w ؆୯ͳ࣮૷ྫΛ঺հ

Slide 27

Slide 27 text

1)1ΦϨΧϯϑΝϨϯεਆށ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ (SBQI2-͸͍͍ͧ