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

(Appleが)やりたい放題 Swift Attributes

notoroid
March 24, 2021

(Appleが)やりたい放題 Swift Attributes

札幌iPhoneアプリ開発者勉強協会資料
https://devsap.connpass.com/event/207402/

題目
1) SwiftUIで説明しづらい@定義
2) Swift Attributesを大枠で分けてみる
3) Swift Attributesから見るSwiftの進化
4) まとめ

notoroid

March 24, 2021
Tweet

More Decks by notoroid

Other Decks in Technology

Transcript

  1. "QQMF͕
    ΍Γ͍ͨ์୊
    4XJGU"UUSJCVUFT

    View full-size slide

  2. ೳొཁ !OPUPSPJE

    w J04ΞϓϦ։ൃऀ
    w ԰߸͍Γ·͢ిࢉاը
    w !OPUPSPJE
    w !JSJNBTV
    w ࠷ۙͷಈ޲
    w ϒϩά࡮৽͠·ͨ͠

    View full-size slide

  3. ॆిใࠂ͞Μ #BUUFSFDFJWFS

    w όοςϦʔϞχλʔ ϢʔςΟϦςΟʔ

    w ࠷େ୆ ࣮ػϦϞʔτ୆

    w ख࣋ͪͷJ1IPOF͔Βଞʹ͍࣋ͬͯΔ
    J1IPOF J1BEͳͲͷػثͷόοςϦʔঢ়ଶ֬
    ೝՄೳ
    w ࣗ୐ʹ͋ΔJ1IPOFͷόοςϦʔঢ়ଶ֬ೝՄ

    View full-size slide

  4. ॆిใࠂ͞Μ #BUUFSFDFJWFS

    w "QQMF8BUDIରԠ
    w $PNQMJDBUJPOTରԠ
    w ॆి׬ྃ௨஌
    w ॆి׬ྃΛ఻͑ͯ͘ΕΔ௨஌Λ௥Ճ
    w ҎԼʹࢦఆ͢Δ͜ͱͰόοςϦʔΛέ
    Ξ͢Δ͜ͱ͕Մೳ
    w Կ͔ͱߴ͍J1IPOFΛ௕࣋ͪͤ͞Δͷʹ༗༻

    View full-size slide

  5. ࿩͢͜ͱ
    w 4XJGU"UUSJCVUFTͷେ࿮
    w 4XJGU6*ͱ4XJGU"UUSJCVUFTͷؔ܎
    w "QQMFͷͱΓ͏Δಈ͖Λ༧ଌ͢Δ

    View full-size slide

  6. ࿩͞ͳ͍͜ͱ
    w 4XJGU"UUSJCVUFTͷৄࡉ
    w ιʔείʔυΛ࢖ͬͨղઆ

    View full-size slide

  7. ୊໨
    w 4XJGU6*Ͱઆ໌ͮ͠Β͍!ఆٛ
    w 4XJGU"UUSJCVUFTΛେ࿮Ͱ෼͚ͯΈΔ
    w 4XJGU"UUSJCVUFT͔ΒݟΔ4XJGUͷਐԽ
    w ·ͱΊ

    View full-size slide

  8. 4XJGU6*Ͱઆ໌ͮ͠Β͍!ఆٛ

    View full-size slide

  9. J045FDI#MPH JSJNBTVDPN
    ઈࢍ౤ߘதͰ͢

    View full-size slide

  10. 4XJGU6* J04ΞϓϦΛओʹ౤ߘ

    View full-size slide

  11. ϒϩάهࣄΛ
    ݕ౼͍ͯͨ͋͠Δ೔

    View full-size slide

  12. TextFieldͷهࣄΛॻ͜͏

    View full-size slide

  13. import SwiftUI


    struct ContentView: View {


    @State var myfield = ""


    @ScaledMetric(relativeTo: .body) var


    @ScaledMetric(relativeTo: .body) var


    @ScaledMetric(relativeTo: .body) var


    @ScaledMetric(relativeTo: .body) var


    var body: some View {


    VStack {


    Spacer()


    TextField("Label", text: $my


    .padding(EdgeInsets(top:
    .background(


    Rectangle()


    .stroke(Color.gr


    )


    .padding()


    TextField("Label", text: $my


    .padding(EdgeInsets(top:


    View full-size slide

  14. import SwiftUI


    struct ContentView: View {


    @State var myfield = ""


    @ScaledMetric(relativeTo: .body) var


    @ScaledMetric(relativeTo: .body) var


    @ScaledMetric(relativeTo: .body) var


    @ScaledMetric(relativeTo: .body) var


    var body: some View {


    VStack {


    Spacer()


    TextField("Label", text: $my


    .padding(EdgeInsets(top:
    .background(


    Rectangle()


    .stroke(Color.gr


    )


    .padding()


    TextField("Label", text: $my


    .padding(EdgeInsets(top:


    View full-size slide

  15. !4UBUF
    !4DBMF.FUSJD
    ͱ͸Կ

    View full-size slide

  16. !ఆٛʹ͍ͭͯ
    આ໌ͨ͜͠ͱ͕ͳ͍ɻ

    View full-size slide

  17. ͦ΋ͦ΋!ఆٛͱ͍͏
    ໊শͰ͢Βͳ͍ɻ

    View full-size slide

  18. !ఆٛͱ͸ͳΜͳͷ͔

    View full-size slide

  19. QSPQFSUZ8SBQQFS
    ωλόϨ
    ͩΑɻ

    View full-size slide

  20. ͦΜͳࣄ͸
    Θ͔͍ͬͯΔͷͩΑɻ

    View full-size slide

  21. !ఆٛपΓେ࿮Ͱௐ΂ͯ
    "QQMFͷ܏޲Λ஌Γ͍ͨɻ

    View full-size slide

  22. 4XJGU"UUSJCVUFΛେ࿮Ͱ
    ·ͱΊ͍ͯΔ

    View full-size slide

  23. !ఆٛͷਖ਼໊ࣜশ͸
    4XJGU"UUSJCVUFT

    View full-size slide

  24. 4XJGU"UUSJCVUFࢀߟαΠτ
    w 4XJGUͷBUUSJCVUFશղઆʛશछ2JJUB
    w IUUQTRJJUBDPNTIUOLHNJUFNTDCBCDECD
    w "UUSJCVUFTŠ5IF4XJGU1SPHSBNNJOH-BOHVBHF 4XJGU

    w IUUQTEPDTTXJGUPSHTXJGUCPPL3FGFSFODF.BOVBM
    "UUSJCVUFTIUNM

    View full-size slide

  25. 4XJGU"UUSJCVUFTᶃ
    4XJGUʹ͸ɺએݴʹద༻͞ΕΔଐੑͱܕʹద
    ༻͞ΕΔଐੑͷछྨ͕͋Γ·͢ɻଐੑ͸ɺ
    એݴ·ͨ͸ܕʹؔ͢Δ௥Ճ৘ใΛఏڙ͠·
    ͢ɻ %FFQ-຋༁
    ɻ

    View full-size slide

  26. 4XJGU"UUSJCVUFTᶄ
    • @attribute name


    • @attribute name(attribute arguments)

    View full-size slide

  27. 4XJGU"UUSJCVUFTᶅ
    J044%,࣌఺Ͱछྨ

    View full-size slide

  28. BWBJMBCMF JOMJOBCMF PCKD 6*"QQMJDBUJPO.BJO VOLOPXO
    EJTDBSEBCMF3FTVMU NBJO PCKD.FNCFST VTBCMF'SPN*OMJOF
    EZOBNJD$BMMBCMF OPOPCKD QSPQFSUZ8SBQQFS
    XBSO@VORVBMJ
    fi
    FE@BD
    DFTT
    EZOBNJD.FNCFS-P
    PLVQ
    /4"QQMJDBUJPO.BJO SFTVMU#VJMEFS BVUPDMPTVSF
    GSP[FO /4$PQZJOH
    SFRVJSFT@TUPSFE@QSP
    QFSUZ@JOJUT
    DPOWFOUJPO
    (,*OTQFDUBCMF /4.BOBHFE UFTUBCMF FTDBQJOH

    View full-size slide

  29. ެࣜͷϖʔδͰ͸ΞϧϑΝϕοτॱ
    ಛʹάϧʔϓԽ͞Ε͍ͯͳ͍

    View full-size slide

  30. ଟ͍ͷͰେ࿮Ͱ෼ྨͯ͠Έͨ

    View full-size slide

  31. େ࿮Ͱ෼ྨᶃ
    B ઌୡݴޠͱͷޓ׵ੑ
    C 4XJGUݴޠͷ࢓༷Λิ଍͢Δ΋ͷ
    D ϑϨʔϜϫʔΫ։ൃͷαϙʔτ
    E 4UPSZCPBSETʹؔ͢Δಛघࣄ৘ʹΑΔ΋ͷ
    F ݻ༗ϑϨʔϜϫʔΫ΁ͷରԠ
    G ֎తͳ࢓༷มߋʹରԠ͢Δඞཁ͕͋Δ΋ͷ

    View full-size slide

  32. େ࿮Ͱ෼ྨᶄ
    H Ϗϧυ࣌ͷνϡʔχϯάΛ໌ࣔ͢Δ΋ͷ
    I ςετ࣌ͷརศੑΛਤΔ΋ͷ
    J ஗ԆධՁɾಈతࢀরΛಋೖ͍ͨ͠΋ͷ
    K ଞݴޠͱͷݺͼग़͠ํ๏Λॊೈʹ͢Δ΋ͷ
    L 4XJGUݴޠࣗମΛ֦ு͢Δ΋ͷ

    View full-size slide

  33. Bઌୡݴޠͱͷޓ׵ੑ
    w $ݴޠΛݺͼग़͠Մೳʹ 0CKFDUJF$Λݺͼग़͠Մೳʹ
    w ؔ਺ϙΠϯλͷޓ׵ੑࢦఆ !DPOWFOUJPO

    w ໭Γ஋͕͋Δ͕ෆཁѻ͍ʹରԠ͢ΔͨΊ !EJTDBSEBCMF3FTVMU

    w 0CKFDUJWF$ͷϓϩύςΟͷίϐʔଐੑରԠ !/4$PQZJOH

    w NBJOؔ਺ͷӅṭ !6*"QQMJDBUJPO.BJO !/4"QQMJDBUJPO.BJO

    w ϚϧνϓϥοτϑΥʔϜʹ΋ରԠͨ͠NBJOؔ਺ͷӅṭ !NBJO

    View full-size slide

  34. C4XJGUݴޠͷ࢓༷Λิ଍͢Δ΋ͷ
    w είʔϓ֎Ͱ΋Ϋϩʔδϟʔอ࣋Λ໌ࣔ͢Δ΋ͷ !FTDBQJOH

    View full-size slide

  35. DϑϨʔϜϫʔΫ։ൃͷαϙʔτ
    w ϑϨʔϜϫʔΫར༻ऀʹඇਪ঑Ͱ͋Δ͜ͱΛࣔ͢(@available)

    w SwiftͰ࡞੒͞ΕͨϑϨʔϜϫʔΫ

    w ʙΛObjectie-C͔Βݺͼग़͠Մೳʹ(@objc)

    w ʙΛObjective-C͔Βݺͼग़͠ෆՄʹ(@nonobjc)

    w ʙΛObjective-C͔ΒҰׅͰݺͼग़͠Մೳʹ(@objcMembers)

    w τοϓϨϕϧͷΦϒδΣΫτ͕ଞϑϨʔϜϫʔΫͱࠞࡏΛආ͚Δ(@warn_unquali
    fi
    ed_access)

    w ໌ࣔతʹকདྷόʔδϣϯͰͷվมΛ੍ݶ͢Δ΋ͷ(@frozen)

    View full-size slide

  36. E4UPSZCPBSETʹؔ͢Δಛघࣄ৘ʹΑΔ΋ͷ
    w 4XJGUݴޠͷݫີ͔͞Βݴ͏ͱ*OUFSGBDF#VJMEFSͷ"DUJPO 0VUMFU͸͔ͳΓ
    ಛघͳಈ͖

    w @IBAction

    w @IBOutlet

    w @IBDesignable

    w @IBInspectable

    w @IBSegueAction

    View full-size slide

  37. Fݻ༗ϑϨʔϜϫʔΫ΁ͷରԠ
    w (BNF,JUʹରԠ͢Δ΋ͷ !(,*OTQFDUBCMF

    w $PSF%BUBʹରԠ͢Δ΋ͷ !/4.BOBHFE

    w !SFRVJSFT@TUPSFE@QSPQFSUZ@JOJUT

    View full-size slide

  38. G֎తͳ࢓༷มߋʹରԠ͢Δඞཁ͕͋Δ΋ͷ
    w ྻڍʹະ஌ͷఆؚ͕ٛ·Εͨ৔߹ͷ৚݅هड़ !VOLOPXO

    View full-size slide

  39. HϏϧυ࣌ͷνϡʔχϯάΛ໌ࣔ͢Δ΋ͷ
    w ΠϯϥΠϯల։ʹؔ͢Δ΋ͷ(@inlinable)

    w ΠϯϥΠϯల։಺Ͱͷར༻ʹ੍ݶ͢Δ΋ͷ(@usableFromInline)

    View full-size slide

  40. Iςετ࣌ͷརศੑΛਤΔ΋ͷ
    w ςετ࣌ʹΞΫηεՄೳͱ͢Δ(@testable)

    View full-size slide

  41. J஗ԆධՁΛಋೖ͍ͨ͠΋ͷ
    w Ҿ਺Ͱ౉͞Εͨ஋ΛΫϩʔδϟʔԽ͠஗ԆධՁͤ͞Δ(@autoclosure)

    View full-size slide

  42. Kଞݴޠͱͷݺͼग़͠ํ๏Λॊೈʹ͢Δ΋ͷ
    w ߏ଄ମΛॊೈͳҾ਺Ͱݺͼग़ͤΔ༷ʹ͢Δ΋ͷ(@dynamicCallable)

    w ߏ଄ମΛ࣮૷࣌ʹଘࡏ͠ͳ͍ϓϩύςΟ΁ΞΫηεՄೳͱ͢Δ΋ͷ
    (@dynamicMemberLookup)

    View full-size slide

  43. LݴޠࣗମΛ֦ு͢Δ΋ͷ
    w ม਺ʹ෇ՃͰ͖Δ4XJGU"UUSJCVUFΛ֦ு͢Δ !QSPQFSUZ8SBQQFS


    w ؔ਺ͷ໭Γ஋Λ༧໿ݴޠʹ·Ͱհೖ͠ػೳ֦ு͢Δ΋ͷ(@resultBuilder)

    View full-size slide

  44. 4XJGU"UUSJCVUFTͷҹ৅͸
    ࡶଟͳػೳͷू߹ʹݟ͑Δ

    View full-size slide

  45. ࡶଟ͕ͩ਺Λҙࣝ͠ͳ͍ͷ͸
    ༻్͝ͱ8FCͰݕࡧͯ͠࢖͏

    View full-size slide

  46. 4XJGU"UUSJCVUFʹݴޠࣗମΛ֦ு͢Δ
    ػೳ͕૿͑ͨ͜ͱͰݕࡧΩʔϫʔυΛ
    બͿͷʹ೉ّ

    View full-size slide

  47. 4XJGU"UUSJCVUFT͔ΒݟΔ
    4XJGUͷਐԽ

    View full-size slide

  48. छʹ෼͚͕ͨ

    View full-size slide

  49. छͰ΋ଟ͍Θ

    View full-size slide

  50. छ͔ΒछΛϐοΫΞοϓ

    View full-size slide

  51. 4XJGUਐԽͷྺ࢙ᶃ
    w 4XJGUॳظ
    w !*#0VUMFU !*#"DUJPO
    w $ݴޠɺ0CKFDUJWF$ͷػೳݺͼग़͠ɺ4%,ରԠ

    View full-size slide

  52. Bઌୡݴޠͱͷޓ׵ੑ
    w $ݴޠΛݺͼग़͠Մೳʹ 0CKFDUJF$Λݺͼग़͠Մೳʹ
    w ؔ਺ϙΠϯλͷޓ׵ੑࢦఆ !DPOWFOUJPO

    w ໭Γ஋͕͋Δ͕ෆཁѻ͍ʹରԠ͢ΔͨΊ !EJTDBSEBCMF3FTVMU

    w 0CKFDUJWF$ͷϓϩύςΟͷίϐʔଐੑରԠ !/4$PQZJOH

    w NBJOؔ਺ͷӅṭ !6*"QQMJDBUJPO.BJO !/4"QQMJDBUJPO.BJO

    w ϚϧνϓϥοτϑΥʔϜʹ΋ରԠͨ͠NBJOؔ਺ͷӅṭ !NBJO

    View full-size slide

  53. E4UPSZCPBSETʹؔ͢Δಛघࣄ৘ʹΑΔ΋ͷ
    w 4XJGUݴޠͷݫີ͔͞Βݴ͏ͱ*OUFSGBDF#VJMEFSͷ"DUJPO 0VUMFU͸͔ͳΓ
    ಛघͳಈ͖

    w @IBAction

    w @IBOutlet

    w @IBDesignable

    w @IBInspectable

    w @IBSegueAction

    View full-size slide

  54. 4XJGUਐԽͷྺ࢙ᶄ
    w 4XJGU࢓༷҆ఆظ
    w 4XJGUͷ࢓༷͕ݻ·Γ࢝Ί֦ுػೳ͕4XJGU"UUSJCVUF΁௥Ճ͢ΔΑ͏ʹ
    w 4XJGU͚ͩͰϑϨʔϜϫʔΫ࣮૷Մೳʹ

    View full-size slide

  55. DϑϨʔϜϫʔΫ։ൃͷαϙʔτ
    w ϑϨʔϜϫʔΫར༻ऀʹඇਪ঑Ͱ͋Δ͜ͱΛࣔ͢(@available)

    w SwiftͰ࡞੒͞ΕͨϑϨʔϜϫʔΫ

    w ʙΛObjectie-C͔Βݺͼग़͠Մೳʹ(@objc)

    w ʙΛObjective-C͔Βݺͼग़͠ෆՄʹ(@nonobjc)

    w ʙΛObjective-C͔ΒҰׅͰݺͼग़͠Մೳʹ(@objcMembers)

    w τοϓϨϕϧͷΦϒδΣΫτ͕ଞϑϨʔϜϫʔΫͱࠞࡏΛආ͚Δ(@warn_unquali
    fi
    ed_access)

    w ໌ࣔతʹকདྷόʔδϣϯͰͷվมΛ੍ݶ͢Δ΋ͷ(@frozen)

    View full-size slide

  56. 4XJGUਐԽͷྺ࢙ᶅ
    w ࠷ۙ ʙ

    w ଞݴޠͰͷݺͼग़͠Λ༻ҙʹ͢ΔͨΊಈతࢀরΛ࠶औΓࠐΈ
    w !ఆٛΛ֦ுͰ͖ΔΑ͏ʹ
    w ໭Γ஋ͷ֦ு ༧໿ޠ·Ͱؔ༩͢Δڍಈมߋ͕Մೳ

    View full-size slide

  57. 4XJGUͷΞοϓσʔτྺ࢙ᶅ
    w ࠷ۙ ʙ

    w ଞݴޠͰͷݺͼग़͠Λ༻ҙʹ͢ΔͨΊಈతࢀরΛ࠶औΓࠐΈ
    w !ఆٛΛ֦ுͰ͖ΔΑ͏ʹ
    w ໭Γ஋ͷ֦ு ༧໿ޠ·Ͱؔ༩͢Δڍಈมߋ͕Մೳ

    ॏཁ

    View full-size slide

  58. LݴޠࣗମΛ֦ு͢Δ΋ͷ
    w ม਺ʹ෇ՃͰ͖Δ4XJGU"UUSJCVUFΛ֦ு͢Δ !QSPQFSUZ8SBQQFS


    w ؔ਺ͷ໭Γ஋Λ༧໿ݴޠʹ·Ͱհೖ͠ػೳ֦ு͢Δ΋ͷ(@resultBuilder)

    View full-size slide

  59. 4XJGU6*Ͱͷ4XJGU"UUSJCVUF
    w !SFTVMU#VJMEFS !@GVODUJPO#VJMEFS͔Β໊শมߋ

    w 4XJGUͷ༧໿ޠɺฒͼ·Ͱؔ༩ 4XJGU6*্ͰͷJGจ

    w هड़ϧʔϧΛڧ੍ 4XJGU6*Ͱ͸ݴޠͷ%4-Խʹ࢖༻

    w هड़ΤϥʔΛίϯύΠϥϨϕϧͰิ଍Ͱ͖Δ
    w !QSPQFSUZ8SBQQFS
    w ม਺ʹ෇༩͢Δ4XJGU"UUSJCVUFΛ֦ு ಠࣗఆٛͷ௥Ճ

    w 4XJGU6*Ͱ͸ม਺ͷମࡋΛอͪͭͭ୺తʹػೳ෇༩ʹ࢖༻

    View full-size slide

  60. struct ContentView: View {


    @State var isRounded = true // propertyWrapper


    // ViewͷBody͸1ͭͷView͔͠هड़Ͱ͖ͳ͍


    var body: some View {


    // isRounded ʙ else ·Ͱ͸resultBuilderʹΑΔهड़ϧʔϧͰ͋ͬͯݴޠͷifจͱ͸ҟͳΔ


    // ৗʹܕ͸ҧ͏͕1ͭͷViewΛฦ͢


    if isRounded {


    RoundedRectangle(cornerRadius: 20)


    .foregroundColor(.orange)


    .frame(width: 72, height: 72)


    .onTapGesture {


    isRounded = !isRounded


    }


    } else {


    Rectangle()


    .foregroundColor(.blue)


    .frame(width: 72, height: 72)


    .onTapGesture {


    isRounded = !isRounded


    }


    }


    }


    }

    View full-size slide

  61. struct ContentView: View {


    @State var isRounded = true // propertyWrapper


    // ViewͷBody͸1ͭͷView͔͠هड़Ͱ͖ͳ͍


    var body: some View {


    // isRounded ʙ else ·Ͱ͸resultBuilderʹΑΔهड़ϧʔϧͰ͋ͬͯݴޠͷifจͱ͸ҟͳΔ


    // ৗʹܕ͸ҧ͏͕1ͭͷViewΛฦ͢


    if isRounded {


    RoundedRectangle(cornerRadius: 20)


    .foregroundColor(.orange)


    .frame(width: 72, height: 72)


    .onTapGesture {


    isRounded = !isRounded


    }


    } else {


    Rectangle()


    .foregroundColor(.blue)


    .frame(width: 72, height: 72)


    .onTapGesture {


    isRounded = !isRounded


    }


    }


    }


    }
    !QSPQFSUZ8SBQQFS
    !SFTVMU#VJMEFS

    View full-size slide

  62. ։ൃऀ͔Βݟͨ
    4XJGUͷΠϝʔδ
    ˡ$ݴޠɺ0CKFDUJWF$΋αϙʔτ͢Δ৽ݴޠ
    ˡݴޠػೳ͕ॆ࣮͠ɺ'31Ͱ࠷৽ϓϩάϥϛϯάٕ
    ज़ΛಋೖͰ͖ΔΑ͏ʹͳͬͨɻ
    4XJGU6*
    ݴޠػೳ͕ҙਤ͠ͳ͍ํ޲Ͱ֦ு

    View full-size slide

  63. "QQMF͕΍Γ͍ͨ์୊4XJGU
    • ݴޠతʹ͸Web։ൃऀʹ਌࿨ੑ͕͋Δ༷ʹઃܭ

    • FRPʹ઀ۙ͢ΔΘ͚Ͱ΋ͳ͍(ϦΞΫςΟϒϓϩάϥϛϯά)

    • OOPʹݻࣥ͢ΔΘ͚Ͱ΋ͳ͍(ΦϒδΣΫτࢦ޲)

    • ݴޠ࢓༷͸AppleҎ֎΋αϙʔτ͢Δ

    • (UbuntuɺCentOSɺAmazon Linux, Windows10)

    • ݴޠ࢓༷͕ݻ·ͬͯ΋Apple͸૊ΈࠐΈ͍ͨػೳ͸૊ΈࠐΉ

    View full-size slide

  64. ͔͜͜Β͸༧ଌ

    View full-size slide

  65. "QQMFͷ΍Γ͍ͨ์୊͸
    Ͳ͜ʹ޲͔͏ͷ͔

    View full-size slide

  66. ΋ͪΖΜͦ͏ͩ

    View full-size slide

  67. ΋ͬͱ਎ۙͳଘࡏ͕
    ͍Δ͡Όͳ͍͔ɻ

    View full-size slide

  68. 8FC"TTFNCMZ͔Βͷ
    8FCϑϩϯτΤϯυ
    ରԠ

    View full-size slide

  69. ·ͱΊ
    w 4XJGU"UUSJCVUFTʹ͍ͭͯେ࿮Ͱ·ͱΊ·ͨ͠
    w 4XJGUͷݴޠ࢓༷͔Β֎ΕΔػೳ͕ࡶଟʹ4XJGU"UUSJCVUFTʹ௥Ճ͞
    Ε͍ͯ·͢
    w 4XJGUͷݴޠ࢓༷ʹؔ܎ͳ͘"QQMF͸ࣗ෼ͷ΍Γ͍ͨػೳΛͶ͡ࠐΈ
    ·͢

    View full-size slide

  70. IUUQTJSJNBTVDPN
    <13>#MPHਵ࣌౤ߘத

    View full-size slide

  71. ࢀߟ
    w 4XJGUͷBUUSJCVUFશղઆʛશछ2JJUB
    w IUUQTRJJUBDPNTIUOLHNJUFNTDCBCDECD
    w "UUSJCVUFTŠ5IF4XJGU1SPHSBNNJOH-BOHVBHF 4XJGU

    w IUUQTEPDTTXJGUPSHTXJGUCPPL3FGFSFODF.BOVBM"UUSJCVUFTIUNM
    w ʲ4XJGUʳ1SPQFSUZ8SBQQFSTͱ͸ʁc଎Ͱา͘ώτ
    w IUUQTXXXOEXBMLFSDPNTXJGUQSPQFSUZXSBQQFST
    w 'VODUJPO#VJMEFSͰ༡΅͏2JJUB
    w IUUQTRJJUBDPNUBSVOPOJUFNTFEBDDCE
    w 4XJGUͰ3FBDUJWF1SPHSBNNJOH2JJUB
    w IUUQTRJJUBDPNTIPIFJZPLPZBNBJUFNTBBBCE

    View full-size slide