Upgrade to Pro — share decks privately, control downloads, hide ads and more …

自己管理の夢とScreen Time API / iOSDC Japan 2021 - Scr...

Yuji Fujisaka
September 19, 2021

自己管理の夢とScreen Time API / iOSDC Japan 2021 - Screen Time API

Yuji Fujisaka

September 19, 2021
Tweet

More Decks by Yuji Fujisaka

Other Decks in Programming

Transcript

  1. ࣌ؒɾλεΫ؅ཧ ϙϞυʔϩ 5JNF5JNFS (FUUJOH5IJOHT%POF (5% 0NOJ'PDVT λεΫγϡʔτ࢓ࣄज़ 5BTL$IVUF$MPVE λΠϜτϥοΩϯάπʔϧ 5ZNF

    Ψϯτνϟʔτ όʔϯμ΢ϯνϟʔτ ϓϥϯχϯάϙʔΧʔ εϓϦϯτϓϥϯχϯά 5PHHM 8BLB5JNF (PPHMF,FFQ 5SFMMP "TBOB 1JWPUBM5SBDLFS 5SBDLJOH5JNF 5JNJOH Ϛχϟʔφͷ๏ଇ 5PEPJTU ΞΠϏʔɾϦʔɾϝιου 5IJOHT 0NOJ1MBO λεΫϖσΟΞ
  2. ྫɿ5BTL$IVUF$MPVE w ʮλεΫγϡʔτ࣌ؒज़ʯ ʹଇͬͨλεΫϦετܕͷπʔϧ ᶃ ʮຊ೔̍೔෼ͷ࢓ࣄʯΛ̍γʔτͰ؅ཧ͢Δ ᶄ ʮ͜Ε͔Β΍Δ࢓ࣄͷϦετʯͱ ʮ͜͜·Ͱʹ΍ͬͨ࢓ࣄͷϦετʯΛҰݩ؅ཧ͢Δ ᶅ

    ʮ̍෼Ҏ্࣌ؒͷ͔͔Δ͜ͱʯ͸͢΂ͯ؅ཧ͢Δ ᶆ ͢΂ͯͷ࢓ࣄͷʮݟੵ΋Γ࣌ؒʯΛग़͓ͯ͘͠ ᶇ ʮຊ೔̍೔෼ͷ࢓ࣄʯ͕͢΂ͯऴΘͬͨΒԿ࣌ʹͳΔ ͔ͷ༧ଌΛࣗಈࢉग़͢Δ͜ͱͰɺৗʹ࢓ࣄͷऴΘΔ࣌ ؒʢ·ͨ͸ब৸࣌ࠁʣΛϦΞϧλΠϜʹ೺Ѳ͢Δ ࣌ؒɾλεΫ؅ཧπʔϧ IUUQTCMPHUBTLDIVUFDMPVEXIBUJTUBTLDIVUF
  3. w ʮ࣌ؒͷ࢖͍ํʯͷݱঢ়೺Ѳ͕Ͱ͖Δ ‣ ࢖్ෆ໌͕࣌ؒݟ͑ͯ͘Δ ‣ ༧ଌͱ࣮੷ͷζϨ͕ݟ͑ͯ͘Δ ˣ w ݟੵΓΛਫ਼៛Խ͠΍͍͢ ‣

    ʮ͜ΕͳΒͰ͖ͦ͏ʂʯͱ ֬৴Λ࣋ͯΔ༧ఆʹͰ͖Δ ‣ ࣗ෼ΛίϯτϩʔϧͰ͖͍ͯΔ ײ֮ʹͳΔʢ҆ఆͯ͠ḿΔʣ ࣌ؒɾλεΫ؅ཧπʔϧ IUUQTCMPHUBTLDIVUFDMPVEXIZJTOUUBTLDIVUFDMPVEDSBNQFE ࣗ෼͕ಛʹײͨ͡Ձ஋
  4. ֓ཁ w ೥ɺJ04Ͱొ৔༧ఆ ‣ 4XJGU4XJGU6* w ͭͷ'SBNFXPSLͰߏ੒͞ΕΔ ‣ %FWJDF"DUJWJUZ ‣

    .BOBHFE4FUUJOHT ‣ 'BNJMZ$POUSPMT 4DSFFO5JNF"1* IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
  5. 4DSFFO5JNF"1* ManagedSettings DeviceActivity FamilyControls อޢऀΞΧ΢ϯτʹΑΔঝೝ ϓϥΠόγʔͷอޢ ར༻੍ݶͷ੍ޚ ࢖༻ঢ়گͷ؂ࢹ ΞϓϦىಈͤͣίʔυ࣮ߦ ΞϓϦ͔Β੍ݶͷઃఆɾղআ

    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO.BOBHFE4FUUJOHT IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO%FWJDF"DUJWJUZ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO'BNJMZ$POUSPMT ͭͷ'SBNFXPSL
  6. 4DSFFO5JNF"1* ͭͷ'SBNFXPSL ManagedSettings DeviceActivity FamilyControls อޢऀΞΧ΢ϯτʹΑΔঝೝ ϓϥΠόγʔͷอޢ ར༻੍ݶͷ੍ޚ ࢖༻ঢ়گͷ؂ࢹ ΞϓϦىಈͤͣίʔυ࣮ߦ

    ΞϓϦ͔Β੍ݶͷઃఆɾղআ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO.BOBHFE4FUUJOHT IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO%FWJDF"DUJWJUZ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO'BNJMZ$POUSPMT
  7. w %FWJDF"DUJWJUZ/BNF w %FWJDF"DUJWJUZ&WFOU w %FWJDF"DUJWJUZ4DIFEVMF 4DSFFO5JNF"1* ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ w %FWJDF"DUJWJUZ$FOUFS

    w %FWJDF"DUJWJUZ.POJUPS ؂ࢹର৅ͷఆٛ ؂ࢹʹؔ͢Δ੍ޚ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOEFWJDFBDUJWJUZ %FWJDF"DUJWJUZɿ࢖༻ঢ়گͷ؂ࢹ
  8. w ཁૉ ‣ ର৅ΞϓϦ΍8FCυϝΠϯɼ ΧςΰϦͷτʔΫϯ ‣ ࢖༻࣌ؒͷᮢ஋ 4DSFFO5JNF"1* %FWJDF"DUJWJUZ&WFOUɿର৅ߦಈͷఆٛ public

    struct DeviceActivityEvent { public init( applications: Set<ApplicationToken> = [], categories: Set<ActivityCategoryToken> = [], webDomains: Set<WebDomainToken> = [], threshold: DateComponents ) } IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOEFWJDFBDUJWJUZEFWJDFBDUJWJUZFWFOU ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ import DeviceActivity // ྫɿʮSNSʯΧςΰϦͰܭ30෼අ΍ͨ͜͠ͱͷఆٛ let snsEvent = DeviceActivityEvent( categories: [ (SNS ΧςΰϦͷ token) ], threshold: DateComponents(minute: 30) )
  9. w ཁૉ ‣ ։࢝࣌ࠁ ‣ ऴྃ࣌ࠁ ‣ ܁Γฦ͠ͷ༗ແ ‣ ࣄલ༧ࠂ࣌ؒ

    4DSFFO5JNF"1* %FWJDF"DUJWJUZ4DIFEVMFɿର৅࣌ؒଳͷఆٛ public struct DeviceActivitySchedule { public init( intervalStart: DateComponents, intervalEnd: DateComponents, repeats: Bool, warningTime: DateComponents? = nil ) } IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOEFWJDFBDUJWJUZEFWJDFBDUJWJUZTDIFEVMF ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ import DeviceActivity // ྫɿຖ೔ͷ໷10࣌ʙே5࣌ͱ͍͏࣌ؒଳͷఆٛ let night = DeviceActivitySchedule( intervalStart: DateComponents(hour: 22, minute: 0), intervalEnd: DateComponents(hour: 5, minute: 0), repeats: true, warningTime: nil )
  10. w %FWJDF"DUJWJUZ/BNF w %FWJDF"DUJWJUZ&WFOU w %FWJDF"DUJWJUZ4DIFEVMF 4DSFFO5JNF"1* %FWJDF"DUJWJUZɿ࢖༻ঢ়گͷ؂ࢹ ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ w

    %FWJDF"DUJWJUZ$FOUFS w %FWJDF"DUJWJUZ.POJUPS & ؂ࢹର৅ͷఆٛ ؂ࢹʹؔ͢Δ੍ޚ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOEFWJDFBDUJWJUZ
  11. 4DSFFO5JNF"1* %FWJDF"DUJWJUZ$FOUFSɿର৅Λ؂ࢹ͢Δ let allDays = DeviceActivitySchedule( intervalStart: DateComponents(hour: 0, minute:

    0), intervalEnd: DateComponents(hour: 23, minute: 59), repeats: true ) let events: [DeviceActivityEvent.Name: DeviceActivityEvent] = [ .encouraged: DeviceActivityEvent( applications: [ਪ঑͍ͨ͠AppͷτʔΫϯ], threshold: DateComponents(minute: 15) ) ] ᶃର৅Λఆٛ ɾຖ೔ʢʙʣ ɾਪ঑͍ͨ͠ΞϓϦʢྫɿֶशܥʣ ɹΛ෼࢖ͬͨͱ͖ ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOEFWJDFBDUJWJUZEFWJDFBDUJWJUZDFOUFS
  12. 4DSFFO5JNF"1* %FWJDF"DUJWJUZ$FOUFSɿର৅Λ؂ࢹ͢Δ let allDays = DeviceActivitySchedule( intervalStart: DateComponents(hour: 0, minute:

    0), intervalEnd: DateComponents(hour: 23, minute: 59), repeats: true ) let events: [DeviceActivityEvent.Name: DeviceActivityEvent] = [ .encouraged: DeviceActivityEvent( applications: [ਪ঑͍ͨ͠AppͷτʔΫϯ], threshold: DateComponents(minute: 15) ) ] let center = DeviceActivityCenter() try? center.startMonitoring(.example, during: allDays, events: events) ᶄ؂ࢹ։࢝ ᶃର৅Λఆٛ ɾຖ೔ʢʙʣ ɾਪ঑͍ͨ͠ΞϓϦʢྫɿֶशܥʣ ɹΛ෼࢖ͬͨͱ͖ ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOEFWJDFBDUJWJUZEFWJDFBDUJWJUZDFOUFS
  13. w %FWJDF"DUJWJUZ/BNF w %FWJDF"DUJWJUZ&WFOU w %FWJDF"DUJWJUZ4DIFEVMF 4DSFFO5JNF"1* %FWJDF"DUJWJUZɿ࢖༻ঢ়گͷ؂ࢹ ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ w

    %FWJDF"DUJWJUZ$FOUFS w %FWJDF"DUJWJUZ.POJUPS & ؂ࢹର৅ͷఆٛ ؂ࢹʹؔ͢Δ੍ޚ "QQ&YUFOTJPOͰ Πϕϯτൃੜ࣌ʹίʔυ࣮ߦ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOEFWJDFBDUJWJUZ
  14. 4DSFFO5JNF"1* %FWJDF"DUJWJUZ.POJUPSɿ؂ࢹ݁ՌΛ΋ͱʹίʔυ࣮ߦ import DeviceActivity class MyMonitorExtension: DeviceActivityMonitor { override func

    intervalDidStart(for activity: DeviceActivityName) { super.intervalDidStart(for: activity) } override func intervalDidEnd(for activity: DeviceActivityName) { super.intervalDidEnd(for: activity) } override func eventDidReachThreshold(_ event: DeviceActivityEvent.Name, activity: DeviceActivityName) { super.eventDidReachThreshold(event, activity: activity) // ಛఆͷΞΫςΟϏςΟͷ࢖༻͕࣌ؒᮢ஋ʹୡͨ͠Βɺ͕͜͜ݺ͹ΕΔʢΞϓϦΛىಈ͍ͯ͠ͳͯ͘΋ʣ } } ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻIUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOEFWJDFBDUJWJUZEFWJDFBDUJWJUZNPOJUPS
  15. 4DSFFO5JNF"1* ManagedSettings DeviceActivity FamilyControls อޢऀΞΧ΢ϯτʹΑΔঝೝ ϓϥΠόγʔͷอޢ ར༻੍ݶͷ੍ޚ ࢖༻ঢ়گͷ؂ࢹ ΞϓϦىಈͤͣίʔυ࣮ߦ ΞϓϦ͔Β੍ݶͷઃఆɾղআ

    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO.BOBHFE4FUUJOHT IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO%FWJDF"DUJWJUZ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO'BNJMZ$POUSPMT ͭͷ'SBNFXPSL
  16. 4DSFFO5JNF"1* %FWJDF"DUJWJUZɿ࢖༻ঢ়گͷ؂ࢹ import DeviceActivity class MyMonitorExtension: DeviceActivityMonitor { override func

    eventDidReachThreshold(_ event: DeviceActivityEvent.Name, activity: DeviceActivityName) { super.eventDidReachThreshold(event, activity: activity) // ಛఆͷΞΫςΟϏςΟͷ࢖༻͕࣌ؒᮢ஋ʹୡͨ͠Βɺ͕͜͜ݺ͹ΕΔʢΞϓϦΛىಈ͍ͯ͠ͳͯ͘΋ʣ } } ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOEFWJDFBDUJWJUZEFWJDFBDUJWJUZNPOJUPS
  17. 4DSFFO5JNF"1* %FWJDF"DUJWJUZ .BOBHFE4FUUJOHTɿ؂ࢹ ར༻੍ݶͷ੍ޚ import DeviceActivity import ManagedSettings class MyMonitorExtension:

    DeviceActivityMonitor { let store = ManagedSettingsStore() override func eventDidReachThreshold(_ event: DeviceActivityEvent.Name, activity: DeviceActivityName) { super.eventDidReachThreshold(event, activity: activity) // ಛఆͷΞΫςΟϏςΟͷ࢖༻͕࣌ؒᮢ஋ʹୡͨ͠Βɺ͕͜͜ݺ͹ΕΔʢΞϓϦΛىಈ͍ͯ͠ͳͯ͘΋ʣ } } ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPONBOBHFETFUUJOHTNBOBHFETFUUJOHTTUPSF
  18. 4DSFFO5JNF"1* %FWJDF"DUJWJUZ .BOBHFE4FUUJOHTɿ؂ࢹ ར༻੍ݶͷ੍ޚ import DeviceActivity import ManagedSettings class MyMonitorExtension:

    DeviceActivityMonitor { let store = ManagedSettingsStore() override func eventDidReachThreshold(_ event: DeviceActivityEvent.Name, activity: DeviceActivityName) { super.eventDidReachThreshold(event, activity: activity) if event == .encouraged { // ਪ঑ΠϕϯτʢྫɿֶशܥΞϓϦΛ30෼࢖͏ʣΛୡ੒ͨ͠Βɺ͢΂ͯͷΞϓϦ΁ͷར༻੍ݶΛղআ͢Δ store.shield.applications = nil } } } ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPONBOBHFETFUUJOHTNBOBHFETFUUJOHTTUPSF
  19. 4DSFFO5JNF"1* .BOBHFE4FUUJOHT4UPSFɿ༷ʑͳ੍ݶͷઃఆ w ΞϓϦ΍8FCͷγʔϧυҎ֎ʹ΋ɺ৭ʑͳ߲໨ΛઃఆͰ͖Δ ‣ σόΠε੍ݶܥ ΞΧ΢ϯτ৘ใ ϞόΠϧ௨৴ ύείʔυ ʜʜ

    ‣ ίϯςϯπϑΟϧλϦϯάܥ "QQ4UPSF՝ۚ (BNF$FOUFS ϨʔςΟϯά੍ݶ ʜʜ ‣ 8FCίϯςϯπͷ੍ݶܥ 4BGBSJͷ$PPLJFϙϦγʔ ʜʜ ‣ ʜʜ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPONBOBHFETFUUJOHTNBOBHFETFUUJOHTTUPSF ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPONBOBHFETFUUJOHTΑΓ
  20. 4DSFFO5JNF"1* .BOBHFE4FUUJOHT6*ɿγʔϧυͷݟͨ໨Λม͑Δ w γʔϧυͷϘλϯ΍ ΞΠίϯɺλΠτϧɺ ৭ͳͲΛมߋͰ͖Δ w ΞϓϦͷಛੑʹ͋ͬͨ ར༻੍ݶ࣌ͷԋग़ʹ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO.BOBHFE4FUUJOHT6*

    ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ .FFUUIF4DSFFO5JNF"1*IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDΑΓ
  21. 4DSFFO5JNF"1* ManagedSettings DeviceActivity FamilyControls อޢऀΞΧ΢ϯτʹΑΔঝೝ ϓϥΠόγʔͷอޢ ར༻੍ݶͷ੍ޚ ࢖༻ঢ়گͷ؂ࢹ ΞϓϦىಈͤͣίʔυ࣮ߦ ΞϓϦ͔Β੍ݶͷઃఆɾղআ

    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO.BOBHFE4FUUJOHT IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO%FWJDF"DUJWJUZ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO'BNJMZ$POUSPMT ͭͷ'SBNFXPSL
  22. 4DSFFO5JNF"1* 'BNJMZ$POUSPMTɿอޢऀΞΧ΢ϯτʹΑΔঝೝ import FamilyControls AuthorizationCenter.shared.requestAuthorization { result in switch result

    { case .success: break case .failure(let error): …… } } ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOGBNJMZDPOUSPMTBVUIPSJ[BUJPODFOUFS w ঝೝΛٻΊΔ࣮૷͸؆୯ w ঝೝޙɺࣗಈͰ੍໿͕ͭ͘ ‣ อޢऀҎ֎͸ͦͷΞϓϦΛ ফͤͳ͘ͳΔ ‣ J$MPVE͔ΒαΠϯΞ΢τ Ͱ͖ͳ͘ͳΔ
  23. 4DSFFO5JNF"1* લఏɿϓϥΠόγʔอޢͷॏࢹ ͲΜͳΞϓϦ΍8FCΛӾཡ͔ͨ͠ɺ ຊਓͱอޢऀҎ֎ʹ͸෼͔Βͳ͍ઃܭ w ར༻ΞϓϦ΍ӾཡαΠτ͝ͱʹ PQBRVFτʔΫϯ͕ఏڙ͞ΕΔ ‣ %FWJDF"DUJWJUZ .BOBHFE4FUUJOHTͰ

    ର৅ͷࢦఆʹ࢖͏ w ΞϓϦ໊΍63-͸औಘͰ͖ͳ͍ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOGBNJMZDPOUSPMTGBNJMZBDUJWJUZ ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ
  24. 4DSFFO5JNF"1* 'BNJMZ"DUJWJUZ1JDLFSɿର৅ͷબ୒ͱτʔΫϯऔಘ w 4XJGU6*Ͱઐ༻ͷ ίϯϙʔωϯτ͕ ఏڙ͞Ε͍ͯΔ w ϢʔβʔʹΑΔબ୒Ͱ ॳΊͯτʔΫϯΛऔಘ Ͱ͖Δ

    import FamilyControls struct ContentView: View { @State var selection = FamilyActivitySelection() var body: some View { VStack { FamilyActivityPicker(selection: $selection) } } } IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOGBNJMZDPOUSPMTGBNJMZBDUJWJUZQJDLFS ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ ˞ࢀߟɿJ04ʹ͋Δྨࣅը໘ ʢεΫϦʔϯλΠϜͷ੍ݶઃఆʣ w DBUFHPSZ5PLFOT w BQQMJDBUJPO5PLFOT w XFC%PNBJO5PLFOT
  25. 4DSFFO5JNF"1* ManagedSettings DeviceActivity FamilyControls อޢऀΞΧ΢ϯτʹΑΔঝೝ ϓϥΠόγʔͷอޢ ར༻੍ݶͷ੍ޚ ࢖༻ঢ়گͷ؂ࢹ ΞϓϦىಈͤͣίʔυ࣮ߦ ΞϓϦ͔Β੍ݶͷઃఆɾղআ

    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO.BOBHFE4FUUJOHT IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO%FWJDF"DUJWJUZ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO'BNJMZ$POUSPMT ͭͷ'SBNFXPSL
  26. 4DSFFO5JNF"1*ͷൃల w 4DSFFO5JNF"1*ͷ1SPQPTBM ‣ ࣮ݱ͞Ε͍ͯͳ͍࢓༷΋͋Δ   w ͜͏ͳͬͨΒ͍͍ͳʜʜ( ‣

    ͓ࢠ༷༻ΞΧ΢ϯτҎ֎Ͱ΋࢖͑Δ ‣ NBD04ʹ΋"1*ఏڙ͞ΕΔ ࠓޙʹ޲͚ͯ IUUQTTDSFFOUJNFBQJDPNTDSFFOUJNFBQJ GVODRVFSZ&WFOUT GSPN%BUF UP%BUF  ɹɹɹɹɹɹɹɹɹFWFOU5ZQFT<PQFO"QQ DMPTF"QQ> <&WFOU>
  27. 4DSFFO5JNF"1*ͷൃల w 4DSFFO5JNF"1*ͷ1SPQPTBM ‣ ࣮ݱ͞Ε͍ͯͳ͍࢓༷΋͋Δ   w ͜͏ͳͬͨΒ͍͍ͳʜʜ( ‣

    ͓ࢠ༷༻ΞΧ΢ϯτҎ֎Ͱ΋࢖͑Δ ‣ NBD04ʹ΋"1*ఏڙ͞ΕΔ ࠓޙʹ޲͚ͯ IUUQTTDSFFOUJNFBQJDPNTDSFFOUJNFBQJ GVODRVFSZ&WFOUT GSPN%BUF UP%BUF  ɹɹɹɹɹɹɹɹɹFWFOU5ZQFT<PQFO"QQ DMPTF"QQ> <&WFOU>
  28. ࣗݾ؅ཧʹ͸ผͷσʔλ΋׆༻ ࠓޙʹ޲͚ͯ 4DSFFO5JNF"1*Ҏ֎ʹ΋ɺ৭ʑͳํ๏Ͱࣗಈه࿥ w ࣗ୐಺ͷ༷ʑͳηϯαʔ ‣ ΧϝϥʗೋࢎԽ୸ૉೱ౓ܭʗʜʜ w NBD04্ͷσʔλ ‣

    ΞΫςΟϒͳ΢Οϯυ΢ʗϒϥ΢βͷཤྺʗʜʜ w "QQMF੡඼ ‣ )FBMUI,JUʜʜਭ຾΍ӡಈͷ࣌ؒ ‣ /FBSCZ*OUFSBDUJPO'SBNFXPSLʜʜՈͷதͰͷߦಈ ‣ ʜʜ IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
  29. ·ͱΊ ࣗݾ؅ཧͷເͱ4DSFFO5JNF"1* w എܠ ‣ ࣌ؒɾλεΫ؅ཧͷͨΊʹɺࣗ෼ʹ߹ͬͨ࠷ߴͷπʔϧ͕΄͍͠ ‣ ࢖్ෆ໌࣌ؒΛ೺ѲͰ͖ΔΑ͏ʹɺ͋ΒΏΔߦಈΛࣗಈͰه࿥ͯ͠Έ͍ͨ w 4DSFFO5JNF"1*͕J04͔Βొ৔͢Δ͕ɺݱঢ়Ͱ࢖͑Δͷ͸͓ࢠ༷༻J$MPVEΞΧ΢ϯτͷΈ

    ‣ %FWJDF"DUJWJUZɿ࢖༻ঢ়گͷ؂ࢹʗ؂ࢹ݁ՌΛ΋ͱʹίʔυ࣮ߦ ‣ .BOBHFE4FUUJOHTɿ༷ʑͳར༻੍ݶͷઃఆɾղআ ‣ 'BNJMZ$POUSPMTɿอޢऀΞΧ΢ϯτʹΑΔঝೝʗϓϥΠόγʔอޢͷͨΊͷτʔΫϯఏڙ w 4DSFFO5JNF"1*Ҏ֎ʹ΋ɺ৭ʑࢼ͠ͳ͕Βࣗݾ؅ཧͷͨΊͷπʔϧΛ࡞͍͖͍ͬͯͨ) ࣌఺ͷ৘ใͰ͢ɻ#FUBͷͨΊมߋ͞Ε͍ͯΔ৔߹͕͋Γ·͢ɻ