Slide 1

Slide 1 text

J04ʹ͸ແ͍NBD04ಠࣗػೳΛ $BUBMZTUͰ࣮૷͢Δ J04%$+BQBO 1

Slide 2

Slide 2 text

1SPpMF struct Profile { let name = "Kazuya Ueoka" let company = "note, Inc." let twitter = "@fromkk" let github = "fromkk" let qiita = "fromkk" let note = "fromkk" } • 2

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

note inc. ೥݄ελʔτ 4

Slide 5

Slide 5 text

note inc. ଟ਺ͷΫϦΤΠλʔ΍ग़൛ࣾͱఏܞ͍ͯ͠Δίϯςϯπ഑৴αΠτ 5

Slide 6

Slide 6 text

note inc. ೥݄ελʔτ 6

Slide 7

Slide 7 text

note inc. ΫϦΤΠλʔ͕จষ΍ϚϯΨɺࣸਅɺԻ੠Λ౤ߘ͢Δ͜ͱ͕Ͱ͖ɺ Ϣʔβʔ͸ͦͷίϯςϯπΛָ͠ΜͰԠԉͰ͖ΔϝσΟΞϓϥοτϑΥʔϜ 7

Slide 8

Slide 8 text

note inc. ϛογϣϯ ͩΕ΋͕૑࡞Λ͸͡Ίɺ ଓ͚ΒΕΔΑ͏ʹ͢Δɻ 8

Slide 9

Slide 9 text

$BUBMZTUͷ͜Ε·Ͱ 9

Slide 10

Slide 10 text

10

Slide 11

Slide 11 text

IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 11

Slide 12

Slide 12 text

IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 12

Slide 13

Slide 13 text

IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 13

Slide 14

Slide 14 text

14

Slide 15

Slide 15 text

IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 15

Slide 16

Slide 16 text

IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 16

Slide 17

Slide 17 text

IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED 17

Slide 18

Slide 18 text

1SPKFDU$BUBMZTUͱ͸ w 88%$Ͱൃද͞ΕͨJ1BE04޲͚ͷΞϓϦΛNBD04޲ ͚ʹϏϧυՄೳʹ͢Δٕज़ w 6*,JU͕ར༻Ͱ͖ΔͷͰJ04Ͱഓ͖ٕͬͯͨज़͕ͦͷ··ར༻Մ ೳ w গͳ͍޻਺Ͱ഑෍Ͱ͖ΔϓϥοτϑΥʔϜ͕૿͑ΔͷͰϏδω εతʹ΋νϟϯε 18

Slide 19

Slide 19 text

