Slide 1

Slide 1 text

ηογϣϯͷτʔΫηογϣϯ w V[VMMB w ʲඇެࣜʳ1)1ΧϯϑΝϨϯε෱Ԭɾલ೔.FFUVQ w 8F8PSLେ໊ 135*.&4෱ԬΦϑΟε w w IUUQTQSUJNFTDPOOQBTTDPNFWFOU

Slide 2

Slide 2 text

ࣗݾ঺հ w JEV[VMMB 9 (JU)VC :PVUVCF FUDʜ w ྲྀ͠ͷ1)1FS w 135*.&4ʹ͓͍ͯ͸ۀ຿ҕୗͰԿͰ΋԰ w ͜ͱ͠͸΄΅ಉ໊τʔΫམͪͨͷͰɺ ͜͜Ͱڙཆ ܰྔԽ൛Ͱ͢

Slide 3

Slide 3 text

%*4$-"*.&3 w ͜Ε͸ࢲͷײ૝Ͱ͢ɺए͍ਓ͸-BSBWFM౳ʹै͍·͠ΐ͏ w ͪͳΈʹ-BSBWFM΋͜ͷ໰୊͸͋Γ·͢ w ࠓ͏·͘ಈ͍͍ͯΔ΋ͷΛແཧʹॻ͖׵͑Δͷ͸େมͰ͢ w ݱ৔ʹΑͬͯɺ߹͏߹Θͳ͍͸͋Γ·͢ w ઌഐ΍ɺίʔυͷ໘౗Λ࠷ޙ·ͰΈΔαϜϥΠʹै͍·͠ΐ͏

Slide 4

Slide 4 text

ηογϣϯͱ͸ʁ w εςʔτϨε ঢ়ଶ ͳIUUQͷ௨৴ʹεςʔτΛ࣋ͪࠐΉ෺ w ʁʁ )551௨৴ͷఆٛΛड़΂Α ࢲʮΨϠͯ͘͠Εʯ w ͨͱ͑͹ϩάΠϯঢ়ଶͳͲΛѻ͏ w ΢ΣϒΞϓϦέʔγϣϯʹ͓͍ͯ͸ɺ΄΅ඞਢ w ʁʁʮݱࡏ͸+XUͳͲ͕͋Δʯ ʁʁʮϓϩͷํ͸ɺʰ͍ͭ͜ղͬͯͳ͍ͳʱͳͲͱ ϋογϡλάQSUJNFT@EFWͰπΠʔτ͍ͯͩ͘͠͞ʯ

Slide 5

Slide 5 text

εςʔτ ঢ়ଶ ͱ͸ʁ w $_GET['page'] ݱࡏͷϖʔδ ౳΋εςʔτͱ͍͑Δ w ͨͩɺͦΕ͸ൿಗ৘ใͰ͸ແ͍ ࣄ͕ଟ͍ w 63-͸γΣΞ͞ΕͨΓϩάͳͲʹग़ͯ͠·͏͕͔·Θͳ͍ w ͍ͬͦ63-ʹ͋ͬͨ΄͏͕γΣΞग़དྷͯศར w 1045΋ɺอ࣋ͯ͠JOQVUUZQFIJEEFO͸εςʔτ w ֬ೝը໘ͱͦͷઌͷૹ৴ը໘ͳͲ w ૹ৴ऀͳΒ஌͍ͬͯͯ΋͔·Θͳ͍

Slide 6

Slide 6 text

ػີɾൿಗ͕ඞཁͳεςʔτ w ্هͱҟͳΓɺൿಗ͕ඞཁͰɺվ͟Μɾِ଄ͤͨ͘͞ͳ͍৘ใ΋͋Δ w ྫݱࡏϩάΠϯதͷ ಺෦తͳ Ϣʔβʔ*% w γϣοϐϯάΧʔτ৘ใͳͲɺᴥᴪ͕ڐ༰Ͱ͖ͳ͍΋ͷ w վ͟Μͤͨ͘͞ͳ͍ɺڞ༗͠ͳ͍৘ใΛηογϣϯʹೖΕΔ w ҆શͳঢ়ଶʹͳΔ

