Slide 1

Slide 1 text

#BDLMPH͕Ұମ͍͔ͭΒ 4DBMBΛݣ͍ͬͯͳ͍ͱ ࡨ͍֮ͯͨ͠ʁ d+BWB͔Β4DBMB΁ͷҠߦd ୩ຊཅհ দຊ༟ೋ גࣜձࣾψʔϥϘ 4DBMB෱Ԭ

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

w ೥ϕʔλެ։ɺ೥ਖ਼ࣜϦϦʔε ͓͔͛͞·Ͱ೥Ҏ্ w ϓϩδΣΫτ؅ཧπʔϧ w λεΫ؅ཧ8JLJ(JU47/ϑΝΠϧڞ༗ w ༗ྉεϖʔε਺Ҏ্ Ϣʔβ਺໿ສਓ

Slide 4

Slide 4 text

ࠓ೔ͷ࿩͸ɺ ϓϩδΣΫτ؅ཧπʔϧ#BDLMPHʹ͓ ͚Δ4DBMB1MBZ'SBNFXPSL΁ ͷҠߦϓϩδΣΫτ ௨শ1MBZԽ ʹ͍ͭͯ

Slide 5

Slide 5 text

"HFOEB 1MBZԽϓϩδΣΫτͱ͸ ͳͥҠߦ͢Δͷʁ ͳͥ4DBMB1MBZ'SBNFXPSLʁ Ҡߦํ๏ Ҡߦํ๏Λ࣮ફͯ͠ײͨ͜͡ͱ 4DBMBͷ͓ษڧͷ࿩ #BDLMPHΛ4DBMBʹҠߦ͍ͤͯ͘͞࿩

Slide 6

Slide 6 text

1MBZԽϓϩδΣΫτͱ͸

Slide 7

Slide 7 text

1MBZԽϓϩδΣΫτͱ͸ #BDLMPHͷ8FCΞϓϦέʔγϣϯ෦෼Λ +BWB4FBTBS࣮૷͔Β4DBMB1MBZ 'SBNFXPSL࣮૷ʹॻ͖௚͢ϓϩδΣΫτ ΞΫγϣϯ਺͸d ࠓ·ͰͷλεΫফԽྔΛجʹͨ͠༧ଌͰ͸ޙ೥ ͘Β͍͔͔Δ

Slide 8

Slide 8 text

ͨͩ͠ɺ ػೳ௥Ճͱόάमਖ਼͸௨ৗ௨Γ ʢ1MBZԽͱ͸ผνʔϜʣ

Slide 9

Slide 9 text

ͭ·Γɺ ࣮ӡ༻͠ͳ͕Βɺ௕ظ͔͚ؒͯ Ϣʔβ͔Βݟ͑ͳ͍࣮૷Λ͝ ͦͬͱೖΕସ͑ΔϓϩδΣΫτ

Slide 10

Slide 10 text

ͪͳΈʹ#BDLMPHνʔϜ಺༻ޠͰ͸ʜ 5PNDBU൛ PS+BWB൛ +BWB4FBTBS࣮૷ͷ#BDLMPH 1MBZ൛ 4DBMB1MBZ'SBNFXPSL࣮૷ͷ#BDLMPH

Slide 11

Slide 11 text

ͳͥҠߦ͢Δͷʁ

Slide 12

Slide 12 text

ཧ༝͸ɺ #BDLMPHͷ੒௕Λ Ճ଎ͤ͞ΔͨΊ

Slide 13

Slide 13 text

੒௕ΛՃ଎ͤ͞ΔͨΊʹʜ ҠߦλεΫʹҎԼΛؚΊͨ w 4FBTBS͔Βଔۀ w ϦϑΝΫλϦϯά

Slide 14

Slide 14 text

4FBTBS͔Βͷଔۀ w ࢖͍ͬͯΔ4FBTBSϓϩδΣΫτͷϓϩμ Ϋτ͸&0-ʹͳͬͨ ˠ࢖͍ଓ͚Δͱίετ͕ߴ͍ w ΑΓϞμϯͳϓϩμΫτɾϑϨʔϜϫʔΫ ʹ৐Γ׵͑Δ

Slide 15

Slide 15 text

ϦϑΝΫλϦϯά w ೥Ҏ্ͷྺ࢙ʹ͓͚Δ਺ଟͷमਖ਼ ͰෳࡶԽͨ͠ίʔυͷϝϯςφϯεੑ ޲্

Slide 16

Slide 16 text

ͳͥ 4DBMB1MBZ'SBNFXPSLʁ

Slide 17

Slide 17 text

4DBMB +BWBΑΓϞμϯͳݴޠ w FY ܕਪ࿦ɺύλʔϯϚον ੩తܕ෇͚ݴޠ w #BDLMPH։ൃऀ͸੩తܕ෇͚ݴޠͷํ ͕ಘҙͳਓ͕ଟ͍

Slide 18

Slide 18 text

+7.ݴޠ طଘ஌͔ࣝΒେ͖͘཭Εͳ͍ +7.ݴޠؒ͸૬ޓݺͼग़͕͠Մೳ Ұ෦͸طଘίʔυͷ··ʹͯ͠4DBMB͔Β +BWBΛݺͼग़͍ͯ͠Δ

Slide 19

Slide 19 text

#BDLMPH"1*WͰͷ࣮੷ "1*W͸4DBMB1MBZ'SBNFXPSLΛ࢖ͬ ͯɺ͔ͭɺ%%%Ͱઃܭ %PNBJO૚͸ڞ௨Ͱ࢖͑Δ "1*͸8FCʹൺ΂ͯͰ͖Δ͜ͱ͕গͳ͍ͷ Ͱ௥Ճ࣮૷͸ඞཁ

Slide 20

Slide 20 text

Ҡߦํ๏ ϘπҊ

Slide 21

Slide 21 text

Ҡߦํ๏ ϘπҊ ͢΂ͯͷΞΫγϣϯͷҠ২͕׬͔ྃͯ͠ ΒɺೖΕସ͑Δ 5PNDBU൛ 1MBZ൛ ʙ99೥99݄99೔ 99೥99݄99೔ʙ

Slide 22

Slide 22 text

Ҡߦํ๏ ϘπҊ ͢΂ͯͷΞΫγϣϯͷҠ২͕׬͔ྃͯ͠ ΒɺೖΕସ͑Δ 5PNDBU൛ 1MBZ൛ ʙ99೥99݄99೔ 99೥99݄99೔ʙ

Slide 23

Slide 23 text

Ҡߦํ๏ ϘπҊ 5PNDBU൛ͱ1MBZ൛ͷ྆ํʹػೳ௥Ճͱόά मਖ਼͕ඞཁ 1MBZ൛͸௕ظؒϦϦʔε͞Εͳ͍ɺ͔ͭɺ ྆ํͷυοάϑʔσΟϯά͸೉͍͠ όάʹؾ͖ͮͮΒ͍ Ϣʔβ΁ͷӨڹ͕Ͱ΍͍͢

Slide 24

Slide 24 text

Ҡߦํ๏ ϘπҊ

Slide 25

Slide 25 text

Ҡߦํ๏ ϘπҊ +BWB͔Βݺͼग़͞ΕΔϝιουΛগͣͭ͠4DBMBʹҠ২ ˎˎˎαʔϏε +BWB *TTVFαʔϏε +BWB ˎˎˎΞΫγϣϯ +BWB ՝୊ฤूΞΫγϣϯ +BWB ˎˎˎΞΫγϣϯ +BWB *TTVFαʔϏε 4DBMB ˎˎˎαʔϏε +BWB ˎˎˎαʔϏε +BWB 3%#Πϯϑϥ૚

Slide 26

Slide 26 text

͏·͍͖ͦ͘͏ʹݟ͑Δ

Slide 27

Slide 27 text

Ҡߦํ๏ ϘπҊ ࣮ࡍʹ͸ɺ+BWBͱ4DBMBؒͰ&OUJUZͷ૬ޓม ׵͢Δίʔυ͕ඞཁ º&OUJUZͷ਺ ՝୊ฤूΞΫγϣϯ +BWB *TTVFαʔϏε 4DBMB 3%#Πϯϑϥ૚ *TTVF&OUJUZ +BWB *TTVF&OUJUZ 4DBMB

Slide 28

Slide 28 text

ଞʹ΋ઃܭͷࠩҟΛຒΊΔίʔυ΋ඞཁ 4DBMBଆ͸%%%͕ͩɺ+BWBଆ͸%%%Ͱ͸ͳ͍

Slide 29

Slide 29 text

׬ྃ࣌ʹ͸ࣺͯΔͱΘ͔͍ͬͯΔίʔ υΛؤுͬͯॻ͘ͷ͸ͭΒ͍ʜ

Slide 30

Slide 30 text

࠾༻ͨ͠Ҡߦํ๏

Slide 31

Slide 31 text

࠾༻ͨ͠Ҡߦํ๏ ػೳ୯ҐΛ࡞Γ੾ͬͯɺ/HJOYͰΞΫηεΛ 1MBZ൛ʹৼΓ෼͚Δ *TTVFαʔϏε +BWB ՝୊ฤूΞΫγϣϯ +BWB ˎˎˎαʔϏε +BWB 3%#Πϯϑϥ૚ /HJOY *TTVFαʔϏε 4DBMB ՝୊ฤूΞΫγϣϯ 4DBMB ˎˎˎαʔϏε 4DBMB ˎˎˎΞΫγϣϯ +BWB 5PNDBU൛ 1MBZ൛

Slide 32

Slide 32 text

࠾༻ͨ͠Ҡߦํ๏ *TTVFαʔϏε +BWB ՝୊ฤूΞΫγϣϯ +BWB ˎˎˎαʔϏε +BWB 3%#Πϯϑϥ૚ /HJOY *TTVFαʔϏε 4DBMB ՝୊ฤूΞΫγϣϯ 4DBMB ˎˎˎαʔϏε 4DBMB ˎˎˎΞΫγϣϯ +BWB ͨͩ͠ɺ4FTTJPOΛڞ༗͢Δ࢓૊Έ͕ඞཁ ˠ3FEJTΛ࢖࣮ͬͯ૷ 5PNDBU൛ 1MBZ൛

Slide 33

Slide 33 text

࠾༻ཧ༝

Slide 34

Slide 34 text

࠾༻ཧ༝ ϘπҊʹ͍͕ۙɺυοάϑʔσΟϯά΋͠ ΍͘͢Ϣʔβ΁ͷӨڹ͸཈͑΍͍͢ ׬ྃޙʹࣺͯΔίʔυ͸΄΅ͳ͍ ίʔυϕʔε͕׬શʹΘ͔ΕΔͨΊɺ 5PNDBU൛ͷઃܭʹҾ͖ͮΒΕΔ͜ͱ΋ͳ͍

Slide 35

Slide 35 text

ͪͳΈʹ+4$44͸

Slide 36

Slide 36 text

+4$44 %0.ߏ଄ͷҠ২͕ਖ਼͘͠Ͱ͖͍ͯΕ͹ɺ΄ ΅मਖ਼͸ඞཁͳ͍ ਖ਼͘͠Ҡ২͢ΔͨΊʹͭπʔϧΛ࡞੒

Slide 37

Slide 37 text

چ7JFXςϯϓϨʔτ͔Β5XJSM΁ͷม׵πʔϧ ׬ᘳͳม׵πʔϧͰ͸ͳ͘ɺਖ਼نදݱΛ༻ ͍ͨิॿతͳ΋ͷ ແବͳख࡞ۀ͕ݮͬͯศར

Slide 38

Slide 38 text

5PNDBU൛ͱ1MBZ൛ͷ྆ํʹΞΫηεͯ͠ %0.Λൺֱ͢Δπʔϧ %0.Λύʔεͯ͠ݫີʹൺֱ %0.ཁૉ͕׬શʹҰக͢ΔΘ͚Ͱ͸ͳ͍ͷ Ͱɺ$*ʹ૊ΈࠐΊͳͯ͘ʜ ࢖͍ͬͯΔͷ͸࡞ͬͨຊਓͷΈ ʁ

Slide 39

Slide 39 text

Ҡߦํ๏Λ࣮ફͯ͠ ײͨ͜͡ͱ

Slide 40

Slide 40 text

%BTICPBSE͸͜ͷҠߦํ๏Λ࢖ͬͯϦϦʔεࡁΈ

Slide 41

Slide 41 text

ར఺

Slide 42

Slide 42 text

ར఺ 5PNDBU൛ͷϦϦʔεͱ1MBZ൛ͷϦϦʔεΛ ੾Γ཭ͯ͠ߟ͑ΒΕΔ Ҡ২͕ਖ਼͘͠Ͱ͖͍ͯͳͯ͘΋/HJOYͷઃ ఆΛ໭ͤ͹͍͍ ؆୯ʹ໭ͤΔͷ͸ਫ਼ਆతʹΑ͍ %BTICPBSEͷϦϦʔε͸౓໭ͨ͠

Slide 43

Slide 43 text

՝୊

Slide 44

Slide 44 text

՝୊ 1MBZԽνʔϜͷҠ২ͱผνʔϜͷػೳ௥Ճ ͱ͕ฒߦͯ͠ಈ͍͍ͯΔը໘͸ࠩҟ͕Ͱ΍ ͍͢ ίʔυϕʔε͕Θ͔Ε͍ͯΔͨΊίϯϑϦ Ϋτ͠ͳ͍෼ɺؾ͖ͮʹ͍͘ िҰͷϛʔςΟϯάͰҠ২தͷը໘Λผνʔ Ϝʹڞ༗ͯܰ͠ݮ

Slide 45

Slide 45 text

՝୊ શը໘ʹٴͿมߋ͸5PNDBU൛ͱ1MBZ൛ͷ྆ ํʹมߋ͕ඞཁͰίετ͕ߴ͍ FY άϩʔόϧόʔͱ͔ ࠓͷͱ͜Ζɺૣ͘ऴΘΒͤΔ͘Β͍͔͠ղ ܾࡦ͸ͳͦ͞͏ʜ

Slide 46

Slide 46 text

4DBMBॳ৺ऀ͕ +BWBˠ4DBMB΁ͷҠߦΛͨ͠ ࿩

Slide 47

Slide 47 text

4DBMBͷ͓ษڧͷ࿩

Slide 48

Slide 48 text

4DBMBͷษڧํ๏ ࣾ಺ษڧձΛ͢Δ ৽ೖࣾһݚमͰ࢖͏ ࣮ۀ຿Ͱ࢖͏

Slide 49

Slide 49 text

ࣾ಺ษڧձ υϫϯΰͷ4DBMBݚमςΩετΛिҰͰྠߨ

Slide 50

Slide 50 text

αϧͰ΋Θ͔Δ4DBMB ψʔϥϘຊִࣾि݄༵։࠵

Slide 51

Slide 51 text

৽ೖࣾһݚमͰ࢖͏ ࣾ಺޲͚πʔϧΛ4DBMB 1MBZ "LLB 84Ͱ࡞ͬͨ

Slide 52

Slide 52 text

࣮ۀ຿Ͱ࢖͏ #BDLMPHͷ"1*͸طʹ4DBMB1MBZͰಈ࡞͠ ͍ͯΔ

Slide 53

Slide 53 text

࣮ࡍͷ͸·ΓͲ͜Ζ ଞͷݴޠͱͷࡉ͔͍จ๏ͷҧ͍ [T] ⟷ => ⟷ -> Option ⟷ Optional val & var ⟷ let & var JNQMJDJUDMBTT forจ

Slide 54

Slide 54 text

JNQMJDJUDMBTT implicit class Foo(val a: String) { def foo: Int = 3 * a.toInt } ”9”.foo extension String { var foo: Int { return 3 * Int(self)! } } ”9”.foo struct Foo { Foo(const char* a) : a(a) {} int foo() { return 3 * atoi(a); } private: const char* a; }; Foo a = ”33"; a.foo(); $

Slide 55

Slide 55 text

GPSจϜζΧγΠωʜ forDPNQSFIFOTJPO forMPPQ for { i <- 1 until n j <- 1 until i if isPrime(i + j) } yield (i, j)

Slide 56

Slide 56 text

GPSDPNQSFIFOTJPO IUUQTTQFBLFSEFDLDPNEBJLTZTDBMBGVLVPLB TMJEF ˠ0QUJPOܕΛ࢖͍͜ͳͯ͠ॳ৺ऀ͔Βதڃऀ΁ 4DBMB෱Ԭ for(p <- e) yield e′ e.map{case p => e′ } — The Scala Language Specification Version 2.9 / 6.19 For Comprehensions and For Loops for(p <- e; p′ <- e′;…) yield e′′ e.flatMap{ case p => for(p′ <- e′;…) yield e′′ } p <- e if g p <- e.withFilter((x1 ,…,xn ) => g)

Slide 57

Slide 57 text

GPSDPNQSFIFOTJPO&YBNQMF for { i <- 1 until n j <- 1 until i if isPrime(i + j) } yield (i, j) (1 until n) .flatMap { case i => for (j <- 1 until i if isPrime(i + j)) yield (i, j) } for(p <- e; p′ <- e′;…) yield e′′ e.flatMap{ case p => for(p′ <- e′;…) yield e′′ }

Slide 58

Slide 58 text

(1 until n) .flatMap { case i => for (j <- 1 until i if isPrime(i + j)) yield (i, j) } p <- e if g p <- e.withFilter((x1 ,…,xn ) => g) (1 until n) .flatMap { case i => for (j <- (1 until i) .withFilter { j => isPrime(i + j) } ) yield (i, j) }

Slide 59

Slide 59 text

(1 until n) .flatMap { case i => for (j <- (1 until i) .withFilter { j => isPrime(i + j) } ) yield (i, j) } for(p <- e) yield e′ e.map{case p => e′ } (1 until n) .flatMap { case i => (1 until i) .withFilter { j => isPrime(i + j) } .map { case j => (i, j) } }

Slide 60

Slide 60 text

GPSDPNQSFIFOTJPO for { i <- 1 until n j <- 1 until i if isPrime(i + j) } yield (i, j) (1 until n) .flatMap { case i => (1 until i) .withFilter { j => isPrime(i + j) } .map { case j => (i, j) } }

Slide 61

Slide 61 text

GPSDPNQSFIFOTJPO ࠶ܝ IUUQTTQFBLFSEFDLDPNEBJLTZTDBMBGVLVPLB TMJEF for(p <- e) yield e′ e.map{case p => e′ } for(p <- e; p′ <- e′;…) yield e′′ e.flatMap{ case p => for(p′ <- e′;…) yield e′′ } p <- e if g p <- e.withFilter((x1 ,…,xn ) => g) ˠ0QUJPOܕΛ࢖͍͜ͳͯ͠ॳ৺ऀ͔Βதڃऀ΁ 4DBMB෱Ԭ — The Scala Language Specification Version 2.9 / 6.19 For Comprehensions and For Loops

Slide 62

Slide 62 text

GPSDPNQSFIFOTJPOΛ࢖͏ -JTU 0QUJPO 'VUVSFͳͲ͸ flatMap map withFilterΛ࣮૷͍ͯ͠Δ for { : allProjects <- projectRepository.allRelatedProjectsOrderRecent(ctx.user.id) userCount <- userRepository.countUsersOfSpace(ctx.space.id) allProjectIds = allProjects.map(_.id) myPullRequests <- pullRequestRepository.allMyRequest(user.id, allProjectIds) activities <- projectActivityRepository.allGroupedActivitiesOfSpace (allProjectIds, activityTypes, pagination) : } yield DashboardContents( : allProjects = allProjects, userCount = userCount, myPullRequests = myPullRequests,
 activities = activities, : ) }