w 9DPEFͷ(FOFSBMλϒͷ%FQMPZNFOU*OGPͰ.BDʹνΣοΫΛ ೖΕΔ͚ͩ ରԠํ๏ 19

Slide 20

Slide 20 text

J04ͱNBD04ͷେ͖ͳҧ͍ w ϝχϡʔ w 5PVDI#BS w πʔϧόʔ 20

Slide 21

Slide 21 text

ϝχϡʔ 21

Slide 22

Slide 22 text

ϝχϡʔ w ΞϓϦέʔγϣϯ͕࣋ͭػೳʹ؆୯ʹΞΫηε͢Δ͜ͱ͕Ͱ͖ Δը໘্෦ʹදࣔ͞ΕΔόʔ w ֊૚ΛೖΕࢠʹ͢Δ͜ͱͰෳ਺ͷ֊૚Λ࡞Δ͜ͱ͕Ͱ͖Δ w ΩʔϘʔυγϣʔτΧοτͱ૊Έ߹ΘͤΔ͜ͱͰΞϓϦέʔ γϣϯͷ࢖͍΍͕͢͞޲্ 22

Slide 23

Slide 23 text

࣮૷ํ๏ 23

Slide 24

Slide 24 text

w "QQ%FMFHBUF 6*3FTQPOEFS ʹCVJME.FOVͱ͍͏ϝιου͕ ͍ΔͷͰ࣮૷ΛՃ͑Δ w CVJMEFSTZTUFNʹDPOUFYUͷछྨ͕౉͞ΕΔͷͰϋϯυϦϯά ͢Δ ࣮૷ํ๏ #if targetEnvironment(macCatalyst) override func buildMenu(with builder: UIMenuBuilder) { super.buildMenu(with: builder) // TODO: build your menu } #endif IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUVJSFTQPOEFSCVJMENFOV 24

Slide 25

Slide 25 text

6*.FOV4ZTUFN w Ͳ͏͍͏࣌ʹݺ͹Ε͔ͨɺϝχϡʔΛ࠶ߏங͢Δඞཁ͕͋Δ͔ ͳͲͷ৘ใΛอ͍࣋ͯ͠Δ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUVJNFOVTZTUFN 25 UIMenuSystem ఆٛ .main ΞϓϦىಈ࣌ʹ౉͞ΕΔɻΞϓϦશମͷϝχϡʔΛߏங͢Δࡍʹར༻͢Δɻ .context ӈΫϦοΫϝχϡʔ(contextMenu)͕දࣔ͞ΕΔࡍʹ౉͞ΕΔɻ

Slide 26

Slide 26 text

6*.FOV w ϝχϡʔΛߏ੒͢ΔΫϥε w λΠτϧ΍ը૾Λઃఆ͢Δ͜ͱ͕Ͱ͖Δ w DIJMESFOʹ͸6*.FOV&MFNFOUΛܧঝ͍ͯ͠ΔΫϥεΛೖΕΔ͜ͱ͕Ͱ͖ΔͷͰ࠶ؼ తʹϝχϡʔΛ࡞Δ͜ͱ͕Մೳ w ϝχϡʔͷ߲໨͕ͭ6*.FOVɺ಺෦͸6*.FOV&MFNFOUͷDIJMESFO w BDUJPO4FMFDUPS͸࣮ߦՄೳͳ!PCKDͳϝιουΛࢦఆՄೳ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUVJNFOV init(title: String, image: UIImage? = nil, identifier: UIMenu.Identifier? = nil, options: UIMenu.Options = [], children: [UIMenuElement] = []) 26

Slide 27

Slide 27 text

6*.FOV#VJMEFS w ϝχϡʔͷߏ੒Λ؅ཧ͢ΔΫ ϥε w ϝχϡʔͷ௥Ճɺ࡟আɺೖΕ ସ͕͑Մೳ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUVJNFOVCVJMEFS /// Replace an identified menu with a menu. /// /// @param replacedIdentifier The identifier of the menu to be replaced. /// @param replacementGroup The replacement menu. func replace(menu replacedIdentifier: UIMenu.Identifier, with replacementMenu: UIMenu) /// Replace the children of an identified parent menu. /// /// @param parentIdentifier The identifier of the parent menu. /// @param childrenBlock A block that returns the new children, given the old children. func replaceChildren(ofMenu parentIdentifier: UIMenu.Identifier, from childrenBlock: ([UIMenuElement]) -> [UIMenuElement]) /// Insert a sibling menu before an identified sibling menu. /// /// @param siblingGroup The sibling menu to insert. /// @param siblingIdentifier The identifier of the sibling menu to insert before. func insertSibling(_ siblingMenu: UIMenu, beforeMenu siblingIdentifier: UIMenu.Identifier) /// Insert a sibling menu before an identified sibling menu. /// /// @param siblingGroup The sibling menu to insert. /// @param siblingIdentifier The identifier of the sibling menu to insert before. func insertSibling(_ siblingMenu: UIMenu, afterMenu siblingIdentifier: UIMenu.Identifier) /// Insert a child menu at the start of an identified parent menu. /// /// @param childGroup The child menu to insert. /// @param parentIdentifier The identifier of the parent menu to insert at the start of. func insertChild(_ childMenu: UIMenu, atStartOfMenu parentIdentifier: UIMenu.Identifier) /// Insert a child menu at the end of an identified parent menu. /// /// @param childGroup The child menu to insert. /// @param parentIdentifier The identifier of the parent menu to insert at the end of. func insertChild(_ childMenu: UIMenu, atEndOfMenu parentIdentifier: UIMenu.Identifier) /// Remove an identified menu. /// /// @param removedIdentifier The menu to remove. func remove(menu removedIdentifier: UIMenu.Identifier) 27

Slide 28

Slide 28 text

6*"DUJPO w Ϋϩʔδϟʔ CMPDLT Λݺͼग़ͤΔ w 6*.FOV&MFNFOUΛܧঝ͍ͯ͠ΔͷͰ6*.FOVͷDIJMESFOʹ௥ Ճ͢Δ͜ͱ͕Ͱ͖Δ 28 IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUVJBDUJPO public convenience init(title: String, image: UIImage? = nil, identifier: UIAction.Identifier? = nil, discoverabilityTitle: String? = nil, attributes: UIMenuElement.Attributes = [], state: UIMenuElement.State = .off, handler: @escaping UIActionHandler)

Slide 29

Slide 29 text

6*$PNNBOE w ηϨΫλʔΛݺͼग़ͤΔ w 6*.FOV&MFNFOUΛܧঝ͍ͯ͠ΔͷͰ6*.FOVͷDIJMESFOʹ௥ Ճ͢Δ͜ͱ͕Ͱ͖Δ 29 IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUVJDPNNBOE public convenience init(title: String, image: UIImage? = nil, action: Selector, propertyList: Any? = nil, alternates: [UICommandAlternate] = [], discoverabilityTitle: String? = nil, attributes: UIMenuElement.Attributes = [], state: UIMenuElement.State = .off)

Slide 30

Slide 30 text

6*,FZ$PNNBOE w ΩʔϘʔυγϣʔτΧοτΛՄೳʹ͢ΔΫϥε w 6*$PNNBOEΛܧঝ͍ͯ͠ΔͷͰ6*.FOVͷDIJMESFOʹ௥Ճ͢ Δ͜ͱ͕Ͱ͖Δ 30 IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUVJLFZDPNNBOE

Slide 31

Slide 31 text

DBO1FSGPSN"DUJPO @XJUI4FOEFS w ౉͞ΕͨBDUJPO͕࣮ߦՄೳ͔ #PPM Λฦ͢ w ϝχϡʔͷ׆ੑɺඇ׆ੑΛ൑ఆ 31 IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJUVJSFTQPOEFSDBOQFSGPSNBDUJPO

Slide 32

Slide 32 text

5PVDI#BS 32

Slide 33

Slide 33 text

5PVDI#BS w ೥ʹൃച͞Εͨ.BDCPPL1SP͔Β౥ࡌ͞ΕͨΩʔϘʔ υͷԞଆʹ഑ஔ͞ΕΔσΟεϓϨΠ͖ͭͷίϯτϩʔϧόʔ w ൃച౰͔࣌Β&TDΩʔͱϑΝϯΫγϣϯΩʔ͕5PVDI#BSʹ ಺แ͞Εͯ͠·͍ࢍ൱྆࿦ w ೥݄ʹൃച͞Εͨ.BDCPPL1SPΠϯνͰ͸&TD Ωʔ͕෮ؼͨ͜͠ͱͰ଴ͪ๬ΜͰ͍ͨਓ͸େ׻ت 33

Slide 34

Slide 34 text

$BUBMZTUͰར༻ՄೳͳϘλϯͷछྨ 34

Slide 35

Slide 35 text

࣮૷ํ๏ 35

Slide 36

Slide 36 text

࣮૷ํ๏ • NSTouchBar.CustomizationIdentifierΛఆٛ͢Δ • Touch BarͷछྨΛࣝผ͢Δ 36 extension NSTouchBar.CustomizationIdentifier { static let myTouchBar = NSTouchBar.CustomizationIdentifier( "me.fromkk.CatalystSampler.MyTouchBar" ) }

Slide 37

Slide 37 text

࣮૷ํ๏ 37 extension NSTouchBarItem.Identifier { static let prev = NSTouchBarItem.Identifier( "me.fromkk.CatalystSampler.prev" ) static let next = NSTouchBarItem.Identifier( "me.fromkk.CatalystSampler.next" ) } • NSTouchBarItem.IdentifierΛఆٛ͢Δ • Touch Barʹදࣔ͢Δ߲໨ͷछྨΛࣝผ͢Δ

Slide 38

Slide 38 text

࣮૷ํ๏ w $BUBMZTUͷ৔߹ʹ6*3FTQPOEFSʹ૿͍͑ͯΔNBLF5PVDI#BSϝιουΛ࣮૷͢Δ 38 #if targetEnvironment(macCatalyst) override func makeTouchBar() -> NSTouchBar? { let touchBar = NSTouchBar() touchBar.customizationIdentifier = .myTouchBar touchBar.defaultItemIdentifiers = [.prev, .next, .otherItemsProxy] touchBar.customizationAllowedItemIdentifiers = [.prev, .next] touchBar.delegate = self return touchBar } #endif

Slide 39

Slide 39 text

NSTouchBarͷϓϩύςΟ • customizationIdentifier:Touch BarΛࣝผ͢ΔͨΊͷ஋ • customizationAllowedItemIdentifiers:ΧελϚΠζΛڐՄ͢Δࣝผࢠ • customizationRequiredItemIdentifiers:ΧελϚΠζ࣌ʹ࡟আͰ͖ͳ͍ࣝผࢠ • defaultItemIdentifiers:ΧελϚΠζ͢Δલʹදࣔ͢Δࣝผࢠ • itemIdentifiers:ొ࿥ࡁΈͷࣝผࢠ • principalItemIdentifier:தԝʹදࣔ͞ΕΔॏཁͳࣝผࢠ • escapeKeyReplacementItemIdentifier:Esc ΩʔΛࠩ͠ସ͑Δ৔߹ͷࣝผࢠ • templateItems:ࣝผࢠ͔ΒΠϯελϯεԽ͞Ε߲ͨ໨Λอ࣋͢ΔϓϩύςΟ • delegate: ࣝผࢠ͔ΒΠϯελϯεΛੜ੒͢ΔॲཧΛҠৡ 39

Slide 40

Slide 40 text

ΧελϚΠζ w ʮදࣔʯϝχϡʔ͔Βʮ5PVDI#BSΛΧελϚΠζʜʯΛબ୒ ͢Δ͜ͱͰදࣔ͢Δ߲໨΍ฒͼॱͷઃఆ͕Մೳ w DVTUPNJ[BUJPO"MMPXFE*UFN*EFOUJpFST΍ DVTUPNJ[BUJPO3FRVJSFE*UFN*EFOUJpFSTΛࢦఆ 40

Slide 41

Slide 41 text

࣮૷ํ๏ • NSTouchBarDelegateΛ࣮૷͢Δ • func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItem.Identifier) -> NSTouchBarItem? • identifierʹࣄલʹఆٛͨ͠஋͕౉͞ΕΔͷͰNSTouchBarItem ͷαϒΫϥεΛੜ੒ͯ͠ฦ͢ • NSTouchBarItemʹ͸customizationLabelΛઃఆ͓ͯ͘͠ͱΧ ελϚΠζ࣌ʹϥϕϧ͕දࣔ͞ΕΔ 41