Slide 7

Slide 7 text

҆શͳঢ়ଶͱ͸ʁ w ໪࿦Θ͟ͱ΍Ε͹ผ͕ͩ w ֎෦͔Β w ِ଄Ͱ͖ͳ͍ w վ͟ΜͰ͖ͳ͍ w Ͱ͖Ε͹ ӾཡɾਪଌͰ͖ͳ͍ w ֎෦ͱ͸ɺ৴པ͞Εͨαʔόʔ಺෦Ҏ֎Λࢦ͢ w ֎෦͸ୈࡾऀͷΈͳΒͣɺΞΫηε͢ΔϢʔβʔ΋ؚΉ

Slide 8

Slide 8 text

҆શʹ৘ใΛอଘ͢Δํ๏ w େ͖͘෼͚ΔͱछྨʹͳΔ w ҉߸Խ͞ΕͨจࣈྻΛ$PPLJF΍+XUʹ࣋ͭ w ͋Μ·Γී௨ͷ1)1Ͱ͸࢖ΘΕͳ͍ w ৘ใΛαʔόʔʹอଘ͢Δ w ͕ͬͪ͜1)1ͷηογϣϯͷ΍ͭ

Slide 9

Slide 9 text

1)1ͷηογϣϯ

Slide 10

Slide 10 text

1)1ͷ࠷ߴػೳ$_SESSION w 1)1ʹ͸ɺ؆୯ศརͳηογϣϯػೳ͕࠷ॳ͔Β͋Δ w ʮ$PPLJF ౳ Ͱ*%Λ࣋ͪɺ৘ใ͸αʔόʔʹอଘ͢ΔʯλΠϓ w ଞݴޠʹൺ΂ɺ࢖͍࢝ΊΔͷ͕ɺ͘͢͝؆୯Ͱ جຊ ҆શ w ετϨʔδͷ੾Γସ͑΋؆୯ pMFɺSFEJTɺNZTRMɺࣗ࡞ʜ w Ωϟογϡͱͯ͠΋࢖͑ͪΌͬͨΓͳΜͩΓ w ग़དྷΔࣄʹ΄΅੍ݶ͕ͳ͍ɺศར͗͢ʂ ʁʁ

Slide 11

Slide 11 text

ϩάΠϯػೳ স Λ࣮૷ͯ͠ΈΑ͏ ʁ session_start(); // === function getUserIdOrFalse($id, $pass){ // ద࣮ٓ૷ͯͩ͋͘͠͠() return $id==="user"&&$pass==="pass" ? 1 : false; } if($user_id = getUserIdOrFalse(@$_POST['id'], @$_POST['pass'])){ $_SESSION['user_id'] = $user_id; } // === if(@$_SESION['user_id']){ // ͜ͷˏͷҙຯ͕෼͔Δਓ͸खΛ͍͋͛ͯͩ͘͞ // ϩάΠϯதʂ }

Slide 12

Slide 12 text

ศརʂʂʂ w 1)1͸ϩάΠϯΛଈ࣮૷ग़དྷͯศར w $_SESSION͸୯ͳΔ ʁ ഑ྻͳͷͰɺෳࡶͳ஌ࣝෆཁʂ session_start(); //== $_SESSION['name'] = getUserName($user_id); //== echo $_SESSION['name'] ?? ’ະϩάΠϯ’;

Slide 13

Slide 13 text

ศརJT᠘

Slide 14

Slide 14 text