Slide 63

Slide 63 text

#BDLMPHΛ 4DBMB1MBZ΁Ҡߦͤ͞Δ࿩

Slide 64

Slide 64 text

࢖͍ͬͯΔݴޠ΍ϥΠϒϥϦ ৽ ݱࡏ ݴޠ 4DBMB +BWB ΢Σϒ ϑϨʔϜϫʔΫ 1MBZ 8FCXPSL ςϯϓϨʔτ Τϯδϯ 5XJSM 7FMPDJUZ εΫϦϓτ )BYF )BYF

Slide 65

Slide 65 text

#BDLMPHͷϓϩδΣΫτߏ੒ Core Play API

Slide 66

Slide 66 text

Java Scala 4DBMB1MBZ΁ͷҠߦํ਑ 4DBMB൛ͱ+BWB൛ͱΛൺ΂ͯɺϒϥ΢β্Ͱ ϨϯμϦϯά͞Εͨ಺༰͕ɺ%0.ͱͯ͠ಉ ͡ʹͳΔΑ͏ʹ͢Δ +BWB4DSJQU͸ม͑ͳ͍ αʔόʔग़ྗ࣌ͷ%0.ߏ ଄͕ಉ͡ͳΒɺϒϥ΢βͰ ͷදࣔ݁Ռ΋ಉ͡ʹͳΔ

