Slide 1

Slide 1 text

࣮ફ ͭͷϝϞϦϦʔΫ 
 Ͳ͏ݟ͚ͭΔʁ J045FTU0OMJOF,VOJXBL

Slide 2

Slide 2 text

ϝϞϦϦʔΫͱ͸ 2

Slide 3

Slide 3 text

ϝϞϦϦʔΫͱ͸ɺ΋͏࢖༻͞Εͳ͍ 
 Ϧιʔε͕ϝϞϦʹ֬อ͞Εଓ͚Δ͜ͱ IUUQTFOXJLJQFEJBPSHXJLJ.FNPSZ@MFBLΛ๜༁ɾཁ໿ͨ͠΋ͷɻ೔ຊޠͷํ͸ 
 ͋·Γ͍͍આ໌Ͱ͸ͳ͔ͬͨʜ 3

Slide 4

Slide 4 text

ϝϞϦϦʔΫ͕͋Δͱɺ࢖͑ΔϝϞϦ͕ 
 ঃʑʹݮ͍ͬͯ͘ ͢ΔͱϝϞϦϓϨογϟʔ͕֤ΞϓϦʹ 
 ͔͚ΒΕɺͦΕͰ΋ϝϞϦ͕଍Βͳ͍ͱ 
 ΞϓϦ͕KFUTBNʢւʹϙΠʣ͞ΕΔ ৄ͘͠͸ʮ*EFOUJGZJOHIJHINFNPSZVTFXJUIKFUTBNFWFOUSFQPSUTʯΛࢀরɻ 
 IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOYDPEFJEFOUJGZJOHIJHINFNPSZVTFXJUIKFUTBNFWFOUSFQPSUT 4

Slide 5

Slide 5 text

Α͏͢ΔʹϝϞϦϦʔΫͷ͋ΔΞϓϦΛ 
 ௕࣌ؒ࢖͏ͱڧ੍ऴྃ͞ΕΔˡࠔΔ 5

Slide 6

Slide 6 text

ϝϞϦϦʔΫ͸Կ͕ 
 ݪҼͰى͜Δͷ͔ 6

Slide 7

Slide 7 text

॥؀ࢀর 4XJGU͸ࢀরΧ΢ϯτํࣜͳͷͰɺ 
 ॥؀ࢀর͕͋Δͱ॥؀ࢀরύε্ͷ 
 ΦϒδΣΫτͷࢀরΧ΢ϯτ͕ʹ 
 ͳΒͣͥΜͿղ์͞Εͳ͍ 7

Slide 8

Slide 8 text

ߪಡղআ๨Ε ΋͏Πϕϯτ͕͜ͳ͍ͷʹߪಡΛ 
 ଓ͚Δͱɺ॥؀ࢀরͰ͸ͳ͍͕ 
 ΋͏࢖ΘΕͳ͍Ϧιʔε͕ϝϞϦʹ 
 ࢒Γଓ͚ΔͷͰϝϞϦϦʔΫʹͳΔ 8

Slide 9

Slide 9 text

ϝϞϦϦʔΫΛ 
 Ͳ͏ݟ͚ͭΔ͔ 9

Slide 10

Slide 10 text

10 ϝϞϦϦʔΫʹΑΔڧ੍ऴྃͷൃੜΛ஌Δ ϝϞϦϦʔΫ͕ൃੜ͍ͯ͠Δ৔ॴΛߜΓࠐΉ ϝϞϦϦʔΫͷݪҼΛಛఆ͢Δ

Slide 11

Slide 11 text

11 ϝϞϦϦʔΫ͕ൃੜ͍ͯ͠Δ৔ॴΛߜΓࠐΉ ϝϞϦϦʔΫͷݪҼΛಛఆ͢Δ ࠓ೔ͷൃද͸͜͜ ϝϞϦϦʔΫʹΑΔڧ੍ऴྃͷൃੜΛ஌Δ