ԿͰ΋ೖΔηογϣϯ $_SESSION['last_login_date_time] = new DateTime(); w ͳΜͱɺΦϒδΣΫτ͕ೖΕΒΕΔ Ұ෦໭ͤͳ͍΋ͷ΋͋Δɺ%#઀ଓͱ͔ w एऀʮศརʂʂʂʂʂʯ

Slide 15

Slide 15 text

ԿͰ΋ೖΔͱ͍͏͜ͱ͸ԿͰ΋ೖΔ w ͨͱ͑͹ɺ$.4΍Χʔτͷ৘ใͱ͔΋ೖΔ $_SESSION['login_user'] = new LoginUser(256); ͱ͔ $_SESSION['cart_items'][] = new CartItem(134); w ʁʁʁʮ%50ʹ͠·ͨ͠ʂʯࢲʮ͜Ε͸ʜ͏Μʜͪΐͬͱ͕ͪ͏͔ͳʜʯ w Ұݟศར͕ͩɺΘ͔ͬͯ΍Βͳ͍ͱϩΫͳ͜ͱʹͳΒͳ͍

Slide 16

Slide 16 text

େ఍࠷ॳʹ౿Ή໰୊ w ҉໧ʹεΩʔϚϨε%#ͱ͔ͯͭ͠ΘΕ͍ͯΔ͜ͱ͕ଟ͍ w FY%#ʹΞΫηε͢Δͷ໘౗ͩ͠ɺ໊લΛೖΕ͓ͯ͜͏ w εΩʔϚ͕มΘ͔ͬͨΒɺ૸ࠪతʹશσʔλΛमਖ਼ͱ͔ग़དྷͳ͍ w ͢Ͱʹଘࡏ͢Δηογϣϯ͸ίʔυมߋͱؔ܎ͳ͍ w ͦΜͳ͜ͱͨ͠ΒϢʔβʔӨڹ͕ग़Δ w ࢦఆϢʔβʔͷΈڧ੍ϩάΞ΢τͱ͔΋ ެࣜʹ͸ ͳ͍

Slide 17

Slide 17 text

ݱ࣮ੈքͷཁ݅ w ʁʁʮΫϥε΍%50΋ೖΔ͔Βɺ͜ΕʹҰ࣌తͳ৘ใΛ͍ΕΑ͏ʯ w ʁʁʮ͜Ε΋ʯʁʁʮΑ͠଍ͧ͢ʯ w ࣮͸ɺηογϣϯͷण໋ཁ݅͸௕͍ ͜ͱ͕ଟ͍ w ʮ೥ʂʯͱ͔ݴΘΕΔ͜ͱ΋͋Δ w ͠͹Βͨ͘͠ޙͰʮJEͬͯͳΜͷJE͔ͩΘ͔Βͳ͍͔ΒϦϑΝΫλ͠Α͏ʂʯ w ͢Δͱʜ

Slide 18

Slide 18 text

Ωʔ໊มߋͳͲϚΠάϨʔγϣϯ΋ͭΒ͍ w ʮ$_SESSION['id']Λ['user_id']ʹ͠Α͏ʯ ʮίʔυΛॻ͖׵͑ͯσϓϩΠͩʂʯ PHP Warning: Undefined array key "user_id" in ʙ w ʮΊͬͪΌΤϥʔग़Δʜͧʜʁʯ w ઌഐʮ͜͜͸͍͡Βͳ͍Ͱ͍ͩ͘͞ʯ ޙഐʮ͸͍ʯ

Slide 19

Slide 19 text

ղܾ࡞͸ʁ w Ұ୴ޙड़͠·͢

Slide 20

Slide 20 text

ͦͯ࣌͠͸ྲྀΕΔ ͦͯ࣌͠͸ྲྀΕΔ

Slide 21

Slide 21 text

݁Ռ w ʁʁʮҰମ͜ͷ$_SESSION͸Ͳ͏͍͏ܗͳΜͩʜ ͜ͷ%50͸ࣺ͍͍ͯͯͷ͔ʜʁʯ w ఆٛͷͳ͍഑ྻ͸த਎͕%50Ͱ͋ͬͯ΋ɺͱʹ͔͘Ϡό͍ w 1)1ͷηογϣϯ͸શ෦ BUPNJDʹ ૸ࠪมߋ ϚΠάϨʔγϣϯ ͢Δ͜ͱ͸ جຊతʹ͸ Ͱ͖ͳ͍ ͓͡͞Μʹ͸ඞࡴཪٕ͸͋Δ w ͳͷͰϚΠάϨʔγϣϯ ΍૟আ ͕Ͱ͖ͳ͍ w ઌഐʮ͜͜͸͞ΘΒͳ͍Ͱ͓͍͍ͯͩ͘͞ʯ ޙഐʮഐʯ