Slide 42

Slide 42 text

ݕࡧॱং IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOBQQLJUOTUPVDICBS 10. App delegate 9. App object 8. Main window’s controller 7. Main window’s delegate 6. Main window 5. Main window’s first responder 4. Key window’s controller 3. Key window’s delegate 2. Key window 1. Key window’s first responder 5PVDI#BSΛݕࡧ͢ΔॱংʢԼ͔Β্ʹʣ 6*3FTQPOEFSͷαϒΫϥεΛൃݟ͢Δͱߋʹݕࡧ 9. App delegate 8. App object 7. Key window’s controller 6. Key window 5. View controller that is closest to root of window 4. View that is closest to root of window 3. Intermediate view controllers and views 2. View controller of key window’s first responder 1. Key window’s first responder 42

Slide 43

Slide 43 text

஫ҙ఺ w 6*3FTQPOEFSΛܧঝͯ͠Ε͹දࣔ͞ΕΔ͔ͱࢥ͕ͬͨ4XJGU6* ʢ6*7JFX$POUSPMMFS3FQSFTFOUBCMF 6*7JFX3FQSFTFOUBCMFͰϥοϓͨ͠΋ͷʣͰ͸ දࣔ͞Εͳ͍ w XJOEPX4DFOFͷUPVDI#BSϓϩύςΟʹແཧ΍Γ/45PVDI#BSͷΠϯελϯεΛ౉ ͙͢Β͍͔͠ͳͦ͞͏ w 4XJGU6*Λར༻͍ͨ͠৔߹͸$BUBMZTUͰ͸ແ͘NBD04ωΠςΟϒͷΞϓϦΛ։ൃ͠ ͨํ͕ྑ͍͔΋ w εϥΠμʔΛදݱ͢Δ/44MJEFS5PVDI#BS*UFN͔Β஋Λऔಘ͢ΔϓϩύςΟ͕ແ͍ w TMJEFS*UFNWBMVF GPS,FZEPVCMF7BMVF ͰऔಘՄೳ 43