Slide 67

Slide 67 text

4DBMB1MBZ΁ͷҠߦखॱ 1MBZ ΞΫγϣϯ͝ͱʹɺ ϧʔςΟϯάઃఆΛॻ͖ม͑Δ ΞΫγϣϯΛ4DBMBʹॻ͖ม͑Δ ςϯϓϨʔτΛॻ͖ม͑Δ Core Play API

Slide 68

Slide 68 text

ϧʔςΟϯάͷઃఆ xwork-Dashboard.xml /pages/dashboard/Dashboard.vm GET /dashboard controllers.dashboard.DashboardController.viewDashboard() routes

Slide 69

Slide 69 text

ΞΫγϣϯͷॻ͖͔͑ +BWBͷιʔεΛݟΔ forifͳ΋ͷΛmapfilterͱ͔ʹॻ ͖͔͑Δ def viewDashboard() = addToken { actions.userAction.async { implicit request => dashboardApplicationService.viewDashboard().map { contents => Ok(views.html.dashboard.dashboard(contents)) } } }

Slide 70

Slide 70 text

ςϯϓϨʔτΤϯδϯͷҠߦ WFMPDJUZUXJSM ࣾ಺πʔϧ Λ࢖͏ ˠجຊతͳஔ׵Λߦ͏͚ͩͳͷͰɺ͍Ζ͍ Ζमਖ਼͢Δ @Html(Messages(“msg.dashboard.storage.warning", contents.diskUsageRatio)) Twirl Velocity ${action.getText(‘msg.dashboard.storage.warning', $!webwork.htmlEncode($action.diskUsageRatio))}

Slide 71

Slide 71 text

ςϯϓϨʔτΤϯδϯͷҠߦ #parse("/pages/_newUI/common/parts/globalHeader.vm") @import common.parts._ @globalHeader(contents) Twirl Velocity

Slide 72

Slide 72 text

4DBMB1MBZ΁ͷҠߦखॱ $PSF "QQMJDBUJPO4FSWJDFʹϝιουΛੜ΍͢ ˠίϯςϯπΛͭͬͯ͘Ϗϡʔʹ౉͢ $POUFOUT'BDUPSZΛ࡞Δ 3FQPTJUPSZܦ༝ͰσʔλΛऔΓग़͢ 4DBMJLF+%#$Ͱ%#͔ΒσʔλΛऔΔ Core Play API

Slide 73

Slide 73 text

"QQMJDBUJPO4FSWJDF "QQMJDBUJPO4FSWJDFʹϝιουΛੜ΍͢ ˠίϯςϯπΛͭͬͯ͘Ϗϡʔʹ౉͢ def viewDashboard()(implicit ctx: UserContext): Future[DashboardContents] = { for { contents <- dashboardContentsFactory.create() } yield contents }

Slide 74

Slide 74 text

$POUFOUT'BDUPSZ 3FQPTJUPSZܦ༝ͰσʔλΛऔΓग़͢ def create()(implicit ctx: UserContext, io: IOContext, ec: ExecutionContext): Future[DashboardContents] = { val user = ctx.user val activityTypes = ActivityType.availableActivities(user.role) val pagination = PaginationQuery(count = 10) for { : allProjects <- projectRepository.allRelatedProjectsOrderRecent(ctx.user.id) userCount <- userRepository.countUsersOfSpace(ctx.space.id) : } yield DashboardContents( : allProjects = allProjects, userCount = userCount, : ) }

Slide 75

Slide 75 text

؆ܿʹॻ͚Δ ͢΂ͯͷਓʹಡΈ΍͍͢Θ͚Ͱ͸ͳ͍ w ίϨΫγϣϯ 0QUJPOؚΉ ͷ"1*͕๛෋ w ύλʔϯϚονϯά Α͔ͬͨ͜ͱ

Slide 76

Slide 76 text

ॻ͖׵͑ʹےྗ͕ཁΔ w ιʔεΛಡΈղ͘ w +BWBͷݹ͍ϥΠϒϥϦ w 4DBMBΒ͘͠ॻ͘ w %%%Β͘͠ॻ͘ Ή͔͍ͣ͠ͱ͜Ζ Java Scala

Slide 77

Slide 77 text

·ͱΊ

Slide 78

Slide 78 text

·ͱΊ #BDLMPHͷ4DBMB1MBZԽ w ϝϯςφϯεੑΛ޲্ͤ͞ɺ։ൃΛՃ଎ͤ͞Δ w ػೳ୯ҐͰঃʑʹҠߦͤ͞Δ w +4$44͸΄ͱΜͲ͍͡Βͳ͍ 4DBMBͰͷ࣮ࡍͷػೳ୯ҐͰͷҠߦ w ΞΫγϣϯ͝ͱʹॻ͖׵͍͑ͯ͘

Slide 79

Slide 79 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