Slide 22

Slide 22 text

%50͸ۜͷ஄ؙͰ͸ͳ͍ w ਖ਼͍͑͘͠͹ɺ͜͜Ͱ͸࢖͍ํΛ·͕͍ͪ͑ͯΔͷ͕ͩ w શ෦Ұݸͷ%50ʹ͢Δͱେମฏ࿨͕๚ΕΔɺ ͷ͕ͩɺͦΕͷ࢖͍ํ΋ؒҧ͍͑ͯΔ͜ͱ͕͋Δ w ͷ͕ͩɺ%50Ͱอଘ͢Δͷ͸࣮͸Ξϯνύλʔϯ w ʮ഑ྻʹͯ͠ɺ%50ʹͯ͠ɺอଘ࣌ʹ͸഑ྻʹ͢Δʯͷ͕ฏ࿨

Slide 23

Slide 23 text

ྫ new $session_instance = new MySession();//Ͱɺ։࢝͢Δͱͯ͠ # NG (SessionͷதʹੜͷΫϥεΠϯελϯε) $_SESSION['my_session'] = $session_instance; // อଘ $session_instance = $_SESSION['my_session']; // औΓग़͠ # Better (Sessionͷத͸Ϧςϥϧͷ഑ྻ) $_SESSION['my_session'] = $session_instance->toArray(); // อଘ $session_instance = new MySession($_SESSION); // औΓग़͠

Slide 24

Slide 24 text

ͳͥͳͷ͔ʁ w ΫϥεΛ͍͡Δͱ෮׆Ͱ͖ͳ͍

Slide 25

Slide 25 text

session_start(); class A { public int $id = 1; } $a = $_SESSION['a'] ?? new A(); $a->id = 123; $_SESSION['a'] = $a;

Slide 26

Slide 26 text

"Λมߋͯ͠ΈΔ class A { public int $id = 1; } ↓ όʔδϣϯΞοϓͰϓϩύςΟ͕૿͑Δ class A { public int $id = 1; public int $name = 'taro'; }

Slide 27

Slide 27 text

