Slide 1

Slide 1 text

ԕ౻ଠಙ(.01FQBCP *OD -BSBWFM.FFU6Q5PLZP -BSBWFMΛ࢖ͬͨ طଘ8FCαʔϏεͷ"1*Խ

Slide 2

Slide 2 text

ԕ౻ଠಙ ͑ΜͲ͎ʔ !'FOEP 4)ࣄۀ෦(PPQFάϧʔϓ8FCΤϯδχΞ @Fendo181 @Fendo181

Slide 3

Slide 3 text

ɾ؆୯ʹࣗ෼ͷϗʔϜϖʔδ͕࡞੒Ͱ͖Δ ɾࠓ೥ͰαʔϏεՔಇͯ͠೥໨

Slide 4

Slide 4 text

-VNFOͰݎ࿚ͳ"1*Λઃܭ͢Δɻ ʲ຋༁ʳLaravelΛ5.6͔Β5.6.30ʹΞοϓάϨʔυ͢Δ(Security Release) ͜Ε·Ͱ΍͖ͬͯͨࣄ

Slide 5

Slide 5 text

ࠓ೔͓࿩͍ͨ͠ࣄ

Slide 6

Slide 6 text

طଘͷ࢓༷ʹ߹Θͤͨ3&45GVM"1*Λ ৽نͰ։ൃ͢Δ࿩ ࠓ೔͓࿩͍ͨ͠ࣄ طଘͷ8FCαʔϏεΛ"1*Խͤ͞Δ ৽͘͠"1*Λ࡞Δ 8FC"QQ ˞ҎԼ"1*ͱ͍͏දه͸3&45GVM"1*ͱ͠·͢ɻ

Slide 7

Slide 7 text

എܠ

Slide 8

Slide 8 text

͋Δ৽ػೳͷ։ൃͷҝ ৽نͰ"1*Λ։ൃ͢Δࣄʹͳͬͨɻ എܠ

Slide 9

Slide 9 text

࣌ؒ ΍Δ΂͖ࣄ Ϧιʔεఆٛ ΤϯυϙΠϯτఆٛ Ϩεϙϯεͷఆٛ ΤϯυϙΠϯτͷ࣮૷ ࣮૷͢Δલ എܠ

Slide 10

Slide 10 text

εςʔλείʔυ͸ Ͳ͏͢Δͷ͔ ΤϥʔϨεϙϯε͸ Կ͕ฦͬͯ͘Δͷ ͲΜͳΤϯυϙΠϯ τ͕ඞཁͳͷ ϦιʔεԿ͕͋Δͷ ઃܭஈ֊ ࣌ؒ ΍Δ΂͖ࣄ Ϧιʔεఆٛ ΤϯυϙΠϯτఆٛ Ϩεϙϯεͷఆٛ ΤϯυϙΠϯτͷ࣮૷ എܠ

Slide 11

Slide 11 text

εςʔλείʔυ͸ Ͳ͏͢Δͷ͔ ͲΜͳΤϯυϙΠϯ τ͕ඞཁͳͷ σΟϨΫτϦߏ੒͸Ͳ͏͢Δͷ ςετ͸ ࣮૷ஈ֊ طଘͷ%#ʹͲ͏΍ͬͯ߹ΘͤΔͷ ϦιʔεԿ͕͋Δͷ ΤϥʔϨεϙϯε͸ Կ͕ฦͬͯ͘Δͷ ࣌ؒ ΍Δ΂͖ࣄ Ϧιʔεఆٛ ΤϯυϙΠϯτఆٛ Ϩεϙϯεͷఆٛ ΤϯυϙΠϯτͷ࣮૷ എܠ

Slide 12

Slide 12 text

։ൃཁ݅ ɾ%#͸طଘͷ΋ͷΛѻ͏ ɾಠࣗͷςʔϒϧن໿ ɾѻ͏%#͕ͭଘࡏ͢Δ എܠ ɾ3&45GVMͳ"1*Λ৽نͰ։ൃ ۀ຿Ͱ։ൃ͸ະܦݧ

Slide 13

Slide 13 text

"1*։ൃ͸ߟ͑Δࣄ΋ɺ΍Δࣄ΋ଟ͗͢ʜ എܠ

Slide 14

Slide 14 text

͜ͷΑ͏ͳঢ়گͰ΋ ཁ݅Λຬͨͯ͠"1*Λ։ൃ͍ͨ͠ എܠ

Slide 15

Slide 15 text

എܠ

Slide 16

Slide 16 text

എܠ ͳͥ-BSBWFMͳͷ͔ ɾυΩϡϝϯτͷ৘ใྔ͕ଟ͍ɻ3FBE%PVCMFΛݟΕ͹ղܾ͢Δɻ  ࣾ಺Ͱ૬ஊͰ͖Δਓ΋͍Δɻ ɾೝূͱೝՄɾϩάͷಋೖ͸ඞਢͰ͋Γɺͦ͜Ͱ᪴͘ͷ͸ࠔΔ  -BSBWFMʹ͸ඪ४ೝূϥΠϒϥϦͷ1BTTQPSU͕࢖͑Δ ɾڧྗͳσʔλϕʔεΫΤϦʔϏϧμʔ͕͋ΔͷͰɺෳࡶͳ ςʔϒϧεΩʔϚͰ΋ରॲͰ͖Δɻ

Slide 17

Slide 17 text

എܠ ࣌ؒ ΍Δ΂͖ࣄ Ϧιʔεఆٛ ΤϯυϙΠϯτઃܭ Ϩεϙϯεͷઃܭ ΤϯυϙΠϯτͷ࣮૷ ఆٛ ࣮૷

Slide 18

Slide 18 text

ఆٛɾ࣮૷ͷ྆໘͔Β طଘ8FCαʔϏεΛ-BSBWFMͰ "1*Խ͢Δ͓࿩͠·͢ɻ എܠ

Slide 19

Slide 19 text

ΞδΣϯμ

Slide 20

Slide 20 text

ΞδΣϯμ ɾ4XBHHFSͰ"1*ͷυΩϡϝϯτԽ ɾσΟϨΫτϦͷߏ੒Λ੹຿ʹ෼͚ͯΤϯυϙΠϯτΛ࣮૷͢Δɻ ɾطଘʹ%#ͷ࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ5JQT ɾ·ͱΊ

Slide 21

Slide 21 text

4XBHHFSΛ࢖ͬͨ"1*ͷυΩϡϝϯτԽ

Slide 22

Slide 22 text

4XBHHFSΛ࢖ͬͨ"1*ͷυΩϡϝϯτԽ ɾ3&45GVM"1*Λߏங͢ΔͨΊͷΦʔϓϯιʔεͷϑϨʔϜϫʔΫ ɾ+40/΋͘͠͸:".-ܗࣜͰهड़͕Ͱ͖Δ ɾϩʔΧϧͰϞοΫαʔόΛ্ཱͪ͛Δࣄ΋Մೳ

Slide 23

Slide 23 text

4XBHHFSΛ࢖ͬͨ"1*ͷυΩϡϝϯτԽ 4XBHHFS4QFD 4XBHHFS6*

Slide 24

Slide 24 text

4XBHHFSΛ࢖ͬͨ"1*ͷυΩϡϝϯτԽ ͳͥ4XBHHFSΛ࠾༻ͨ͠ͷ͔ ɾҰ൪ͷཧ༝ͱͯ͠͸ɺΫϥΠΞϯτͱαʔόαΠυͷೝࣝΛ߹ΘͤΔҝ ɾ"1*ଆͰఆٛ͢ΔΑΓ΋ΫϥΠΞϯτଆ ࢖͍ਓ ͕ఆٛͨ͠ํ͕ྑ͍ 4XBHHFS BQJWIPHF Λୟ͍ͨΒ ˓˓ͳϨεϙϯε ͕ཉ͍͠ ΫϥΠΞϯτଆ ɾ:".-͸ڞ௨ͰಡΊΔҝɺ͓ޓ͍ʹมߋ΍मਖ਼͕͠΍͍͢ αʔόଆ ˓˓ͳϨεϙϯε ͕ฦͬͯ͘ΔΑ͏ ʹϨεϙϯεΛ૊ ΈཱͯΑ͏

Slide 25

Slide 25 text

4XBHHFSΛ࢖ͬͨ"1*ͷυΩϡϝϯτԽ ɾΤϯυϙΠϯτΛ௥Ճ͢Δ౓ʹίʔυ͕ੌ·͘͡ݟͮΒ͘ͳΔ໰୊ ɾมߋ͠Α͏ʹ΋ɺߦ͙Β͍௒͑ͯ͘Δͱ໨Ͱ௥ͬͯमਖ਼Ͱ͖ͳ͘ͳΔʜ ɾ4XBHHFS1)1΍-4XBHHFS΋ߟ͕͑ͨίʔυͷՄಡੑ͕Լ͕Δ  ͦ΋ͦ΋ΫϥΠΞϯτଆ͕͍͡Εͳ͍ 4XBHHFSͱݴ͑͹ʜ

Slide 26

Slide 26 text

4XBHHFSΛ࢖ͬͨ"1*ͷυΩϡϝϯτԽ JOEFYZNM SFGΛ࢓༷ͯ͠EFpOJUJPOTͱQBUITΛ෼ׂͯ͠؅ཧ͢Δ

Slide 27

Slide 27 text

4XBHHFSΛ࢖ͬͨ"1*ͷυΩϡϝϯτԽ $ tree -I node_modules . ├── definitions │ ├──author.yml ├── index.yml ├── paths │ ├── account │ │ └── authors.yml └── resolve.js ɾEFpOJUJPOTσΟϨΫτϦҎԼʹ.PEFMΛఆٛ͢Δ ɾQBUITσΟϨΫτϦҎԼͷϑΝΠϧʹΤϯυϙΠϯτͷ࢓༷Λఆٛ͢Δ SFGΛ࢓༷ͯ͠EFpOJUJPOTͱQBUITΛ෼ׂͯ͠؅ཧ͢Δ

Slide 28

Slide 28 text

4XBHHFSΛ࢖ͬͨ"1*ͷυΩϡϝϯτԽ SFGΛ࢓༷ͯ͠EFpOJUJPOTͱQBUITΛ෼ׂͯ͠؅ཧ͢Δ JOEFYZNM BVUIPSTZNM QBUITσΟϨΫτϦ BVUIPSZNM EFpOJUJPOTσΟϨΫτϦ

Slide 29

Slide 29 text

4XBHHFSΛ࢖ͬͨ"1*ͷυΩϡϝϯτԽ ͜ΕΒΛ݁߹ͤͯ͞JOEFYZNMΛ࡞੒͢Δ const resolve = require('json-refs').resolveRefs; const YAML = require('js-yaml'); const fs = require('fs'); const root = YAML.load(fs.readFileSync('index.yml').toString()); const options = { loaderOptions : { processContent : function (res, callback) { callback(undefined, YAML.safeLoad(res.text)); } } }; resolve(root, options).then(function (results) { console.log(YAML.dump(results.resolved)); }); node resolve.js > index_all.yml # ϑΝΠϧ໊͸೚ҙ SFTPMWFKT ৄࡉ4XBHHFS༻ϑΝΠϧΛ෼ׂͯ͠هड़͠Α͏ ෼ׂ͞ΕͨϑΝΠϧ͕౷߹͞Εͯग़ྗ͞ΕΔ

Slide 30

Slide 30 text

੹຿Λ෼͚ͨσΟϨΫτϦߏ੒

Slide 31

Slide 31 text

3PVUFS ᶃ(&5BQJWIPHF .JEEMFXBSF 3FRVFTU $POUSPMMFS 3FTQPOTF .PEFM ᶄೝূ ᶅόϦσʔγϣϯ ᶆ %#ૢ࡞ ϨεϙϯεΛ࡞੒ ϨεϙϯεΛฦ͢ ɾͭͷΤϯυϙΠϯτʹରͯ͠ɺͭͷ$POUSPMMFSͰରԠΛߦ͏ ɾ(&5BQJWIPHF )PHF$POUSPMMFS ˞ఏڙ͢ΔαʔϏεͷ؀ڥʹΑͬͯมΘΔҝɺ͋͘·ͰͭͷྫͰ͢ʂ ɾ1045BQJWIPHF ੹຿Λ෼͚ͨσΟϨΫτϦߏ੒ #FGPSF

Slide 32

Slide 32 text

├── app ├── Http │ ├── Controllers │ │ └── HogeController.php └── Requests │ └── HogeRequest.php └── Hoge.php ├── routes ├── api.php ੹຿Λ෼͚ͨσΟϨΫτϦߏ੒

Slide 33

Slide 33 text

SPVUFTBQJQIQ BQQ)UUQ)PHF$POUSPMMFSQIQ ੹຿Λ෼͚ͨσΟϨΫτϦߏ੒ Route::prefix('api/v1')->group(function () { Route::get('/hoges', 'Hoge@index'); Route::get(‘/hoges/1', 'Hoge@show'); Route::post(‘/hoges', 'Hoge@store'); Route::put(‘/hoges/1', 'Hoge@update'); Route::delete(‘/hoges/1', 'Hoge@delete'); });