Slide 44

Slide 44 text

πʔϧόʔ 44

Slide 45

Slide 45 text

πʔϧόʔ w πʔϧόʔ͸ΞϓϦέʔγϣϯͷ্෦ʹݻఆͰදࣔ͞ΕΔόʔ ͷ͜ͱ w Ϙλϯ΍ϥϕϧɺϝχϡʔΛઃஔ͢Δ͜ͱ͕Մೳ w .BD$BUBMZTU͔Βݕࡧόʔ΍ηύϨʔλʔ΋ઃஔՄೳ w XJOEPX4DFOFUJUMFCBS UPPMCBSΛ௚઀ૢ࡞͢ΔͷͰը໘͝ͱ ʹදࣔ͢Δ߲໨Λૢ࡞͢Δ༷ͳ໨తʹ͸޲͍͍ͯͳ͍ 45

Slide 46

Slide 46 text

࣮૷ํ๏ • NSToolbar.IdentifierΛఆٛ͢Δ • πʔϧόʔͷछྨΛࣝผ͢Δ 46 extension NSToolbar.Identifier { static let myToolbar = NSToolbar.Identifier( "me.fromkk.CatalystSampler.MyToolbar" ) }

Slide 47

Slide 47 text

• NSToolbarItem.IdentifierΛఆٛ͢Δ • πʔϧόʔʹදࣔ͢Δ߲໨ͷछྨΛࣝผ͢Δ ࣮૷ํ๏ 47 extension NSToolbarItem.Identifier { static let arrowGroup = NSToolbarItem.Identifier( "me.fromkk.CatalystSampler.arrowGroup" ) static let reload = NSToolbarItem.Identifier( "me.fromkk.CatalystSampler.reload" ) static let favorite = NSToolbarItem.Identifier( "me.fromkk.CatalystSampler.favorite" ) }