Slide 12

Slide 12 text

9DPEFͷ%FCVH/BWJHBUPS 9DPEFͷ%FCVH.FNPSZ(SBQI *OTUSVNFOUTͷ-FBLT UBSVOPO9$5"TTFSU/P-FBL 12 1 2 3 4

Slide 13

Slide 13 text

9DPEFͷ%FCVH/BWJHBUPSͷϝϞϦάϥϑ ϝϞϦ࢖༻ྔΛݟΒΕΔ͕ 
 ஫ҙ͕ඞཁʢޙड़ʣ 13 1

Slide 14

Slide 14 text

9DPEFͷ%FCVH.FNPSZ(SBQI ͜ͷϘλϯΛԡ͢ͱग़Δ΍ͭ 14 2

Slide 15

Slide 15 text

ΦϒδΣΫτͷࢀরάϥϑΛݟΒΕΔ 15 9DPEFͷ%FCVH.FNPSZ(SBQI 2

Slide 16

Slide 16 text

ϝϞϦϦʔΫΛݕग़͢Δͱҹ͕ͭ͘ 16 9DPEFͷ%FCVH.FNPSZ(SBQI 2

Slide 17

Slide 17 text

*OTUSVNFOUTͷ-FBLT ͜ͷϘλϯΛԡ͢ͱग़Δ΍ͭ 17 3

Slide 18

Slide 18 text

18 3 ϝϞϦϦʔΫΛࣗಈݕग़ͯ͠ఆظతʹݕࠪ݁ՌͷϚʔΫ͕ग़Δ ʜϦʔΫͳ͠ ʜ৽ϦʔΫ͋Γ ʜ৽ϦʔΫͳ͠ *OTUSVNFOUTͷ-FBLT ϝϞϦͷ࢖༻ྔάϥϑ͕ݟΒΕΔ

Slide 19

Slide 19 text

UBSVOPO9$5"TTFSU/P-FBL 19 4

Slide 20

Slide 20 text

ϝϞϦϦʔΫΛݕग़͢Δͱςετ͕ࣦഊ͢Δ 20 UBSVOPO9$5"TTFSU/P-FBL 4

Slide 21

Slide 21 text

ϝϞϦϦʔΫΛݕग़͢Δͱςετ͕ࣦഊ͢Δ 21 UBSVOPO9$5"TTFSU/P-FBL 4

Slide 22

Slide 22 text

͜ΕΒͷπʔϧΛ࢖ͬͯͭͷ ϝϞϦϦʔΫΛݟͯΈ·͠ΐ͏ 22

Slide 23

Slide 23 text

ͭͷϝϞϦϦʔΫΛൃੜͤ͞Δ 
 ΞϓϦΛ༻ҙ͠·ͨ͠ 23

Slide 24

Slide 24 text

,VOJXBL.FNPSZ-FBL1MBZHSPVOE ʮ&YFSDJTF9ʯΛλοϓ͢Δͱɺ 
 ͞·͟·ͳछྨͷϝϞϦϦʔΫΛ 
 Ҿ͖ى͜͠·͢ 24

Slide 25

Slide 25 text

&YFSDJTF public class Exercise1_1 { var value: Any? private let weight = Weight1() } public static func exercise1_1() -> Exercise1_1 { let x = Exercise1_1() x.value = x return x } ॥؀ࢀরΛͭ͘Δ άϥϑͷมԽΛΘ͔Γ΍͘͢ 
 ͢ΔͨΊͷେ͖ͳΦϒδΣΫτ 25

Slide 26

Slide 26 text

&YFSDJTF class Weight1 { private var data: [UInt64] = Array( 
 repeating: 0, count: 1024 * 1024 ) } ͓Αͦ.J#ͷ༰ྔΛ֬อ 26

Slide 27

Slide 27 text

9DPEFͷ%FCVH/BWJHBUPS 27 1

Slide 28

Slide 28 text

&YFSDJTFΛλοϓ͢Δͱ 
 ૿͑ͨ··ݮΒͳ͍ ʢϝϞϦϦʔΫ͍ͯ͠Δʣ 28 1

Slide 29

Slide 29 text

9DPEFͷ%FCVH.FNPSZ(SBQI 29 2

Slide 30

Slide 30 text

ϝϞϦϦʔΫͷࣗಈݕ஌ʹҾ͔͔ͬͬͨ ॥؀ࢀরͷ༷ࢠΛڭ͑ͯ͘ΕΔ 30 2

Slide 31

Slide 31 text

*OTUSVNFOUTͷ-FBLT 31 3

Slide 32

Slide 32 text

ϝϞϦϦʔΫͷࣗಈݕ஌ʹҾ͔͔ͬͬͨ ૿͑ͨ··ݮ͍ͬͯͳ͍ʢϦʔΫ͍ͯ͠Δʣ 32 3

Slide 33

Slide 33 text

9$5"TTFSU/P-FBL 33 4

Slide 34

Slide 34 text

ϝϞϦϦʔΫΛݕ஌ͨ͠ 34 4

Slide 35

Slide 35 text

&YFSDJTF·ͱΊ %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷࣗಈ ݕ஌ 9$5"TTFSU/P-FBL ✅ ✅ ✅ ✅ ✅ 35

Slide 36

Slide 36 text

&YFSDJTF public class Exercise1_2 { var value: Any? private let weight = Weight2() } public static func exercise1_2() -> Exercise1_2 { let x = Exercise1_2() x.value = x return x } ॥؀ࢀরΛͭ͘Δ άϥϑͷมԽΛΘ͔Γ΍͘͢ 
 ͢ΔͨΊͷେ͖ͳΦϒδΣΫτ 36

Slide 37

Slide 37 text

&YFSDJTF @implementation Weight2 - (id)init { if (self = [super init]) { size_t size8MiB = 8*1024*1024; void* mem = malloc(size8MiB); if (mem == NULL) { return self; } // NOTE: Avoid memory overcommit. memset(mem, size8MiB, 1); _mem = mem; } return self; } NBMMPDͰಉ͡༰ྔͷϝϞϦΛ 
 ֬อ͍ͯ͠Δ 37

Slide 38

Slide 38 text

9DPEFͷ%FCVH/BWJHBUPS 38 1

Slide 39

Slide 39 text

ΜʁͳΜ͔มΘͬͨʜ͔ʁ ʢ஫ɿಉ͡༰ྔΛϝϞϦϦʔΫͯ͠·͢ʣ 39 1

Slide 40

Slide 40 text

9DPEFͷ%FCVH.FNPSZ(SBQI 40 2

Slide 41

Slide 41 text

ϝϞϦϦʔΫͷࣗಈݕ஌ʹҾ͔͔ͬͬͨ ॥؀ࢀরͷ༷ࢠΛڭ͑ͯ͘ΕΔ 41 2

Slide 42

Slide 42 text

*OTUSVNFOUTͷ-FBLT 42 3

Slide 43

Slide 43 text

ϝϞϦϦʔΫͷࣗಈݕ஌ʹҾ͔͔ͬͬͨ ૿͑ͨ··ݮ͍ͬͯͳ͍ʢϦʔΫ͍ͯ͠Δʣ 43 3

Slide 44

Slide 44 text

9$5"TTFSU/P-FBL 44 4

Slide 45

Slide 45 text

ϝϞϦϦʔΫΛݕ஌ͨ͠ 45 4

Slide 46

Slide 46 text

&YFSDJTF·ͱΊ %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷࣗಈ ݕ஌ 9$5"TTFSU/P-FBL 🤔 ✅ ✅ ✅ ✅ 46 NBMMPDͰ֬อ͞ΕͨϝϞϦ͕දࣔ͞Εͳ͍

Slide 47

Slide 47 text

&YFSDJTF public class Exercise1_3 { var value: Any? private let weight = Weight3() } public static func exercise1_3() -> Exercise1_3 { let x = Exercise1_3() x.value = x return x } ॥؀ࢀরΛͭ͘Δ άϥϑͷมԽΛΘ͔Γ΍͘͢ 
 ͢ΔͨΊͷେ͖ͳΦϒδΣΫτ 47

Slide 48

Slide 48 text

&YFSDJTF class Weight3 { private let data = Data(count: 8 * 1024 * 1024) } 48 %BUBͰಉ͡༰ྔͷϝϞϦΛ֬อ

Slide 49

Slide 49 text

9DPEFͷ%FCVH/BWJHBUPS 49 1

Slide 50

Slide 50 text

ΜʁͳΜ͔มΘͬͨʜ͔ʁ ʢ஫ɿಉ͡༰ྔΛϝϞϦϦʔΫͯ͠·͢ʣ 50 1

Slide 51

Slide 51 text

&YFSDJTF·ͱΊ %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷࣗಈ ݕ஌ 9$5"TTFSU/P-FBL 🤔 ✅ ✅ ✅ ✅ 51 %BUBͰ֬อ͞ΕͨϝϞϦ͕දࣔ͞Εͳ͍

Slide 52

Slide 52 text

&YFSDJTF public static func exercise2() -> Exercise2 { let x = Exercise2() var values = [Any]() values.append(Weight2() as Any) for _ in 0..<100 { values.append(Exercise2()) } let y = Indirect() values.append(y) y.value = ["y": x] for _ in 0..<100 { values.append(Exercise2()) } x.value = values return x άϥϑͷมԽΛΘ͔Γ΍͘͢ 
 ͢ΔͨΊͷେ͖ͳΦϒδΣΫτ ॥؀ࢀরΛ௥Ճ ແؔ܎ͳࢀরΛͨ͘͞Μ௥Ճ ແؔ܎ͳࢀরΛͨ͘͞Μ௥Ճ 52

Slide 53

Slide 53 text

&YFSDJTF·ͱΊ %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷࣗಈ ݕ஌ 9$5"TTFSU/P-FBL 🤔 ✅ ✅ ✅ ✅ 53

Slide 54

Slide 54 text

&YFSDJTF public static func exercise3() -> Exercise3 { let x = Exercise3() let y = Indirect() x.value = y var prev = y for _ in 0..<100 { let z = Indirect() prev.value = z prev = z } prev.value = x ௕େͳ॥؀ࢀরύεΛઃఆ 54

Slide 55

Slide 55 text

9DPEFͷ%FCVH/BWJHBUPS 55 1

Slide 56

Slide 56 text

ΜʁͳΜ͔มΘͬͨʜ͔ʁ ʢ஫ɿಉ͡༰ྔΛϝϞϦϦʔΫͯ͠·͢ʣ 56 1

Slide 57

Slide 57 text

9DPEFͷ%FCVH.FNPSZ(SBQI 57 2

Slide 58

Slide 58 text

ϝϞϦϦʔΫͷࣗಈݕ஌ʹҾ͔͔ͬΒͳ͍ʂ 58 2

Slide 59

Slide 59 text

*OTUSVNFOUTͷ-FBLT 59 3

Slide 60

Slide 60 text

ϝϞϦϦʔΫͷࣗಈݕ஌ʹҾ͔͔ͬΒͳ͍ʂ ૿͑ͨ··ݮ͍ͬͯͳ͍ʢϦʔΫ͍ͯ͠Δʣ 60 3

Slide 61

Slide 61 text

9$5"TTFSU/P-FBL 61 4

Slide 62

Slide 62 text

ϝϞϦϦʔΫΛݕ஌ͨ͠ 62 4

Slide 63

Slide 63 text

&YFSDJTF·ͱΊ %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷࣗಈ ݕ஌ 9$5"TTFSU/P-FBL 🤔 ❌ ✅ ❌ ✅ ௕େͳ॥؀ࢀর͸ݕ஌Ͱ͖ͣ ௕େͳ॥؀ࢀর͸ݕ஌Ͱ͖ͣ 63

Slide 64

Slide 64 text

&YFSDJTF public class Exercise4 { var value: Any? private let weight = Weight1() init() { let x = Indirect() x.value = { _ = self } self.value = x } } Ϋϩʔδϟ͕ࣗ਎ΛڧࢀরͰ 
 Ωϟϓνϟͯ͠॥؀ࢀরͤ͞Δ 64

Slide 65

Slide 65 text

&YFSDJTF·ͱΊ %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷࣗಈ ݕ஌ 9$5"TTFSU/P-FBL 🤔 ✅ ✅ ✅ ✅ 65

Slide 66

Slide 66 text

&YFSDJTF public static func exercise5() -> Exercise5_1 { let x = Exercise5_1() let y = Exercise5_2.init(x) x.value = y return x } 0CKFDUJWF$ͱ4XJGUͷؒͰ 
 ॥؀ࢀরͤ͞Δ 66

Slide 67

Slide 67 text

&YFSDJTF·ͱΊ %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷࣗಈ ݕ஌ 9$5"TTFSU/P-FBL 🤔 ✅ ✅ ✅ ✅ 67

Slide 68

Slide 68 text

&YFSDJTF public class Exercise6: EventHubObserver { private let weight = Weight2() init() { EventHub.shared.add(observer: self) } deinit { EventHub.shared.removeObserver(observer: self) } } EFJOJUͰߪಡղআ͢Δ͜ͱΛ 
 ҙਤͨ͠ίʔυ͕ͩɺ 
 ͦ΋ͦ΋ߪಡղআ͞Εͳ͍ͱ 
 ࢀর͕࢒͍ͬͯͯEFJOJU͕ 
 ૸Βͳ͍ͷͰϝϞϦϦʔΫ͢Δ 68

Slide 69

Slide 69 text

&YFSDJTF·ͱΊ %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷࣗಈ ݕ஌ 9$5"TTFSU/P-FBL 🤔 ❌ ✅ ❌ ✅ ॥؀ࢀরͰ͸ͳ͍ͷͰݕ஌Ͱ͖ͣ ॥؀ࢀরͰ͸ͳ͍ͷͰݕ஌Ͱ͖ͣ 69

Slide 70

Slide 70 text

&YFSDJTF public class Exercise7 { var value: Any? private let weight = Weight2() public class Indirect: CustomReflectable { var value: Any? public var customMirror: Mirror { return Mirror(self, children: []) } } .JSSPS SF fl FDUJOH Ͱ 
 Կ΋TUPSFEQSPQ͕ 
 ͳ͍ͱࡨ֮ͤ͞Δ 70

Slide 71

Slide 71 text

&YFSDJTF·ͱΊ %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷࣗಈ ݕ஌ 9$5"TTFSU/P-FBL 🤔 ✅ ✅ ✅ ❌ .JSSPSʹґଘ͍ͯ͠ΔͷͰ$VTUPN3F fl FDUBCMF͕ 
 ࣮૷͞Ε͍ͯΔΦϒδΣΫτͰ͸ෆਖ਼֬ͳ݁ՌʹͳΔ 71

Slide 72

Slide 72 text

&YFSDJTF·ͱΊ &YFSDJTF %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷ 
 ࣗಈݕ஌ 9$5"TTFSU/P-FBL ✅ ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ❌ 72

Slide 73

Slide 73 text

&YFSDJTF·ͱΊ &YFSDJTF %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷ 
 ࣗಈݕ஌ 9$5"TTFSU/P-FBL ✅ ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ❌ NBMMPDͰ֬อ͞ΕͨϝϞϦ΍%BUBͳͲͷϝϞϦ 
 ࢖༻ྔ͕ݟ͑ͳ͍ɻϝϞϦϦʔΫͯ͠ͳ͍Α͏ʹ 
 ݟ͑ͯ΋ϝϞϦϦʔΫ͍ͯ͠Δ͜ͱ͕͋Γ͏Δ 73

Slide 74

Slide 74 text

&YFSDJTF·ͱΊ &YFSDJTF %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷ 
 ࣗಈݕ஌ 9$5"TTFSU/P-FBL ✅ ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ❌ ॥؀ࢀরύε͕௕͍৔߹΍ɺߪಡͷ 
 ղআ๨Ε͸ݕ஌Ͱ͖ͳ͍ɻࣗಈݕ஌Ͱ 
 ϝϞϦϦʔΫ͕͋ΔͱݴΘΕͨ৔߹͸ 
 ৴༻ͯ͠ྑ͍͕ɺٯ͸ա৴ͯ͠͸͍͚ͳ͍ 74

Slide 75

Slide 75 text

&YFSDJTF·ͱΊ &YFSDJTF %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷ 
 ࣗಈݕ஌ 9$5"TTFSU/P-FBL ✅ ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ❌ ҆ఆͯ͠ϝϞϦͷ࢖༻ྔͷ૿ݮΛ 
 ֬ೝͰ͖͍ͯΔɻϝϞϦϦʔΫͷ 
 ༗ແΛௐ΂͍ͨͳΒ·ͣ͜ΕΛݟΔ΂͖ 75

Slide 76

Slide 76 text

&YFSDJTF·ͱΊ &YFSDJTF %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷ 
 ࣗಈݕ஌ 9$5"TTFSU/P-FBL ✅ ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ❌ ॥؀ࢀরύε͕௕͍৔߹΍ɺߪಡͷ 
 ղআ๨Ε͸ݕ஌Ͱ͖ͳ͍ɻࣗಈݕ஌Ͱ 
 ϝϞϦϦʔΫ͕͋Δͱࢦఠ͞Εͨ৔߹͸ 
 ৴༻ͯ͠Α͍͕ɺͳ͍ͱࢦఠ͞Εͨ৔߹ ͸ա৴ͯ͠͸͍͚ͳ͍ 76

Slide 77

Slide 77 text

&YFSDJTF·ͱΊ &YFSDJTF %FCVH/BWJHBUPS %FCVH.FNPSZ (SBQI *OTUSVNFOUT ͷϝϞϦάϥϑ *OTUSVNFOUTͷ 
 ࣗಈݕ஌ 9$5"TTFSU/P-FBL ✅ ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ✅ ✅ ✅ ✅ 🤔 ❌ ✅ ❌ ✅ 🤔 ✅ ✅ ✅ ❌ ·Εʹ$VTUPN3F fl FDUBCMFΛ࣮૷͍ͯ͠Δ 
 ΦϒδΣΫτ͕͋ΔͷͰ஫ҙ͕ඞཁɻ ϝϞϦϦʔΫ͕͋Δͱࢦఠ͞Εͨ৔߹͸ 
 ৴༻Ͱ͖Δ͕ɺͳ͍ͱࢦఠ͞Εͨ৔߹͸ 
 ա৴ͯ͠͸͍͚ͳ͍ 77

Slide 78

Slide 78 text

·ͱΊ wϝϞϦϦʔΫΛ୳͢ʹ͸·ͣ*OTUSVNFOUTͷ-FBLTͷ 
 ϝϞϦ࢖༻ྔάϥϑΛݟΔͱΑ͍ wͦΕҎ֎ͷํ๏͸ϝϞϦϦʔΫ͕͋ͬͯ΋ݟམͱ͢ 
 Մೳੑ͕͋ΔͷͰɺ݁ՌΛա৴͠ͳ͍ํ͕Α͍ 78