Slide 34

Slide 34 text

3PVUFS ᶃ(&5IPHF .JEEMFXBSF 3FRVFTU $POUSPMMFS 3FTQPOTF .PEFM ᶄೝূ ᶅόϦσʔγϣϯ ᶆ %#ૢ࡞ ϨεϙϯεΛ࡞੒ ϨεϙϯεΛฦ͢ ɾஈʑͱ$POUSPMMFS͕ංେԽͯ͘͠Δͷ͕ݟ͑ͯ͘Δʜ ੹຿Λ෼͚ͨσΟϨΫτϦߏ੒

Slide 35

Slide 35 text

੹຿Λ෼͚ͨσΟϨΫτϦߏ੒ Ͳ͏ͨ͠΋ͷ͔ʜ

Slide 36

Slide 36 text

3PVUFS ᶃ(&5BQJWIPHF .JEEMFXBSF 3FRVFTU $POUSPMMFS 3FTQPOTF .PEFM ᶄೝূ ᶅόϦσʔγϣϯ ᶇ ϨεϙϯεΛฦ͢ 4FSWJDF ɾϏδωεϩδοΫΛ"QQ4FSWJDF΁੾Γग़͢ ɾ(&5BQJWIPHF )PHF$POUSPMMFS!JOEFY ᶆ %#ૢ࡞ ϨεϙϯεΛ࡞੒ ɾ$POUSPMMFSʹ͸ϏδωεϩδοΫΛॻ͔ͣʹ)551ͷؔ৺ࣄʹूதͤ͞Δɻ ɾϧʔςΟϯάαʔϏεΫϥε -JTU4FSWJDFQIQ ɾ1045BQJWIPHF )PHF$POUSPMMFS!TUPSF $SFBUF4FSWJDFQIQ ੹຿Λ෼͚ͨσΟϨΫτϦߏ੒ "GUFS

Slide 37

Slide 37 text

├── app ├── Http │ ├── Controllers │ │ └── HogeController.php └── Requests │ └── HogeRequest.php └── Hoge.php ├── Servicies └── Hoge │ └── ListService.php #GET Ұཡ │ └── ShowService.php #GET ৄࡉ │ └── CreateService.php #POST │ └── DeleteService.php #DELET ├── routes ├── api.php ੹຿Λ෼͚ͨσΟϨΫτϦߏ੒

Slide 38

Slide 38 text

BQQ4FSWJDFT)PHF-JTU4FSWJDFQIQ ੹຿Λ෼͚ͨσΟϨΫτϦߏ੒ ɾ"QQ4FSWJDFͰΤϯυϙΠϯτΛୟ͍ͨࡍͷϏδωεϩδοΫͷॲཧΛ٧ΊΔ

Slide 39

Slide 39 text

੹຿Λ෼͚ͨσΟϨΫτϦߏ੒ ɾ$POUSPMMFSͰ͸͋͘·ͰϨεϙϯεΛKTPOͰฦ͚ͩ͢ʹప͢Δ

Slide 40

Slide 40 text

%#ͷ࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ

Slide 41

Slide 41 text

wѻ͏%#͕ෳ਺ଘࡏ͢Δɻ w&MPRVFOUͰΞΫηαΛఆٛͯ͠ΫΤϦʔύϥϝʔ λ͔Βडऔͬͨ஋Λࣗಈతʹม׵͢Δɻ %#ͷ࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ

Slide 42

Slide 42 text

%#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ ѻ͏%#͕ෳ਺ଘࡏ͢Δ৔߹ FOWͰઃఆΛ௥Ճ͢Δ # 1ͭΊͷDB DB_CONNECTION=mysql1 DB_HOST=database DB_PORT=3306 DB_DATABASE=database_1 DB_USERNAME=hoge DB_PASSWORD=secret # 2ͭΊͷDB DB_CONNECTION_2=mysql2 DB_HOST_2=database DB_PORT_2=3306 DB_DATABASE_2=database_2 DB_USERNAME_2=fuga DB_PASSWORD_2=secret FOW

Slide 43

Slide 43 text

%#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ DPOpHaEBUBCBTFQIQʹઃఆΛ௥Ճ͢Δ # 2ͭΊͷDBͷઃఆΛ௥Ճ͢Δ 'mysql2' => [ 'driver' => 'mysql', 'host' => env(‘DB_HOST_2‘, '127.0.0.1'), 'port' => env(‘DB_ACC_PORT_2', '3306'), 'database' => env(‘DB_DATABASE_2', 'forge'), 'username' => env(‘DB_USERNAME_2', 'forge'), 'password' => env(‘DB_PASSWORD_2', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8', 'collation' => 'utf8_general_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], DPOpHaEBUBCBTFQIQ ѻ͏%#͕ෳ਺ଘࡏ͢Δ৔߹

Slide 44

Slide 44 text

%#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ $date = DB::connection(env(‘DB_CONNECTION_2’)) ->table(’t_name’) ->get() NZTRMͷઃఆͰ%#ʹ઀ଓͨ͠ঢ়ଶͰσʔλΛऔಘ͢Δࣄ͕ՄೳͱͳΔ FOW ѻ͏%#͕ෳ਺ଘࡏ͢Δ৔߹

Slide 45

Slide 45 text

˞FOW Λݺͼग़͢ࡍͷ஫ҙ %#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ 

Slide 46

Slide 46 text

%#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ ѻ͏%#͕ෳ਺ଘࡏ͢Δ৔߹ ৄࡉ:Laravelͷ .env ͷ஋͸config()ܦ༝Ͱ࢖͏ɻ

Slide 47

Slide 47 text

%#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ ˞։ൃ؀ڥͰ͸ྑ͍͕DPOpHDBDIFͨ͠ঢ়ଶͰͷຊ൪؀ڥʹ͓͍ͯFOW ͕஋Λฦ͞ͳ͍ɻ ѻ͏%#͕ෳ਺ଘࡏ͢Δ৔߹ ৄࡉ:Laravelͷ .env ͷ஋͸config()ܦ༝Ͱ࢖͏ɻ null "Full" php artisan config:cache FOW Ͱݺͼग़͢ͱOVMM͕ฦͬͯ͘Δɻ

Slide 48

Slide 48 text

%#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ DPOpH Λ࢖ͬͯݺͼग़͢Α͏ʹ͢Δ ѻ͏%#͕ෳ਺ଘࡏ͢Δ৔߹ Psy Shell v0.9.8 (PHP 7.2.1 — cli) by Justin Hileman >>> dump(config('database.connections.mysql2')) array:12 [ "driver" => "mysql" "host" => "database" "port" => "3306" "database" => "database_2" "username" => "fuga" "password" => "secret" "unix_socket" => "" "charset" => "utf8" "collation" => "utf8_general_ci" "prefix" => "" "strict" => true "engine" => null ]

Slide 49

Slide 49 text

%#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ DPOpH Λ࢖ͬͯݺͼग़͢Α͏ʹ͢Δ ѻ͏%#͕ෳ਺ଘࡏ͢Δ৔߹ $date = DB::connection(config(‘database.connections.mysql2’)) ->table(’t_name’) ->get()

Slide 50

Slide 50 text

wѻ͏%#͕ෳ਺ଘࡏ͢Δɻ w&MPRVFOUͰΞΫηαΛఆٛͯ͠ΫΤϦʔύϥϝʔ λ͔Βडऔͬͨ஋Λࣗಈతʹม׵͢Δɻ %#ͷ࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ

Slide 51

Slide 51 text

%#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ +------------------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +------------------------+--------------+------+-----+-------------------+-----------------------------+ | user_id | int(20) | NO | PRI | NULL | auto_increment | | name | varchar(32) | YES | MUL | NULL | | | email | varchar(255) | YES | MUL | NULL | | | state | tinyint(4) | YES | MUL | NULL | | | make_date | datetime | YES | MUL | NULL | | | update_date | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +------------------+--------------+------+-----+-------------------+-----------------------------------+ U@VTFSςʔϒϧ TUBUF༗ޮ TUBUFແޮ (&5BQJVTST TUBUFFOBCMFE (&5BQJVTST TUBUFEJTBCMFE TUBUFFOBCMFE͸ͳ͍Αʂ (&5BQJVTST TUBUFBMM "1* ΫϥΠΞϯτ

Slide 52

Slide 52 text

%#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ ΞΫηαΛ࢖ͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ ৄࡉ-BSBWFM&MPRVFOUɿϛϡʔςλ

Slide 53

Slide 53 text

ΞΫηαΛ࢖ͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ %#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ (&5BQJVTST TUBUFFOBCMFE TUBUFFOBCMFE ΫϥΠΞϯτ "1* TUBUF %# ࠓճͷέʔεͰ͸TUBUFΛม׵͍ͨ͠ͷͰΞΫηαΛ࡞Δ HFU4UBUF"UUSJCVUF $user = App\User::all(); # state=1ͷuserΛऔಘ͢ΔΑ͏ʹࣗಈͰม׵͢Δ $firstName = $user->state(’enabled’)->get()

Slide 54

Slide 54 text

%#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ ΞΫηαΛ࢖ͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ

Slide 55

Slide 55 text

$users = User::where('user_id', $this->request->userId) ->state(User::toStateKey($state)) ->limit($limit) ->offset($offset) ->get(); %#࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ ΞΫηαɾϛϡʔςʔλΛ࢖͏ࣄͰΫΤϦʔύϥϝʔλͰडऔͬͨ஋Λ ࣗಈͰ&MPRVFOͰ࢖͑ΔΑ͏ʹͯ͠σʔλΛऔಘ͢Δࣄ͕Ͱ͖Δɻ TUBUFFOBCMFE͕ૹΒΕͯ͘ΔͱTUBUFʹม׵͞ΕΔ TUBUFEJTBCMFE͕ૹΒΕͯ͘ΔͱTUBUFʹม׵͞ΕΔ TUBUFBMM͕ૹΒΕͯ͘ΔͱɺԿ΋͠ͳ͍ͷͰࣗಈͰ TUBUFPSTUBUFͷσʔλΛऔಘ͢Δɻ ΞΫηαΛ࢖ͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ

Slide 56

Slide 56 text

wѻ͏%#͕ෳ਺ଘࡏ͢Δɻ w&MPRVFOUͰΞΫηαΛఆٛͯ͠ΫΤϦʔύϥϝʔ λ͔Βडऔͬͨ஋Λࣗಈతʹม׵͢Δɻ %#ͷ࢓༷ʹ߹Θͤͯ-BSBWFMଆͰௐ੔͢Δ

Slide 57

Slide 57 text

·ͱΊ

Slide 58

Slide 58 text

·ͱΊ ɾ3&45GVM"1*Λ͔Β࡞੒͢Δͷ͸େมͳͷͰɺ·ͣ͸ ΫϥΠΞϯτଆͱ૬ஊ͠ͳ͕ΒϨεϙϯεΛ͔ͬ͠Γઃܭ͢Δɻ ɾطଘͷ%#ͷ࢓༷ʹରͯ͠΋-BSBWFMͳΒɺඋΘͬͯΔػೳΛ࢖͍͜ͳ͢ ɹ͚ͩͰ͋Δఔ౓ͷࣄ͸Ͱ͖Δɻ ɾͪΐͬͱ೉͍͠ࣄΛ΍Δ৔߹͸੹຿ΛΘ͚ΔΑ͏ʹ͢Δɻ

Slide 59

Slide 59 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ ϓϩϑΟʔϧGFOEP1SPpMF