΋Ͳͤͳ͘ͳΔ Fatal error: Cannot use string as default value for property A::$name of type int in /.../some.php on line 7 w 1)1VOTFSJBMJ[Fͷ࢓༷Ͱ͜͏ͳ͍ͬͯΔ

Slide 28

Slide 28 text

݁ՌɺΑ͋͘Δ෩ܠ w ʮ։ൃ؀ڥͰ͸͏͍ͨ͝ΜͰ͚͢ͲͶʯ w ʮΫοΩʔফͨ͠Β ࠶ϩάΠϯͨ͠Β ௚Γ·͢ʂʯ w ·͋͜Ε΋खͰ͸͋Δ͕ʜ w ˏͰѲΓͭͿͯ͠ɺ࠶࡞੒͢Δͷݟͨ͜ͱ͕͋Δ w ͔͜͠͠Ε͸'BUBMͩͧਖ਼ؾʹͳͬͯ΄͍͠

Slide 29

Slide 29 text

ϚΠάϨʔγϣϯΛͪΌΜͱॻͨ͘Ίʹ w ഑ྻ౳ͷܗͰอଘ͓ͯ͘͠ w ͦΕΛຖճ%50ʹ࠶Ϛοϓ͢Δ w %50ʹ͸όʔδϣϯ൪߸ΛຒΊࠐΜͰ͓͍ͯɺޓ׵ੑ͕ͳ͘ͳͬͨΒഁغ͢Δ w ͋Δ͍͸ϚΠάϨʔγϣϯ͢Δ࢓૊Έ 5SBOTGPSNFS Λ࡞Δ w ཁΒͳ͍σʔλ͕ফ͠ɺඞཁͳσʔλΛ௥Ճ w όʔδϣϯΛΈͯɺաڈͷϑΥʔϚοτ͔Βม׵

Slide 30

Slide 30 text

͜͏ͳΔ ૿͑Δ͚ͩͳΒ class Session { public function __construct( public ?int $id = null, public ?string $name = '', ){} public function _toArray(){ return (array)$this; // ΋ͬͱ͜͜͸ཱ೿ʹॻ͘΂͖ } public function __destruct(){ $_SESSION['session'] = $this->_toArray(); session_commit(); // খωλ͕ͩɺ͜Ε͕ͳ͍ͱอଘ͞Εͳ͍͜ͱ͕͋Δ } } ͨͩ͠ɺ͜Ε͸͓͡ςΫͰ͢ਅࣅΔͳ

Slide 31

Slide 31 text

ݱ࣮͸΋͏ͪΐͬͱෳࡶͳͷͰ w ΍΍͍͜͠ྫΛ΋͏ͪΐͬͱग़͠·͢ w ม׵Λϝιουʹ͖Γ͍ͩͯ͠Δ w όʔδϣϯ͕౸ୡ͢Δ·Ͱϧʔϓͤ͞Δ w ͱ͍ͬͨྫ

Slide 32

Slide 32 text

ηογϣϯͷ%50ྫ class MySession { const LATEST_VERSION = 3; public function __construct( public int $version, public int $user_id, public int $account_id, public string $status, public string $name, ) {} }

Slide 33

Slide 33 text

// ͋Γ͏ΔΑ͏ͳɺηογϣϯͷܗঢ় $session_1 = [ "version" => 1, "id" => 123 ]; $session_2 = [ "version" => 2, "user_id" => 123, "account_id" => 123, "status" => 'active' ]; $session_3 = [ "version" => 3, "user_id" => 456, "account_id" => 456, "status" => 'active', "name" => 'John Doe' ];

Slide 34

Slide 34 text

class SessionTransformer { public function __construct(private PDO $pdo){} // όʔδϣϯ1ͷηογϣϯΛόʔδϣϯ2ͷܗঢ়ʹม׵͢ΔελςΟοΫϝιου public static function transformVer1ToVer2(array $session) { return [ 'version' => 2, 'user_id' => $session['id'], // ϦωʔϜ ͍ͯ͠Δ 'status' => 'active' // v1ʹͳ͍PropΛσϑΥϧτΛೖΕΔέʔε ]; } // ಉɺV2 to V3 public static function transformVer2ToVer3($session) { return [ 'version' => 3, 'user_id' => $session['user_id'], 'status' => $session['status'], 'name' => User::getName($pdo, $session['user_id']), // DBҾ͘ ]; } // ࣍ͷϖʔδʹͭͮ͘

Slide 35

Slide 35 text

ϧʔϓͯ͠ϚΠάϨʔγϣϯ͍ͯ͘͠ function transformSession(array $session) :MySession { // ࠷৽൛·Ͱϧʔϓ͢Δ while ($session['version'] < MySession::LATEST_VERSION) { $session = match ($session['version']) { 1 => SessionTransformer::transformVer1ToVer2($session), 2 => SessionTransformer::transformVer2ToVer3($session), // ϚΠάϨͰ͖ͳ͍ͳΒɺ֎෦ͰϩάΞ΢τѻ͍͢ΔͳͲ͢Δ default => throw new BrokenSessionException('boo'), }; } // লུ͢Δ͕ɺnewͰ͖ͳ͍৔߹΋ΤϥʔॲཧΛ return new MySession(...$session); }

Slide 36

Slide 36 text

͕Μ͹ͬͯΈ͕ͨʜ w ΍΍͗͜͢͠Δʂͦ΋ͦ΋յΕ΍͍͢ʂʂ w ʁʮ੾Γ໭ͤΔͷʁʯࢲʮ΢οʯ w ͜͏͍͏ͷ͸ɺ%#ʹߏ଄Խͯ͠ೖΕͨ΄͏͕Α͍ Ωʔ͸Ϣʔβʔ*%΍ηογϣϯ*%ͱͯ͠૊Ή w %#ͳΒී௨ͷ࡞๏ͰϚΠάϨʔγϣϯͰ͖·͢ΑͶʁ w ͨͩɺηογϣϯ Ϣʔβ ਺͕ଟ͗͢Δͱେม͗͢Δͱ͍͏͜ͱ΋͋ΔΜ͢Α Ͷ w ʁʮ΍͸Γ͞ΘΒͳ͍΄͏͕ฏ࿨ͳͷͰ͸ʁʯ

Slide 37

Slide 37 text

%#ͷετϥςδͷଞͷ͏Ε͍͠఺ w ϚϧνσόΠεαϙʔτෳ਺σόΠεؒͰಉ͡σʔλΛར༻Մ $PPLJFͰͳ͘ɺϢʔβʔ*%Ͱ൑ఆ͢ΔͷͰ w ڧ੍ϩάΞ΢τ%#ઃܭ࣍ୈͰɺಛఆϢʔβʔࢦఆͷڧ੍ϩάΞ΢τ͕Մೳ w ʁʁʮී௨ͷ$_SESSIONͰ΋Ͱ͖Δ͕ʁʯࢲʮͦΕଟ෼݁ہ%#Έͯ·͢Α Ͷʯ w ී௨ͷ࡞Γͩͱɺڧ੍ϩάΞ΢τͬͯ݁ߏ໘౗ͬ͢ΑͶ w ܽ఺͸ɺ%#͸࡟আ͠ͳ͍ͱফ͑ͳ͍ࣄ ແݶʹଠΔɺҊ֎%&-&5&͸ॏ͍

Slide 38

Slide 38 text

༨ஊ%#༏ઌ͔Ϟσϧ༏ઌ͔ w ʮ%#ͳΒɺ഑ྻͰ͍͍Μ͡ΌͶʁʯ w ݁࿦͔Β͍͑͹ɺ྆ํ΍Ζ͏ w %50Λ੔උ͢Ε͹੩తղੳ͕͔ͬ͠Γͯ͠ίʔυ͕҆ఆ͢Δ w ετΞʹ͍ͭͯ͸%#Λத৺ʹ͢Ε͹ɺϚΠάϨʔγϣϯ͕҆ఆ͠΍͍͢ σϝϦοτ͸͖ͬ͞ͷ௨Γ w ૒ํΛ͔ͬ͠Γͤ͞Δ͜ͱ͕ॏཁͰ͸ͳ͍͔

Slide 39

Slide 39 text

·ͱΊ w $_SESSION͸1)1ͷศརηογϣϯػೳͰɺεςʔτ؅ཧʹ΋࢖͑ͪΌ͏ w ʮεςʔτʯͷ࣮૷ํ๏͸৭ʑ͋Δ͸͕ͣͩɺ҆қʹྲྀΕ͕ͪ w ͱΓ͋͑ͣɺ։ൃͰ͖ͪΌ͏ɾۮવಈ͍ͪΌ͏໰୊ɻ w ण໋͕ܰࢹ͞Ε͕ͪɺΞϓϦέʔγϣϯͷण໋ΛͪΌΜͱߟ͑Α͏ w ܕΛ෇͚Δ࣌୅ʹ͓͍ͯɺ΍͸Γಈతͳ഑ྻ͸͚͍ͨ͞ΑͶʂ ิ׬΋Ͱ͖Δ͠ w ޙ͔Β੔ཧ͢ΔΑ͏ͳϚΠάϨʔγϣϯ͸૬౰͖ͼ͍͠ͷͰɺઌʹ͔Μ͕͑Α͏

Slide 40

Slide 40 text

͓·͚ w ηογϣϯؔ࿈ͷখωλ

Slide 41

Slide 41 text

session_start࣌ͷϑοΫ͕ͳ͍ w ͜Ε͕༗Δͱ݁ߏศརͩͬͨͷ͕ͩ ภͬͨײ૝ w JOJͰઃఆ͍ͯ͠Δ৔߹ʹ͸ҧ͏͕ ɺTFTTJPO͸໌ࣔతʹ։࢝͢Δඞཁ͕͋Δͷ Ͱɺ ͦ͜Ͱ8SBQ͢Δͱྑ͍ ҟ࿦͸͋Δ w ͋Δ͍͸ɺauto_prepend_fileͰڧ੍తʹηογϣϯΛ։͚ͯɺ͍ͬͯ͡ɺ ด͡Δͱ͍͏ςΫ΋͋Δ

Slide 42

Slide 42 text

Α͋͘Δແବ w ͱΓ͋͑ͣTUBSU͢Δͷ͸ɺΞϯνύλʔϯ

Slide 43

Slide 43 text

๲ΕΔηογϣϯ register_shutdown_function(function(){ if( session_status() === PHP_SESSION_ACTIVE && isset($_SESSION) && is_array($_SESSION) && count($_SESSION) === 0 ){ @session_destroy(); //ۭͷηογϣϯΛഁغ } }); register_shutdown_function͸4IVUEPXO࣌ʹݺ͹ΕΔϋϯυϥొ࿥ auto_prepend_fileͰ͍ΕΔ͜ͱ΋Ͱ͖Δ ͜Ε΋͓͡ςΫͰ͢ɺਅࣅͳ͍Ͱ

Slide 44

Slide 44 text

ͦ΋ͦ΋ͳΜͰ͜Μͳۤ͠Έ͕͋Δͷ͔ʁ w 1)1ͱ͍͏8"'ͷ4FTTJPOػೳΛཞ༻͍ͯ͠Δ͍ͤͰ͸ʁ w ཧղͯ͠࢖͑͹ྑ͍ɺͪΌΜͱ͔͍ͭͬͯΕ͹࣮ࡍศར w ʮ΄͔ͷݴޠͰ͸େৎ෉ʯ࿦ w ΄͔ͷ'8 ͸҉߸Խ$PPLJFʹೖΕͯΔ͚ͩͰ͸ͳ͍͔ʜʁ 1)1Ͱ΋ผʹ҉߸Խ$PPLJFͷϥΠϒϥϦ͸͋Δ w ʁʮ+XUͰղܾͰ͖Δɺۜͷ஄ؙʯ ʁʮʜͪΌΜͱ+XU࣮૷Ͱ͖͍ͯΔͳΒ͍͍Μ͡Όͳ͍Ͱ͔͢Ͷʯ

Slide 45

Slide 45 text

͋͑ͯ1)1ͷTFTTJPOΛ࢖Θͳ͍ w 0,ͩͱࢥ͏ʂΉ͠Ζࣗ༝౓͕ߴ͍Մೳੑ΋ߴ͍ w 1)1ͷηογϣϯʹ*%͚͍ͩΕͯɺͦΕͰ%#Ҿ͘ͷ͸ແҙຯ w ηογϣϯΛࣗ࡞Ͱ͖Δఔ౓ͷ஌ࣝ͸ඞཁ w ͳΜͱɺ1)1͸ηογϣϯϋϯυϥΛࣗ࡞Ͱ͖ΔͷͰɺҰ౓ͭ͘Δͱඞཁͳػ ೳ͕ཧղͰ͖ΔͰ͠ΐ͏ʂ