Slide 48

Slide 48 text

/45PPMCBS w πʔϧόʔࣗମͷΫϥε w XJOEPX4DFOFUJUMF#BS UPPMCBSʹ౉͢͜ͱͰදࣔ͞ΕΔ w /45PPMCBS%FMFHBUFͰπʔϧόʔͷ߲໨ͳͲΛฦ͢͜ͱͰϘ λϯͳͲ͕දࣔ͞ΕΔ w JOTFSU*UFN΍SFNPWF*UFNͰ߲໨ͷ௥Ճɾ࡟আ΋Մೳ 48

Slide 49

Slide 49 text

/45PPMCBS%FMFHBUF 49 @available(iOS 13.0, *) public protocol NSToolbarDelegate : NSObjectProtocol { /// itemIdentifierʹ߹ͬͨπʔϧόʔͷ߲໨Λฦ͢ optional func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? /// ॳظʹදࣔ͢ΔitemIdentifierͷҰཡΛฦ͢ optional func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] /// දࣔΛڐՄ͢ΔitemIdentifierͷҰཡΛฦ͢ optional func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] /// બ୒ՄೳͳitemIdentifierͷҰཡΛฦ͢ optional func toolbarSelectableItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] /// ߲໨͕௥Ճ͞ΕΔͱ͖ʹݺ͹ΕΔ optional func toolbarWillAddItem(_ notification: Notification) /// ߲໨͕࡟আ͞ΕΔͱ͖ʹݺ͹ΕΔ optional func toolbarDidRemoveItem(_ notification: Notification) }

Slide 50

Slide 50 text

දࣔܗࣜ w UPPMCBSEJTQMBZ.PEFΛมߋ͢Δ͜ͱͰදࣔΛมߋ͢Δ͜ͱ͕ Ͱ͖Δ w JDPO"OE-BCFM w JDPO0OMZ w MBCFM0OMZ 50

Slide 51

Slide 51 text

/45PPMCBS*UFNͷछྨ 51 NSToolbarItemGroup NSToolbarItem NSMenuToolbarItem

Slide 52

Slide 52 text

πʔϧόʔͷΧελϚΠζ • toolbar.allowsUserCustomization = true Λઃఆ͢Δ͜ͱͰϢʔβʔ͕ࣗ༝ʹΧελϚΠζ͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔ • toolbar.autosavesConfiguration = true Λઃఆ͢Δ͜ͱͰઃఆ߲ͨ͠໨Λࣗಈతʹอଘ͓ͯ͘͜͠ͱͰ࣍ճҎ߱อଘ͠ ͨઃఆ͕൓ө͞ΕΔ 52

Slide 53

Slide 53 text

#JH4VSͰͷਐԽ w πʔϧόʔͷදࣔελΠϧΛมߋ͢Δ͜ͱ͕Մೳʹ 53 IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

Slide 54

Slide 54 text

#JH4VSͰͷਐԽ w 4QMJU7JFXͷը໘͝ͱʹ߲໨Λઃఆ͢Δ͜ͱ΋Մೳʹ 54 IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

Slide 55

Slide 55 text

#JH4VSͰͷ$BUBMZTUͷਐԽ 55

Slide 56

Slide 56 text

#JH4VSͰͷ$BUBMZTUͷਐԽ w "3,JUͳͲ͜Ε·Ͱ͸ϑϨʔϜϫʔΫΛ࡟আ͢Δඞཁ͕͋ͬͨ΋ͷ΋Ϗϧυ͕ Մೳʹͳͬͨʢػೳͱͯ͠͸ར༻ෆՄʣ w 6*3FTQPOEFSʹQSFTTFT#FHBOQSFTTFT&OEFE͕࣮૷͞ΕɺΑΓࡉ͔͍ϋ ϯυϦϯά͕Մೳʹ w 6*5BCMF7JFX6*$PMMFDUJPO7JFXʹTFMFDUJPO'PMMPXT'PDVTϓϩύςΟ͕௥Ճ ͞ΕԾબ୒ঢ়ଶʹରԠ w /4$VSTPSΫϥε͕௥Ճ͞ΕදࣔɾඇදࣔͳͲͷૢ࡞͕Մೳʹ w Χʔιϧͷը૾΋มߋՄೳ 56

Slide 57

Slide 57 text

#JH4VSͰͷ$BUBMZTUͷਐԽ w $BUBMJOBͰ͸ॖখ͞Ε͍͕ͯͨɺ#JH4VS͔Β͸͞ΒʹNBD04 ʹ࠷దԽͤͨ͞දࣔʹ΋ରԠ w Ϙλϯ΍εϥΠμʔͳͲ͕ΑΓNBD04Β͘͠ w 4XJGU6*ͰίϚϯυɺπʔϧόʔʹରԠ w ϥΠϑαΠΫϧ͕ΑΓࡉ͔͘ϋϯυϦϯάՄೳʹʢ࠷খԽɺόοΫά ϥ΢ϯυεϖʔεɺඇදࣔͳͲʣ w Ϟʔμϧ΍ϙοϓΦʔόʔ͕ಠཱͨ͠XJOEPXʹ 57

Slide 58

Slide 58 text

#JH4VSͰͷ$BUBMZTUͷਐԽ w ࣸਅฤू֦ுػೳʹରԠ w ΞϓϦ಺՝ۚΛݸผʹઃఆ͢Δ͜ͱ͕Մೳʹ w ΞΫηϯτΧϥʔΛઃఆ͢Δ͜ͱ͕Մೳʹ 58

Slide 59

Slide 59 text

#JH4VSͰͷ$BUBMZTUͷਐԽ w 6*,JUͷਐԽʹ௥ै w 6*$PMPS8FMM6*$PMPS1JDLFS7*FX$POUSPMMFS w 6*%BUF1JDLFSͷਐԽʹ΋ରԠ w 6*#VUUPO6*#BS#VUUPO*UFNͷNFOVTʹ΋ରԠ w 4QMJU7JFX$POUSPMMFS͕ྻදࣔʹରԠ w J04J1BE04ͱಉ༷ʹ8JEHFU,JUʹରԠ 59

Slide 60

Slide 60 text

·ͱΊ w 1MBUGPSN͕૿͑Δ͜ͱ͸Ϗδωεతʹ΋νϟϯε͕޿͕Δ͸ͣ w ϝχϡʔɺπʔϧόʔɺ5PVDI#BS͸J04ʹ͸ແ͍͕NBD04Ͱ͸ ॏཁͳػೳͳͷͰੋඇ࣮૷͠Α͏ w NBD04#JH4VSͷਐԽʹ΋ظ଴ 60

Slide 61

Slide 61 text

61

Slide 62

Slide 62 text

62

Slide 63

Slide 63 text

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