Share
Embed
宣言的UIの状態管理とアーキテクチャSwiftUIとGraphQLによる実践/swiftui-graphql
宣言的UI
https://speakerdeck.com/sonatard/xuan-yan-de-ui
GraphQL実践ノウハウ
https://speakerdeck.com/sonatard/graphql-knowhow
GraphQLの誤解
https://speakerdeck.com/sonatard/rethinking-graphql
#RoppongiGraphQL
https://twitter.com/sonatard/status/1439124499023101952
sonatard
September 18, 2021
Transcript
122 slides
-
3 "QQJGZ w 4IPQJGZɺ#"4&ͷJ04ɺ"OESPJEͷΞϓϦΛ/P$PEFͰϦϦʔε͢ΔαʔϏε w ཧը໘͔ΒωΠςΟϒΞϓϦͷσβΠϯΛಈతʹ͕มߋՄೳ 8FC7JFXͰͳ͍ w %SPJE,BJHJͰൃද༧ఆͰ͢
w ΦϑϥΠϯళฮͱͷ࿈ܞ w όοΫΤϯυ w ($1ɺ(P w ࣾһਓ w ۀҕୗɺ෭ۀਓ w ࠾༻ w IUUQTBQQJGZJODDPNKPC -
5 ͡Ίʹ w 3FBDU͕ීٴͯ͠Ҏ߱(6*ϑϨʔϜϫʔΫͷଟ͘એݴత6*ʹͳΓ·ͨ͠ w ϑϩϯτΤϯυ w 3FBDUɺ7VFKTɺ"OHVMBS w ΞϓϦ
w 4XJGU6*ɺ+FUQBDL$PNQPTFɺ'MVUUFSɺ3FBDU/BUJWF w ·ͨએݴత6*ͷ͓͔͛Ͱ7JFX͕ঢ়ଶΛ࣋ͨͳ͘ͳΓɺ1SFTFOUBUJPO%PNBJO4FQBSBUJPO ͕ଅਐ͞Ε7JFXͷ։ൃ͕͘͢͠ͳΓ·ͨ͠ɻ 6*7JFX 4UBUF -
6 ͡Ίʹ w ͔͠͠ঢ়ଶ͕ͳ͘ͳͬͨΘ͚Ͱͳ͍ͨΊɺঢ়ଶΛཧΛ͢Δඞཁ͕͋Γ·͢ɻ w ͦͷΑ͏ͳதɺ'MVYɺ3FEVYɺ5IF$PNQPTBCMF"SDIJUFDUVSFͳͲଟ͘ͷঢ়ଶཧख๏ ͕ొ͖ͯ͠·ͨ͠ɻ w ͞Βʹ͜͜Ͱ(SBQI2-͕ొͨ͜͠ͱͰେ͖͘ύϥμΠϜγϑτ͕ى͜Ζ͏ͱ͠ ͍ͯ·͢ɻ
w ຊൃදͰɺଟ͘ͷΞʔΩςΫνϟ͕ొ͖ͯͨ͠ྺ࢙ΛḷΓͳ͕ΒɺͦΕͧΕͷղܾ ͨ͠՝ͱ๊͑Δ՝Λઆ໌͠ɺ࠷ऴతʹ(SBQI2-͕ղܾ͢Δ՝Λઆ໌͠·͢ɻ -
8 એݴత6*ͷঢ়ଶཧͱΞʔΩςΫνϟͷඞཁੑ w ΞʔΩςΫνϟΛߟ͑ͳͯ͘ಈ͘ͷ࡞Δ͜ͱ͕Ͱ͖·͢ɻ w ͔͠͠νʔϜͱͯ͠։ൃ্͍ͯ͘͠ͰɺΞʔΩςΫνϟΛܾఆ͠ɺ౷Ұͨ͠ํͰ ίʔυΛॻ͘͜ͱ։ൃੜ࢈ੑͷ্ͷͨΊʹආ͚ΒΕ·ͤΜɻ w ·ͨ։ൃੜ࢈ੑΛ্͛Δ͜ͱɺϓϩμΫτͷͨΊʹͱͯେͰ͢ w
ϢʔβͷϑΟʔυόοΫΛߴසͰड͚Δ͜ͱ͕Ͱ͖Δ w ࢢʹઌߦͰ͖Δ w গਓͷ։ൃνʔϜͰ։ൃՄೳʹͳΓɺίϛϡχέʔγϣϯίετ͕Լ͢Δ w ৽نͷΤϯδχΞ͕։ൃʹࢀՃ͢Δϋʔυϧ͕Լ͕Δ -
9 એݴత6*ͷঢ়ଶཧͱΞʔΩςΫνϟͷඞཁੑ w ҰํͰΞʔΩςΫνϟʹڽΓ͗ͯ͢͠·͍։ൃ্͕͕Βͳ͍͜ͱ͕͋Γ·͢ w ظతࢹΛॏࢹͯ͠ͷׂਖ਼͠͞Λٻ͠ա͗Δ͜ͱ͕తʹͳͬͯ͠·͏ w ͳίʔυ͕૿͑ͯ͠·͏ w ݕ౼ࣄ߲͕૿͑ͯ͠·͏
w ͜ΕͰίʔυͷ౷ҰͰ͖͍ͯͯɺظతͳ։ൃ্͕͕Γ·ͤΜɻ w Ӭଓతʹظతͳ։ൃ্͕͕Βͳ͚Εظతͳ։ൃ্͕Γ·ͤΜɻ w ͦͷͨΊ౷Ұੑͱγϯϓϧ͞ͷόϥϯεͷऔΕͨΞʔΩςΫνϟ͕ඞཁͱͳΓ·͢ɻ -
11 એݴత6*ͷঢ়ଶཧͱΞʔΩςΫνϟͷࢦ͖͢ΰʔϧ w γϯϓϧͳΞʔΩςΫνϟΛࢦͨ͢Ίʹɺ෮తͳ࣮Λ༰қʹ࣮ݱͰ͖Δ͜ͱ͕ େͰ͢ɻ w ΫϥΠΞϯτ։ൃͷதͰͷେ͖ͳׂͱͯ͠ҎԼͷ͕ͭ͋Γ·͢ɻ "1*ϦΫΤετͰσʔλΛऔಘ͢Δ
7JFX͕σʔλΛड͚औΓදࣔ͢Δ w ߋʹҰൠతʹΞϓϦͱͯ͠ͷύϑΥʔϚϯεͷͨΊʹҎԼΛ࣮ࢪ͠·͢ɻ w "1*͔Βऔಘͨ͠σʔλΛӬଓԽͯ͠࠶ར༻͢Δ w ͭ·Γ͜ΕΒΛγϯϓϧʹ࣮Ͱ͖ΔͱɺཧతͳΞʔΩςΫνϟΛ࣮ݱͰ͖ͦ͏Ͱ ͢ɻ -
12 એݴత6*ͷঢ়ଶཧͱΞʔΩςΫνϟͷࢦ͖͢ΰʔϧ 3PPU7JFX\ "1*ϦΫΤετʹΑΓσʔλΛऔಘ EBUB"1*ϦΫΤετ ϦΫΤετ༰ σʔλΛ7JFXʹͯ͠දࣔ͢Δ 7JFX EBUBWJFX
7JFX EBUBWJFX ^ 7JFX WJFX \ 5FYU WJFXOBNF 5FYU WJFXBHF ^ 7JFX WJFX \ 5FYU WJFXUJUMF *NBHF WJFXJNBHF63- ^ w ͦͷͨΊʹҎԼͷίʔυ͚ͩଘࡏ͢Δ͜ͱ͕ཧతͰ͢ w ͜Ε͚ͩͳΒզʑ͕࣮࣌ʹߟ͑Δ͜ͱͱ࣮ͷରԠ͕औΕ͓ͯΓɺͱͯతʹཧ ղͰ͖Δίʔυͱݴ͑·͢ɻ -
15 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙ 4UBSU 'MVY 3FEVY -JGUJOH 4UBUF6Q 5$" 3FEVY 5PPM,JU
35, 2VFSZ (SBQI2- 3FBDU 2VFSZ 3FBDUDPSF νʔϜͷࢥ ΫϥΠΞϯτ Ωϟογϡ ୯ํσʔλϑϩʔ 3FEVYͷվྑ ϘΠϥʔ ςϯϓϨʔτͷݮ 3FDPJM 4UBUFߋ৽ͷ Λ7JFX͔Β 4JOHMF4PVSDFPG5SVUI ΫϥΠΞϯτ ΩϟογϡΛ3FEVYͰ࣮ݱ ΫϥΠΞϯτ ΩϟογϡΛ3&45Ͱ࣮ݱ ࠓճࢦ͢ΰʔϧ -
17 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙'MVY 4UBSU 'MVY 3FEVY -JGUJOH 4UBUF6Q 5$" 3FEVY 5PPM,JU
35, 2VFSZ (SBQI2- 3FBDU 2VFSZ 3FBDUDPSF νʔϜͷࢥ ΫϥΠΞϯτ Ωϟογϡ 3FEVYͷվྑ ϘΠϥʔ ςϯϓϨʔτͷݮ 3FDPJM 4UBUFߋ৽ͷ Λ7JFX͔Β 4JOHMF4PVSDFPG5SVUI ΫϥΠΞϯτ ΩϟογϡΛ3FEVYͰ࣮ݱ ΫϥΠΞϯτ ΩϟογϡΛ3&45Ͱ࣮ݱ ୯ํσʔλϑϩʔ -
18 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙'MVY w 'MVY'BDFCPPL͕ఏএͨ͠ঢ়ଶཧͷΞʔΩςΫνϟͰ͢ɻ w ࠂνʔϜͷ+JOH$IFO͕ఏҊʁ3FBDUDPSFνʔϜఏҊͰͳ͍ɻ w "DUJPO͕ൃߦ͞ΕΔͱ%JTQBUDIFSʹ"DUJPO͕͞Εͯɺରͷ"DUJPOΛड͚औΔ͖ 4UPSFͯ͢ʹ௨͞Ε·͢ɻ w
ҎԼͷਤͰΘ͔ΓͮΒ͍Ͱ͕͢ɺͭͷ%JTQBUDIFS͔Β͋Δ"DUJPO͕ෳͷ4UPSFʹ ͞ΕΔΠϝʔδͰ͢ɻ w ͜ΕʹΑΓෳͷ4UPSFͯ͢ʹঢ়ଶมߋ͕ߦΘΕΔΑ͏ʹͳΓ·͢ɻ w ͜ͷҰ࿈ͷྲྀΕɺ6OJEJSFDUJPOBMEBUB fl PX ୯ํσʔλϑϩʔ ͱͯ͠ݺΕ͍ͯ· ͢ɻ -
21 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙'MVY w 50%0ΞϓϦͰߟ͑ͯΈ·͢ w ྃҰཡը໘͔ΒຊΛಡΉͷνΣοΫΛ֎ͯ͠ະྃʹ͢ 50%0 શҰཡ 7JFX 50%0
ྃҰཡ 7JFX શҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ ɹআ͢Δ ྃҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ 50%0 ະྃҰཡ 7JFX ະྃҰཡͷঢ়ଶɹ ɹআ͢Δ ຊΛಡΉΛ ະྃʹมߋ ຊΛಡΉΛ ྃҰཡ͔Βআ ຊΛಡΉΛ ະྃҰཡʹՃ -
22 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙'MVY w શҰཡ7JFX͔ΒຊΛಡΉͷνΣοΫΛ֎͢ 50%0 શҰཡ 7JFX 50%0 ྃҰཡ 7JFX
શҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ ɹআ͢Δ ྃҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ 50%0 ະྃҰཡ 7JFX ະྃҰཡͷঢ়ଶɹ ɹআ͢Δ ຊΛಡΉΛ ͔ྃΒআ ຊΛಡΉΛ શҰཡ͔Βআ ຊΛಡΉΛ ະྃҰཡʹՃ -
23 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙'MVY w ະྃҰཡ7JFX͔Βআ͢ΔͷνΣοΫΛೖΕΔ 50%0 શҰཡ 7JFX 50%0 ྃҰཡ 7JFX
શҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ ɹআ͢Δ ྃҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ 50%0 ະྃҰཡ 7JFX ະྃҰཡͷঢ়ଶɹ ɹআ͢Δ আΛ͢Δʹ νΣοΫΛ͍ΕΔ আ͢ΔΛ ະྃҰཡ͔Βআ আΛ͢ΔΛ ྃҰཡʹՃ -
24 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙'MVY w ͯ͢ͷΠϕϯτΛ౷߹͢ΔͱҎԼͷΑ͏ʹ૬ޓʹݺͼग़͕͋͠ΓෳࡶʹͳΓཧͰ͖ ͳ͘ͳΔ 50%0 શҰཡ 7JFX 50%0 ྃҰཡ
7JFX શҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ ɹআ͢Δ ྃҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ 50%0 ະྃҰཡ 7JFX ະྃҰཡͷঢ়ଶɹ ɹআ͢Δ আΛ͢Δʹ νΣοΫΛ͍ΕΔ আ͢ΔΛ ະྃҰཡ͔Βআ আΛ͢ΔΛ ྃҰཡʹՃ 50%0 શҰཡ 7JFX 50%0 ྃҰཡ 7JFX શҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ ɹআ͢Δ ྃҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ 50%0 ະྃҰཡ 7JFX ະྃҰཡͷঢ়ଶɹ ɹআ͢Δ ຊΛಡΉΛ ະྃʹมߋ ຊΛಡΉΛ ྃҰཡ͔Βআ ຊΛಡΉΛ ະྃҰཡʹՃ 50%0 શҰཡ 7JFX 50%0 ྃҰཡ 7JFX શҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ ɹআ͢Δ ྃҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ 50%0 ະྃҰཡ 7JFX ະྃҰཡͷঢ়ଶɹ ɹআ͢Δ ຊΛಡΉΛ ͔ྃΒআ ຊΛಡΉΛ શҰཡ͔Βআ ຊΛಡΉΛ ະྃҰཡʹՃ -
25 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙'MVY w ࣮ࡍͷίϯϙʔωϯτʹ֊ߏଘࡏ͢ΔͨΊΑΓෳࡶʹͳΔ "7JFX "ঢ়ଶ 3PPU7JFX #7JFX #ঢ়ଶ "7JFX
"ঢ়ଶ "7JFX "ঢ়ଶ #7JFX #ঢ়ଶ -
26 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙'MVY w ͦ͜Ͱ'MVYͰ%JTQBUDIFSΛதԝͷϋϒͱͯ͠༻ҙͯ͠ɺ"DUJPOΛूதཧ͢Δ͜ͱʹ ͠·ͨ͠ 50%0 શҰཡ 7JFX 50%0 ྃҰཡ
7JFX શҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ ɹআ͢Δ ྃҰཡͷঢ়ଶ ɹຊΛಡΉɹ✅ 50%0 ະྃҰཡ 7JFX ະྃҰཡͷঢ়ଶɹ ɹআ͢Δ %JTQBDIFS ྃ"DUJPO 4UPSF͕ ߋ৽͞ΕΔͱ࠶ඳը ະྃ"DUJPO ྃ"DUJPO ະྃ"DUJPO %JTQBUDIFS"DUJPOʹ ैͬͯ4UPSFΛߋ৽ ͜ΕʹΑΓ%JTQBDIFS͔Β4UPSFͷ ߋ৽͕୯ํͰγϯϓϧʹͳΓ·͢ -
28 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FEVY 4UBSU 'MVY 3FEVY -JGUJOH 4UBUF6Q 5$" 3FEVY 5PPM,JU
35, 2VFSZ (SBQI2- 3FBDU 2VFSZ 3FBDUDPSF νʔϜͷࢥ ΫϥΠΞϯτ Ωϟογϡ 3FEVYͷվྑ ϘΠϥʔ ςϯϓϨʔτͷݮ 3FDPJM 4UBUFߋ৽ͷ Λ7JFX͔Β 4JOHMF4PVSDFPG5SVUI ΫϥΠΞϯτ ΩϟογϡΛ3FEVYͰ࣮ݱ ΫϥΠΞϯτ ΩϟογϡΛ3&45Ͱ࣮ݱ ୯ํσʔλϑϩʔ -
31 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FEVY w 3FEVYࡾݪଇ w 4JOHMF4PVSDFPG5SVUI w 'MVYΞϓϦέʔγϣϯʹෳͷঢ়ଶΛ͍࣋ͬͯ·͕ͨ͠ɺ3FEVYͰ୯Ұͷ 4UPSFΛ༻ҙͯͦ͜͠Ͱͯ͢ͷঢ়ଶΛཧ͠·͢ɻ w
͜ΕʹΑΓ'MVYͰ͋ͬͨΑ͏ʹ%JTQBUDIFS͔ΒෳͷҟͳΔ4UPSFΛߋ৽͢ΔΑ͏ ͳ͜ͱͳ͘ͳΓɺߟ͑ํͱͯ͠୯७ʹͳΓ·ͨ͠ɻ w 4UBUFJTSFBEPOMZ w 7JFXͳͲͰड͚औͬͨঢ়ଶͦͷͷߋ৽ͤͣɺ4UPSFʹ"DUJPOΛ%JTQBUDIͯ͠ɺ ͦͷ"DUJPOΛड͚औͬͨ3FEVDFS͕ঢ়ଶΛߋ৽͠·͢ w $IBOHFTBSFNBEFXJUIQVSFGVODUJPO w 3FEVDFSͱ͍͏७ਮͳ͕ؔ"DUJPOʹԠͯ͡4UPSFΛߋ৽͠·͢ -
32 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FEVY w 4JOHMF4PVSDFPG5SVUI શҰཡ7JFX ྃҰཡ 7JFX ະྃҰཡ 7JFX 4UPSF
5BTLҰཡ 4FMFDUPS 5BTLҰཡ UBTLEPOF 4FMFDUPS UBTLҰཡ UBTLEPOF 4FMFDUPS 5BTLҰཡ 'MVYͰঢ়ଶ͕7JFX͝ͱʹଘࡏ͍ͯͨ͠ ͨΊ%JTQBUDIFS͕ෳͷঢ়ଶΛߋ৽͍ͯͨ͠ ͕ɺ3FEVYͰ44P5Ͱ͋Δ4UPSF͚ͩΛߋ৽͠ ͯɺଞͷ3FBDUJWFʹಋग़͢Δ 3FEVDFS *GྃʹνΣοΫ"DUJPJO UBTLEPOFUSVF *GྃνΣοΫΛ֎͢ "DUJPO UBTLEPOFGBMTF ྃ"DUJPO ະྃ"DUJPO ྃ"DUJPO ະྃ"DUJPO -
34 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FEVY w ͜ΕΒͷಛੑʹΑΓҎԼͷ͕࣮ࣜݱ͞Ε͍ͯΔɻ w 4UPSF3FEVDFS ॳظঢ়ଶ "DUJPO w
ͭ·Γॳظঢ়ଶͱͯ͢ͷ"DUJPOΛه͓ͯ͘͜͠ͱͰɺͯ͢ͷঢ়ଶΛ࠶ݱ͢Δ͜ͱ ͕Ͱ͖·͢ w ͜ΕΛλΠϜτϥϕϧͱݺͼ·͢ w 3FEVYEFWUPPMͰɺ"DUJPOΛר͖ͨ͠Γ࠶ੜͨ͠Γ͢Δ͜ͱ͕Ͱ͖·͢ -
35 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FEVY શҰཡ7JFX 4UPSF UPEPҰཡ UPEP"1*-PEJOH UPEP"1*&SSPS 4FMFDUPS UPEPҰཡ 3FEVDFS
*GUPEPҰཡΛอଘ 4UPSFUPEPҰཡ "1*Ͱऔಘͨ͠UPEPҰཡ *GMPBEJOH"DUJPO UPEP"1*-PBEJOHUSVF *GMPBEJOHGBMTF"DUJPO UPEP"1*-PBEJOHGBMTF *G&SSPS"DUJPO UPEP"1*&SSPSGBMFT શҰཡදࣔ "DUJPO .JEEMFXBSF "1*ͰUPEPҰཡΛऔಘ EJTQBUDI UPEPҰཡΛอଘ EJTQBUDI MPBEJOHUSVF EJTQBUDI MPBEJOHGBMTF "1*ίʔϧ w "1*ίʔϧͷঢ়ଶཧ w 'MVY4UBOEBSE"DUJPO w සग़͢Δ"DUJPOΛύ λʔϯԽͨ͠ͷ ঢ়ଶͱҰॹʹMPBEJOHͱ FSSPSΛ࣋ͭ -
36 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FEVY w .VUBUJPO"1*࣮ߦޙͷ4UPSFߋ৽ w ྫ͑UPHHMF"1*Λ࣮ߦͨ͠ͱ͖ɺ4UPSFʹอ͍࣋ͯ͠ΔΛߋ৽͢Δඞཁ͕͋Δ w ͦ͏͠ͳ͍ͱ7JFX͕ߋ৽͞Εͳ͍ w ͘͠ඞͣ5P%Pͷ7JFXΛදࣔ͢ΔࡍʹຖճϑΣον͢Δඞཁ͕͋Δ
w ָ࣮͕ͩը໘ભҠ͝ͱʹ'FUDIͯ͠-PBEJOH͕ΔͷͰ69ѱ͍ w Ϣʔεέʔεʹ߹Θͤͯஅ -
38 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FEVY w 3PPUʹଘࡏ͢Δ4UPSFͷ՝1SPQ%SJMMJOH "7JFX 4UPSF UPEPঢ়ଶ 6TFSঢ়ଶ #7JFX શҰཡ7JFX
ྃҰཡ 7JFX 6TFS7JFX 5PEPঢ়ଶෆཁ "7JFXͱ#7JFXຊདྷUPEPঢ়ଶͱ6TFS ঢ়ଶඞཁͳ͍͕ɺ࠷Լ෦ͷ7JFXʹͨ͢ Ίʹܦ༝͠ͳ͚ΕͳΒͳ͍ ͜ΕΛ1SPQ%SJMMJOHͱݴ͏ 6TFSঢ়ଶෆཁ 5PEPঢ়ଶඞཁ 5PEPঢ়ଶඞཁ 6TFSঢ়ଶඞཁ -
39 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FEVY w 1SPQ%SJMMJOHͷղܾࡦ4FMFDUPS "7JFX 4UPSF UPEPঢ়ଶ 6TFSঢ়ଶ #7JFX શҰཡ7JFX
ྃҰཡ 7JFX 6TFS7JFX 4FMFDUPS 5PEPঢ়ଶͯ͢ 4FMFDUPS 5PEPྃঢ়ଶ 4FMFDUPS 6TFSঢ়ଶ "7JFXͱ#7JFXΛ εΩοϓͰ͖Δ ඞཁͳ͚ͩʹϑΟϧλʔ͠ ͯɺ֊ΛεΩοϓ͢Δ 4FMFDUPSΛ͏͜ͱͰɺ1SPQ %SJMMJOHΛճආͰ͖Δ -
40 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FEVY w 4UPSFΛෳ࡞Δ͜ͱ͕Ͱ͖Δ͕ਪ͞Ε͍ͯͳ͍ w 3FEVY%FW5PPMTͰλΠϜτϥϕϧͰ͖ͳ͘ͳΔ w Λׂ͍ͨ͠߹4UPSFͷதͰ%PNBJO͝ͱʹঢ়ଶΛׂͯ͠ɺͦΕ͝ͱʹ 3FEVDFSΛ࡞Δ w
'MVYͷΑ͏ʹҟͳΔ3FEVDFS͕ಉҰ"DUJPOΛड͚औΓҟͳΔঢ়ଶΛߋ৽͢Δ͜ͱՄೳ w ͭ·ΓϥΠϒϥϦͱͯ͠ͷ3FEVY'MVYΛ࣮ݱ͢ΔͨΊʹར༻Ͱ͖Δ w ͦͷͨΊݱࡏͰ'MVYઐ༻ϥΠϒϥϦ͕༻͞ΕΔ͜ͱ΄ͱΜͲͳ͍ w 3FEVY5PPM,JU w 3FEVYϘΠϥʔϓϨʔτ͕ଟ͍͜ͱ͕՝ͱݴΘΕΔΑ͏ʹͳ͖ͬͯͨͷͰɺղܾ ͢ΔͨΊͷϥΠϒϥϦ w 5$"ͰϘΠϥʔϓϨʔτ͕ؾʹͳΓग़ͨ࣌͠ʹࢀߟʹͳΔͱࢥ͍·͢ -
41 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FEVY w ՝ w ਖ਼نԽࣗͰ͠ͳ͚Ε͍͚ͳ͍ w ϘΠϥʔϓϨʔτ w 3FEVY5PPM,JUͰղܾɻ͔͠͠ίʔυྔݮ͕ͬͨ֓೦ݮ͍ͬͯͳ͍
w "1*ίʔϧͷঢ়ଶΛ4UPSFͰཧ͢ΔͷͰείʔϓ͕େ͖͍ w NVUBUJPOͷ"1*࣮ߦޙʹ4UPSFΛߋ৽͢Δඞཁ͕͋Δ -
42 ༨ஊͭͷ4JOHMF4PVSDFPG5SVUI w 4JOHMF4PVSDFPG5SVUIͱݴͬͨ࣌ʹͭͷҙຯ͕ଘࡏ͍ͯ͠·͢ɻ w 3FEVY͕ఏএ͢ΔΑ͏ͳʮΞϓϦέʔγϣϯ্ͷ4UPSFΛͭ࣋ͭʯͱ͍͏ҙຯ w ʮಉҰঢ়ଶΛॏෳͯ࣋ͨͣ͠ʹɺਖ਼نԽͨ͠ঢ়ଶΛ࣋ͭʯͱ͍͏ҙຯ w લऀͷҙຯͰɺઆ໌ͯ͠͠·͏ͱࠓޙͷઆ໌Ͱࠞཚ͕ੜ·ΕΔͷͰɺ͜ͷ͋ͱͷεϥΠ
υͰޙऀΛ4JOHMF4PVSDFPG5SVUIͱͯ͠આ໌Λଓ͚͍͖ͯ·͢ɻ w Ұൠతʹޙऀ͕ਖ਼͍͠Ͱ͢ɻ -
44 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙5IF$PNQPTBCMF"SDIJUFDUVSF 4UBSU 'MVY 3FEVY -JGUJOH 4UBUF6Q 5$" 3FEVY 5PPM,JU
35, 2VFSZ (SBQI2- 3FBDU 2VFSZ 3FBDUDPSF νʔϜͷࢥ ΫϥΠΞϯτ Ωϟογϡ 3FEVYͷվྑ ϘΠϥʔ ςϯϓϨʔτͷݮ 3FDPJM 4UBUFߋ৽ͷ Λ7JFX͔Β 4JOHMF4PVSDFPG5SVUI ΫϥΠΞϯτ ΩϟογϡΛ3FEVYͰ࣮ݱ ΫϥΠΞϯτ ΩϟογϡΛ3&45Ͱ࣮ݱ ୯ํσʔλϑϩʔ -
46 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙5IF$PNQPTBCMF"SDIJUFDUVSF w 3FEVYͱͷҧ͍ w "1*ίʔϧ w 3FEVYͷΑ͏ʹ"1*ίʔϧͳͲͷ෭࡞༻ΛNJEEMFXBSFͰ࣮ݱ͢ΔͷͰͳ͘ 3FEVDFSͷฦΓͷ& ff
FDUͰ࣮ݱ͢Δ w 4UPSFͱ3FEVDFS w 3FEVYͷΑ͏ʹͭͷ4UPSFΛ3PPUʹஔ͢Δ͜ͱΛਪ͍ͯ͠ΔΘ͚Ͱͳ͍ w ͦͷͨΊ֊ΛεΩοϓ͢Δ4FMFDUPS૬ͷͷͳ͍ w 'MVY3FEVYͷΑ͏ʹಉҰͷ"DUJPOΛҟͳΔ3FEVDFS͕ड͚औΒͳ͍ w ͦ͠Εʹ͍ۙ͜ͱΛΖ͏ͱͨ͠Β)JHI0SEFS3FEVDFSͰ࣮ݱ w ͜ΕΒͷํ3FBDUެࣜͷVTF3FEVDFSͱࣅ͍ͯͯγϯϓϧͳઃܭʹͳ͍ͬͯΔ w 3FEVYͷ֊εΩοϓ൱ఆతͳҙݟࠜڧ͍ -
47 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙5IF$PNQPTBCMF"SDIJUFDUVSF w ݸਓతͳٙ w 3FEVYͰʮ3PPUʹ4UPSFΛஔ͢Δ͜ͱʯͱʮ4FMFDUPSʹΑΔ1SPQ%SJMMJOHͷղ ܾʯʹΑΓɺϨεϙϯεΩϟογϡΛίϯϙʔωϯτπϦʔશମͰ༰қʹར༻Ͱ͖ ΔΑ͏ʹ͕ͨ͠ɺ5$"Ͱ͜ΕΛղܾ͢Δํ๏ΛఏҊ͍ͯ͠ͳ͍Α͏ʹײͨ͡ w 5$"ͰείʔϓΛดͯ͡ίϯϙʔωϯτؒΛҾͰ͍͚ͯ͠ྑ͍ͱ͍͏ߟ
͑ʁ w ͦ͘͠͏͍͏3FEVYͷΑ͏ʹ3PPUʹ4UPSFΛஔͯ͠&OWJSPONFOU0CKFDU Ͱ1SPQ%SJMMJOHΛղܾ͢Δʁ w &OWJSPONFOU0CKFDU໊લͷ௨ΓڥมͷΑ͏ͳઃఆʹ͏͖Ͱ͋·Γ ཚ༻͢Δ͖Ͱͳ͍Α͏ʹࢥ͑Δ -
48 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙5IF$PNQPTBCMF"SDIJUFDUVSF શҰཡ7JFX 4UPSF UPEPҰཡ 3FEVDFS JGUPHHMF JE JEͰҰகͨ͠UBTLΛ
UPHHMFͯ͠ߋ৽ 5PHHMF "DUJPO w 5$" w ྃͷνΣοΫϘοΫεΛೖΕͨ߹ͷྲྀΕ 3FEVDFS͕BDUJPOΛड͚ͯ4UPSFΛߋ৽ -
49 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙5IF$PNQPTBCMF"SDIJUFDUVSF w 5$"ͷίʔυ enum ToDoAction: Equatable { case append
case toggle(UUID) } let toDoReducer = Reducer< ToDoState, ToDoAction, ToDoEnvironment> { state, action, environment in switch action { case .append: state.tasks += [Task(title: "Ճ", done: false)] return .none case let .toggle(id): state.tasks = state.tasks.map { task in guard task.id == id else { return task } var newTask = task newTask.done = !newTask.done return newTask } return .none } } struct ToDoState : Equatable { var tasks: [Task] = [] var completed: [Task] { get{ return tasks.filter { $0.done } } } var unCompleted: [Task] { get{ return tasks.filter { !$0.done } } } } 3FEVDFS͕BDUJPOΛड͚ͯ4UBUFΛߋ৽ -
50 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙5IF$PNQPTBCMF"SDIJUFDUVSF w 5$"ͷίʔυ struct ToDoView: View { let store:
Store<ToDoState, ToDoAction> var body: some View { WithViewStore(self.store) { viewStore in VStack{ Button(action: { viewStore.send(.append) }){ Text("Ճ") } Text("શToDo") ToDoListView(todos: viewStore.todos, toggle: { id in viewStore.send(.toggle(id))}) Text("ະྃToDo") ToDoListView(todos: viewStore.unCompletedToDos, toggle: { id in viewStore.send(.toggle(id))}) Text("ྃࡁΈToDo") ToDoListView(todos: viewStore.completedToDos, toggle:{ id in viewStore.send(.toggle(id))}) } } } } 4UPSF͔Βঢ়ଶΛऔಘͯ͠දࣔ 7JFX͔Β4UPSFʹ"DUJPOΛૹ৴ͯ͠ঢ়ଶΛߋ৽ -
51 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙5IF$PNQPTBCMF"SDIJUFDUVSF શҰཡ7JFX 4UPSF UPEPҰཡ UPEP"1*-PEJOH UPEP"1*&SSPS 3FEVDFS JGදࣔ"DUJPO TUBUFMPBEJOHUSVF
SFUVSO"1* lUPEPTz ɹNBQ Ϩεϙϯεޭ"DUJPO JGϨεϙϯεޭ"DUJPO UPEPT TUBUFUPEPҰཡUPEPT TUBUFMPBEJOHGBMTF JGશҰཡϨεϙϯεࣦഊ"DUJPO FSSPS TUBUFUPEP"1*&SSPSFSSPS TUBUFMPBEJOHGBMTF શҰཡදࣔ "DUJPO w "1*ίʔϧͷঢ়ଶཧ 3FEVYͱҟͳΓNJEEMFXBSFͰͳ͘ 3FEVDFSͷதͰ& ff FDUΛ࡞ͯ͠ฦ͢͜ͱͰ ඇಉظॲཧΛ࣮ߦ͍ͯ͘͠ 3FEVDFSʹදࣔ"DUJPO͕͞ΕΔ MPBEJOHΛUSVFʹͯ͠"1*ίʔϧͷ & ff FDUΛ࡞ɺͦͷ& ff FDU݁ՌΛϨε ϙϯεޭ"DUJPO͢ Ϩεϙϯε݁Ռ͔Βঢ়ଶΛߋ৽ͯ͠ MPBEJOHΛGBMTFʹ͢Δ -
52 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙5IF$PNQPTBCMF"SDIJUFDUVSF w 5$"ͷίʔυ"1*ίʔϧ͋Γ "1*ίʔϧͷ݁ՌΛ5P%P"DUJPOHFU3FTQPOTFʹ ͍ͯ͠Δ let toDoReducer = Reducer<
ToDoState, ToDoAction, ToDoEnvironment> { state, action, environment in switch action { case .get: state.loading = true return environment.getAPI() .delay(for: 2, scheduler: environment.mainQueue.animation()) .catchToEffect() .map(ToDoAction.getResponse) case let .getResponse(.success(tasks)): state.tasks = tasks state.loading = false return .none case let .getResponse(.failure(error)): state.error = error.localizedDescription state.loading = false return .none } } -
53 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙5IF$PNQPTBCMF"SDIJUFDUVSF w 5$"ͷίʔυ"1*ίʔϧ͋Γ struct ToDoView: View { let store:
Store<ToDoState, ToDoAction> var body: some View { WithViewStore(self.store) { viewStore in ZStack { VStack{ if viewStore.error != "" { Text(viewStore.error) } Button(action: { viewStore.send(.append) }){ Text("Ճ") } Text("શToDo") TasksView(tasks: viewStore.tasks, toggle: { id in viewStore.send(.toggle(id))}) Text("ະྃToDo") TasksView(tasks: viewStore.unCompleted, toggle: { id in viewStore.send(.toggle(id))}) Text("ྃࡁΈToDo") TasksView(tasks: viewStore.completed, toggle:{ id in viewStore.send(.toggle(id))}) }.onAppear { viewStore.send(.get) } if viewStore.loading { ProgressView() } } } } } "1*ίʔϧͳ͠ͱͷҧ͍ MPBEJOH࣌ͷ1SPHSFTT7JFXͷՃ͞Εͨ͜ͱͰɺ ଞ΄΅ಉ͡ -
54 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙5IF$PNQPTBCMF"SDIJUFDUVSF w ՝جຊతʹ3FEVYͱಉ͡՝Λ๊͍͑ͯΔ w ਖ਼نԽࣗͰ͠ͳ͚Ε͍͚ͳ͍ w ϘΠϥʔϓϨʔτ w "1*ίʔϧͷঢ়ଶΛ4UPSFͰཧ͢ΔͷͰείʔϓ͕େ͖͍
w 3PPUʹஔ͔ͳ͚Ε3FEVYΑΓ͔ڱ͍ w NVUBUJPOͷ"1*࣮ߦޙʹ4UPSFΛߋ৽͢Δඞཁ͕͋Δ -
56 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q 4UBSU 'MVY 3FEVY -JGUJOH 4UBUF6Q 5$" 3FEVY 5PPM,JU
35, 2VFSZ (SBQI2- 3FBDU 2VFSZ 3FBDUDPSF νʔϜͷࢥ ΫϥΠΞϯτ Ωϟογϡ 3FEVYͷվྑ ϘΠϥʔ ςϯϓϨʔτͷݮ 3FDPJM 4UBUFߋ৽ͷ Λ7JFX͔Β 4JOHMF4PVSDFPG5SVUI ΫϥΠΞϯτ ΩϟογϡΛ3FEVYͰ࣮ݱ ΫϥΠΞϯτ ΩϟογϡΛ3&45Ͱ࣮ݱ ୯ํσʔλϑϩʔ -
57 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q w ʹ3FBDUެࣜCMPHʹൃද͞Ε·ͨ͠ɻ w ෳίϯϙʔωϯτͰར༻͢Δঢ়ଶΛɺඞཁͳίϯϙʔωϯτ·Ͱ্࣋ͪ͛Δ͜ͱΛݴ ͍·͢ɻ w 'MVY3FEVYͳͲͷΑ͏ʹΘ͔Γ͍͢ΞʔΩςΫνϟͷਤ͕ͳ͍ͨΊ͋·Γීٴ͕ਐ ΜͰ͍·ͤΜ͕ɺએݴత6*ͷঢ়ଶཧʹ͓͍ͯ࠷େͳ֓೦ͱݴ͑·͢ɻ
w ΞʔΩςΫνϟͱ͍͏ΑΓ͔એݴత6*ͷݪଇͱݴ͑ΔͰ͠ΐ͏ɻ w 3FBDUɺ4XJGU6*ɺ+FUQBDL$PNQPTFͰެࣜʹݴٴ͞Ε͍ͯΔ͜ͱ͔Βେͳ͜ͱͩͱ Θ͔Γ·͢ɻ w 3FBDU-JGUJOH4UBUF6Q w 4XJGU6*4PVSDFPG5SVUI 88%$ PS4JOHMF4PVSDFPG5SVUI w +FUQBDL$PNQPTF4UBUF)PJTUJOH -
58 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q w ෳͷ7JFXͰར༻͢Δঢ়ଶΛ্࣋ͪ͛Δ w 3FEVYͰ3PPUʹ্͕࣋ͪ͛ͨɺඞཁͳͱ͜Ζ·Ͱ্࣋ͪ͛Εྑ͍ͱ͍͏ߟ͑ํ w είʔϓΛՄೳͳݶΓখ͘͢͞Δ શҰཡ7JFX ྃҰཡ
7JFX ະྃҰཡ 7JFX શҰཡ ঢ়ଶ ྃҰཡ ঢ়ଶ ະྃҰཡ ঢ়ଶ 5P%P7JFX 6TFS7JFX 6TFS ঢ়ଶ 3PPU7JFX ͜ΕΒͷঢ়ଶ 4JOHMF4PVSDFPG5SVUIͰͳ ͍ͷͰ্࣋ͪ͛Δඞཁ͕͋Δ ্࣋ͪ͛Δલͷঢ়ଶ -
59 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q w 3FEVYͷ߹ શҰཡ7JFX ྃҰཡ 7JFX ະྃҰཡ 7JFX 5P%P7JFX
6TFS7JFX 6TFS ঢ়ଶ 3PPU7JFX Ұ൪্·Ͱ্࣋ͪ͛Δ ͔͠͠6TFS7JFXʹඞཁͳ͍ ͷͰείʔϓͱ͍͏؍Ͱ 3PPUʹ͋Δඞཁͳ͍ શҰཡ ঢ়ଶ 3PPUͷঢ়ଶ͔ΒTFMFDUPSͰί ϯϙʔωϯτʹΛ͍ͯͨ͠ 4FMFDUPS શҰཡ 4FMFDUPS ྃҰཡ 4FMFDUPS ະྃҰཡ -
60 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q w -JGUJOH4UBUF6QͰঢ়ଶΛ্࣋ͪ͛Δ w 5$"ͷ߹4UPSFΛ্࣋ͪ͛Δ શҰཡ7JFX ྃҰཡ 7JFX ະྃҰཡ
7JFX 5P%P7JFX 6TFS7JFX 6TFS ঢ়ଶ 3PPU7JFX 3PPUͰͳ͘ ඞཁͳ5P%P7JFX·Ͱ ্࣋ͪ͛Δ Ҏ্Ͱ4JOHMF4PVSDFPG5SVUI Λ࣮ݱͭͭ͠είʔϓΛ࠷ݶ ʹͰ͖Δ ·ͨಛผͳϥΠϒϥϦػೳΛ ඞཁͱ͠ͳ͍ શҰཡ ঢ়ଶ ΞʔΩςΫνϟͱͯ͠ͷ 4FMFDUPSͱ͍͏֓೦ඞཁͳ͍ ͷͰɺ७ਮʹϑΟϧλϦϯά͠ ͯ͢ UPEPT fi MUFS UPEPEPOF UPEPT fi MUFS UPEPEPOF 6TFSʹ5P%Pঢ়ଶͷӨڹ ͕ͳ͘ͳΔ -
61 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q struct ToDoView: View { @StateObject private var tasks
= Tasks() var body: some View { VStack{ Text("શToDo") TasksView(tasks: tasks.tasks, toggle: tasks.toggle) Text("ະྃToDo") TasksView(tasks: tasks.unCompleted, toggle: tasks.toggle) Text("ྃࡁΈToDo") TasksView(tasks: tasks.completed, toggle: tasks.toggle) } } } struct ContentView: View { var body: some View { VStack{ UserView() ToDoView() } } } 5P%P7JFX͕5BTLTͷঢ়ଶΛ͍࣋ͬͯΕΑ͍ 5P%P7JFX͔ΒԼҐͷίϯϙʔωϯτʹ͍ͯ͘͠ 5P%P7JFXΑΓ্ͷ$POUFOU7JFX ಉྻͷ6TFS7JFX5BTLͷঢ়ଶΛ ͍࣋ͬͯΔඞཁͳ͍ -
62 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q w 3FEVDFSͷ༗༻ੑ w 3FBDUDPSFνʔϜɺ4UPSF͕άϩʔόϧͰ͋Δඞཁͳ͍͕3FEVYͷ3FEVDFSͷΞΠσΞ Α͔ͬͨͱߟ͑ͯϩʔΧϧεςʔτʹར༻͢ΔVTF3FEVDFSΛఏڙ͠·ͨ͠ w ϑϨʔϜϫʔΫͰͳ͘খ͍͞ϥΠϒϥϦ w
͔͠͠3EVDFSΦϓγϣϯͰඞਢͰ͋Γ·ͤΜ w 5$"ͷ4UPSF 3FEVDFS͜Εʹ͍ۙ w ҧ͍& ff FDU w 3FEVYͰෳͷ4UPSFΛ࡞͠4FMFDUPSΛΘͳ͚Εಉ͜͡ͱ͕࣮ݱͰ͖Δ w ͔͠͠4XJGU6*Ͱɺ3FEVDFSఏڙ͞Ε͍ͯ·ͤΜ -
63 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q w 4XJGU6*͔Β3FEVDFS͕ఏڙ͞Εͳ͍ཧ༝ ༧ w 3FBDUͷVTF3FVDFSҎԼͷཧ༝Ͱఏڙ͞Ε ͍ͯ·͢ class
Tasks :ObservableObject { @Published var tasks: [Task] = [] var completed: [Task] { get{ return tasks.filter { $0.done } } } var unCompleted: [Task] { get{ return tasks.filter { !$0.done } } } func toggle(id: UUID){ tasks = tasks.map { task in guard task.id == id else { return task } var newTask = task newTask.done = !newTask.done return newTask } } func append(title: String){ tasks.append(Task(title: title, done: false)) } } 3FEVDFSΛΘͣ͜ΕͰΑ͍ ௨ৗɺuseReducer ͕ useState ΑΓ·͍͠ͷɺෳͷ ʹ·͕ͨΔෳࡶͳ state ϩδοΫ͕͋Δ߹ɺ લͷ state ʹج͍ͮͯ࣍ͷ state ΛܾΊΔඞཁ͕͋Δ߹Ͱ͢ɻ Ҿ༻: https://ja.reactjs.org/docs/hooks-reference.html#usereducer w 4XJGU6*Ͱɺ͜ΕΛ0CTFSWBCMF0CKFDUͰղ ܾͰ͖Δ -
64 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q w 5$"ͱ0CTFSWBCMF0CKFDUͷίʔυൺֱ enum ToDoAction: Equatable { case append
case toggle(UUID) } let toDoReducer = Reducer<ToDoState,ToDoAction,ToDoEnvironment> { state, action, environment in switch action { case .append: state.tasks += [Task(title: "Ճ", done: false)] return .none case let .toggle(id): state.tasks = state.tasks.map { task in guard task.id == id else { return task } var newTask = task newTask.done = !newTask.done return newTask } return .none } } struct ToDoState : Equatable { var tasks: [Task] = [] var completed: [Task] { get{ return tasks.filter { $0.done } } } var unCompleted: [Task] { get{ return tasks.filter { !$0.done } } } } class Tasks :ObservableObject { @Published var tasks: [Task] = [] var completed: [Task] { get{ return tasks.filter { $0.done } } } var unCompleted: [Task] { get{ return tasks.filter { !$0.done } } } func append(title: String){ tasks.append(Task(title: title, done: false)) } func toggle(id: UUID){ tasks = tasks.map { task in guard task.id == id else { return task } var newTask = task newTask.done = !newTask.done return newTask } } } 5$"ؔܕ 0CTFSWBCMF0CKFDU001 ঢ়گΈʹԠ͍͚͕ͯ͡Ͱ͖Δ -
65 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q w -JGUJOH4UBUF6QʹΑΓ44P5ΛकΓͳ͕Β࠷ݶͷείʔϓͰঢ়ଶཧ͕Ͱ͖ΔΑ͏ʹ ͳΓ·ͨ͠ɻ w ঢ়ଶ͕ࢄ͢ΔͨΊλΠϜτϥϕϧͰ͖ͳ͘ͳΓ·͕͢ɺঢ়ଶͷείʔϓΛ࠷ݶʹ ด͡Δ͜ͱΛ༏ઌ͢Δ͜ͱͰɺมߋ࣌ͷӨڹൣғ͕Θ͔Γ͘͢ͳΓίʔυͷՄಡੑ͕ ্͕Γ·͢ɻ w
-JGUJOH4UBUF6Qͯ͠44P5ΛकΔ͜ͱͰɺ'MVYͰղܾ͔ͨͬͨ͠ͳ͘ͳΓ·ͨ͠ w 'MVYͷͱ͖ʹঢ়ଶ͕4JOHMF4PVSDFPG5SVUIͰͳͩͬͨͨ͘Ίɺෳͷ4UPSF ʹରͯ͠%JTQBUDI͢Δඞཁ͕͋Γ·ͨ͠ɻ w ͔͠͠44P5Λक͍ͬͯΕɺඞͣͭͷঢ়ଶΛߋ৽͢Δ͚ͩͰΑ͘ͳΓ·͢ɻ -
66 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙-JGUJOH4UBUF6Q w ͦͷͨΊݱʹ͓͍ͯ'MVYʹ͍ͭͯݴٴ͢Δػձগͳ͘ͳ͍ͬͯ·͢ w ͦͷΑ͏ͳதͰਖ਼نԽ͞Ε͍ͯͳ͍ෳͷ4UPSF͕͋ΓಉҰ"DUJPOΛෳͷ 3FEVDFS͕ड͚औΓɺͦΕͧΕͷ4UPSFΛߋ৽͢ΔΞʔΩςΫνϟΛ'MVYͱݴ͏͜ͱ దͩͱࢥ͍·͢ w ͔͠͠ՄೳͳݶΓ4UPSFΛਖ਼نԽͯ͠44P5Λ࣮ݱ͢Δ͜ͱΛ͓͢͢Ί͠·͢
w 4UPSFɺ3FEVDFSɺ"DUJPOͷؔΛҡ࣋͠ɺͭͷ"DUJPO͔Β44P5ͳ4UPSFͩ ͚Λߋ৽͢ΔΞʔΩςΫνϟͷํ͕γϯϓϧͰ͢ w ͱ͍͑ɺʹΑͬͯ4UPSFͷਖ਼نԽ͕͘͠ɺ44P5ΛఘΊͨ͘ͳΔؾ࣋ͪΘ ͔Γ·͢ʜ -
68 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙"1*ίʔϧͷঢ়ଶཧͷվળ 4UBSU 'MVY 3FEVY -JGUJOH 4UBUF6Q 5$" 3FEVY 5PPM,JU
35, 2VFSZ (SBQI2- 3FBDU 2VFSZ 3FBDUDPSF νʔϜͷࢥ ΫϥΠΞϯτ Ωϟογϡ 3FEVYͷվྑ ϘΠϥʔ ςϯϓϨʔτͷݮ 3FDPJM 4UBUFߋ৽ͷ Λ7JFX͔Β 4JOHMF4PVSDFPG5SVUI ΫϥΠΞϯτ ΩϟογϡΛ3FEVYͰ࣮ݱ ΫϥΠΞϯτ ΩϟογϡΛ3&45Ͱ࣮ݱ "1*ίʔϧͷվળ ୯ํσʔλϑϩʔ -
70 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙"1*ίʔϧͷঢ়ଶཧͷվળ શҰཡ7JFX 4UPSF UPEPҰཡ UPEP"1*-PEJOH UPEP"1*&SSPS 3FEVDFS JGશҰཡදࣔ"DUJPO TUBUFMPBEJOHUSVF
SFUVSO"1* lUPEPTz JGશҰཡϨεϙϯεޭ"DUJPO UPEPT TUBUFUPEPҰཡUPEPT TUBUFMPBEJOHGBMTF JGશҰཡϨεϙϯεࣦഊ"DUJPO FSSPS TUBUFUPEP"1*&SSPSFSSPS TUBUFMPBEJOHGBMTF શҰཡදࣔ "DUJPO w 5$"ͷ"1*ίʔϧͷঢ়ଶཧ 4UPSFʹMPBEJOHͱFSSPSঢ়ଶΛ࣋ͭ ͜ΕΒΛ3FEVDFS͔Βߋ৽ -
72 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙"1*ίʔϧͷঢ়ଶཧͷվળ w ίʔυΠϝʔδ struct ToDoView: View { @StateObject private
var api = APIState<Tasks> { // APIίʔϧ } var body: some View { Group { if api.isLoading { ProgressView() } else if let error = api.error { ErrorView(error: error) } else { // api.data.tasksΛͬͯදࣔ } } } } 7JFXͷதͰ"1*4UBUFͷఆٛͱ"1*ͷ࣮ߦΛߦ͍ɺͦΕʹैͬͯ7JFXΛग़͚͠Δ -
73 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙"1*ίʔϧͷঢ়ଶཧͷվળ "7JFX 3PPU7JFX w "1*ͷঢ়ଶཧͷείʔϓͷҧ͍ #7JFX $7JFX 7JFXͷ֎ͷ4UBUF͕MPBEJOHFSSPSͷ ঢ়ଶΛ࣋ͪείʔϓ͕͍
7JFXͷ෦ͷ4UBUF͕MPBEJOHFSSPSͷঢ়ଶ Λ࣋ͭͷͰείʔϓ͕ڱ͍ "7JFX -PBEJOH &SSPS %BUB 3PPU7JFX #7JFX $7JFX 4UPSF %BUB -PBEJOH &SSPS -
74 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙"1*ίʔϧͷঢ়ଶཧͷվળ "7JFX "1*ίʔϧ 3PPU7JFX w ෳՕॴͰͷ"1*ίʔϧ #7JFX "1*ίʔϧ $7JFX
"ͱ#͕ಉ࣌ʹ࣮ߦͨ͠߹ͷMPBEJOH FSSPSͷߟྀ͕ඞཁ "1*ίʔϧ͝ͱʹঢ়ଶΛ࣋ͭ ಠཱ͍ͯͯ͠ͱͯࣗવͳঢ়ଶ "7JFX "1*ίʔϧ -PBEJOH &SSPS %BUB 3PPU7JFX #7JFX "1*ίʔϧ $7JFX 4UPSF -PBEJOH &SSPS -PBEJOH &SSPS %BUB -
75 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙"1*ίʔϧͷঢ়ଶཧͷվળ "7JFX -PBEJOH &SSPS %BUB 3PPU7JFX #7JFX $7JFX "7JFX
3PPU7JFX #7JFX $7JFX -PBEJOH &SSPS %BUB w ଞͷίϯϙʔωϯτͰ-PBEJOH&SSPSΛ͍͍ͨ߹ʁ -JGUJOH4UBUF6Q͢Δ #7JFXͰ -PBEJOH&SSPSΛ ද͍ࣔͨ͠ 3PPU7JFXͰ"1*ίʔϧͯ͠ɺ "ͱ7JFXʹ݁ՌΛ͢ -
78 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- 4UBSU 'MVY 3FEVY -JGUJOH 4UBUF6Q 5$" 3FEVY 5PPM,JU
35, 2VFSZ (SBQI2- 3FBDU 2VFSZ 3FBDUDPSF νʔϜͷࢥ ΫϥΠΞϯτ Ωϟογϡ 3FEVYͷվྑ ϘΠϥʔ ςϯϓϨʔτͷݮ 3FDPJM 4UBUFߋ৽ͷ Λ7JFX͔Β 4JOHMF4PVSDFPG5SVUI ΫϥΠΞϯτ ΩϟογϡΛ3FEVYͰ࣮ݱ ΫϥΠΞϯτ ΩϟογϡΛ3&45Ͱ࣮ݱ "1*ίʔϧͷվળ ୯ํσʔλϑϩʔ -
79 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w (SBIQ2-ɺΫϥΠΞϯταΠυ͔Β2VFSZΛૹ৴͢Δ͜ͱͰɺඞཁͳΛͷϦΫ ΤετͰऔಘ͢Δ͜ͱ͕ՄೳͱͳΔɻ w ҎԼͷΛղܾ w ΦʔόʔϑΣον ඞཁͳ͍ͷऔಘ
w ΞϯμʔϑΣον ඞཁͳ͕Γͳ͍ͨΊʹෳͷ"1*Λݺͼग़͢ w 2VFSZͷ݁ՌΛड͚औΔϨεϙϯεͷܕɺ"QPMMPʹΑͬͯDPEFHFO͞ΕΔɻ w ϨεϙϯεͷܕͱΫϥΠΞϯτͷܕͷಉظ͕อূ͞ΕΔ w એݴతσʔλϑΣονϯά -
80 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w 'BDFCPPL͕ʹ։ൃɺެ։ɻ w ࣮ΞϓϦͷͨΊʹ։ൃͨ͠ͷ͕࢝·ΓͰ͢ w 'BDFCPPLͷJ04ɺ"OESPJEΞϓϦͷχϡʔεϑΟʔυʹ࠾༻ w ͘Β͍·Ͱ։ൃίϛϡχςΟʹ΄ͱΜͲཧղ͞Ε͍ͯ·ͤΜͰͨ͠
w 3FEVYͷ՝Λղܾ͢Δଘࡏͱͯ͠ΛूΊͨʁ w ۙͰଟ͘ͷاۀͰ࠾༻͍ͯ͠·͢ w 'BDFCPPLɺ(JU)VCɺ6CFSɺ/FU fl JYɺ"JSCOCɺ5XJUUFS w 5XJUUFS"1*Wͷ3&45"1*ཪͰ(SBQI2-͕ಈ͍͍ͯ·͢ -
81 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w (SBQI2-ΫϥΠΞϯτͷϝϦοτ w (SBQI2-ΫϥΠΞϯτ "QPMMP ͷػೳͰɺ (SBQI2-Ͱऔಘͨ͠2VFSZͷ݁ՌΛάϥϑߏͦ ͷ··Ωϟογϡ͢Δ͜ͱ͕Մೳ
w εΩʔϚઃܭͰਖ਼نԽΛҙࣝ͢Δඞཁͳ͍ w άϥϑߏͷதͷΤϯςΟςΟ*%ͰҰҙͱ ͳ͓ͬͯΓΫϥΠΞϯτΩϟογϡͰࣗಈత ʹਖ਼نԽ͞ΕΔ w ͜ΕʹΑΓ3FEVY5$"ͰඞཁͰ͋ͬͨਖ਼نԽ͠ ͨΩϟογϡΛࣗͰཧ͢Δඞཁ͕ͳ͘ͳΔ w ͦͷ͓͔͛ͰΞʔΩςΫνϟ͕ͱͯγϯϓϧʹ ͳΔ query ToDoView { todo { id all { id title done } unCompleted { id title done } completed { id title done } } } -
82 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w ΫϥΠΞϯτΩϟογϡ query ToDoView { todo { id
all { id title done } unCompleted { id title done } completed { id title done } } } UPEP *E VO$PNQMFUFE JE UJUMF %POF DPNQMFUFE JE UJUMF %POF "MM JE UJUMF %POF άϥϑߏͷ··Ωϟογϡ͢Δ -
83 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w ΫϥΠΞϯτΩϟογϡ query CompletedToDoView { todo { id
completed { id title done } } } UPEP *E VO$PNQMFUFE JE UJUMF %POF DPNQMFUFE JE UJUMF %POF "MM JE UJUMF %POF ͠ઌ΄Ͳͷ5P%P7JFXΛදࣔͨ͋͠ͱʹ $PNQMFUFE5P%P7JFX͕ϦΫΤετΛ͛Εɺ DPNQMFUFEΩϟογϡώοτ͢Δ Ωϟογϡώοτ Ωϟογϡώοτ -
85 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w (SBQI2-ʹΑΔΩϟογϡͷϝϦοτ w σʔλม͕ෆཁʹͳΔ w 3FEVY5$"ͰݫີʹΖ͏ͱ͢ΔͱɺҎԼͷछྨͷม͕ඞཁͩͬͨ w "1*Ϩεϙϯε༻ͷܕ
w ˠ4UPSFʹอଘ͢ΔͨΊͷ.PEFMͷܕ w ˠ7JFXʹදࣔ͢ΔͨΊͷ7JFX.PEFMͷܕ -
86 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w (SBQI2-ʹ͓͚Δܕͷҙࣝ "1*ͷϨεϙϯεͷܕ Ωϟογϡͷܕ 7JFXʹදࣔ͢ΔͨΊͷ7JFX.PEFMͷܕ ม͕ඞཁͳ͍ query ToDoView
{ todo { ...CompletedTasksViewFragment } } struct ToDoView: View { @StateObject private var query = Query<ShopifyQuery.ToDoView>() var body: some View { VStack { if let data = query.response { VStack { CompletedTasksView(fragment: ɹɹɹɹɹɹɹɹɹɹɹɹ data.todo.fragments.completedTasksViewFragment) } } } } } 'SBHNFOUͱ͍͏ػೳͰ2VFSZͱผʹઐ༻ͷܕΛੜ͢Δ ੜ͞Εͨ'SBHNFOUΛίϯϙʔωϯτͷϑΟʔϧυͱ͢Δ ˠ'SBHNFOU$PMPDBUJPO fragment CompletedTasksViewFragment on ToDo { id completed { ...TaskViewFragment } } .PEFM͝ͱʹ'SBHNFOUΛ࡞ΔͷͰͳ͘ 7JFX͝ͱʹ࡞Δ͜ͱ͕େ 2VFSZ'SBHNFOU͔Βੜ͞Εͨܕ7JFX༝དྷͷܕͰ͋ͬͯɺ .PEFM༝དྷͷܕͰͳ͍ɻ7JFXʹͯͦ͠ͷ··ར༻͢Δ 3&45ͷΑ͏ʹ.PEFMͷܕʹมͯ͠͠·ͬͯ (SBQI2-ͷϝϦοτ͕ଛͳΘΕΔ -
87 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- VStack { Text("શToDo") TasksView(fragment: data.todo.fragments.tasksViewFragment) Text("ະྃToDo") UnCompletedTasksView(fragment: data.todo.fragments.unCompletedTasksViewFragment)
Text("ྃࡁΈToDo") CompletedTasksView(fragment: data.todo.fragments.completedTasksViewFragment) } query ToDoView { todo { ...TasksViewFragment ...UnCompletedTasksViewFragment ...CompletedTasksViewFragment } } 7JFXͷίʔυɺσʔλϑΣονɺ࠷ऴతͳ6*͕ରԠ એݴతσʔλϑΣονϯά એݴత6* -
88 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w (SBQI2-ͷ2VFSZͱ"1*ίʔϧͷঢ়ଶཧͷվળ struct ToDoView: View { @StateObject private
var query = Query<Query.ToDoView>() var body: some View { VStack { if query.fetching { ProgressView() } else if let errorContent = query.error?.content { ErrorRetryButtonView( error: errorContent, retryAction: { query.refetch() } ) } else if let data = query.response { VStack { Text("શToDo") TasksView(fragment: data.todo.fragments.tasksViewFragment) Text("ະྃToDo") UnCompletedTasksView(fragment: data.todo.fragments.unCompletedTasksViewFragment) Text("ྃࡁΈToDo") CompletedTasksView(fragment: data.todo.fragments.completedTasksViewFragment) } } } } } "1*ίʔϧͷঢ়ଶཧͷվળͱ߹ΘͤΔͱɺͱͯγϯϓϧʹը໘ΛߏͰ͖Δ ΫΤϦʔҎ֎͜ͷͭͷը໘Ͱ͍݁ͯ͠Δ -
89 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w 5$"ͱൺֱ࣮ͨ࣌͠ͷ࡞ۀ w 5$" w ϑΣον͢Δͷঢ়ଶΛ4UPSFʹఆٛ w ਖ਼نԽΛݕ౼
w ϑΣον࣌ͷMPBEJOHͱFSSPSͷঢ়ଶΛ 4UPSFʹఆٛ w ϑΣον͢ΔͨΊͷ"DUJPOΛఆٛ w ϑΣον࣮ߦͷ࣮MPBEJOHΛ4UPSFʹ ߋ৽ w ϑΣον͢ΔͨΊͷ& ff FDUΛఆٛ w ϑΣονͨ݁͠ՌΛड͚Δ"DUJPOΛఆٛ w ϑΣον݁ՌɺMPBEJOHɺFSSPSΛ4UPSF ʹߋ৽ w 4UPSF͔Β7JFXʹϑΣονͨ͠Λ͢ w (SBQI2- w ΫΤϦʔϑϥάϝϯτΛఆٛ w ίʔυੜ w 7JFXͰΫΤϦʔΛ࣮ߦͯ͠ϑΣον w -PBEJOH FSSPS औಘ݁ՌΛ7JFXʹ͢ ݕ౼ࣄ߲ͱ࣮ྔ͕େ෯ʹݮ͞ΕΔ ·ͨ ݟͨΛ࣮͢Δ 7JFXͷ࣮ ݟͨʹඞཁͳΛߟ͑Δ 2VFSZͷهड़ ͱ͍͏։ൃऀͱͯ͠ۃΊͯࣗવͳࢥߟͱৼΔ͍Λ తʹ࣮ࢪ͢Δ͚ͩͰը໘Λ࡞Δ͜ͱ͕Ͱ͖Δ -
90 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w (SBQI2-ͷNVUBUJPOͱ"1*ίʔϧͷঢ়ଶཧͷվળ struct TaskView: View { @StateObject private
var toggleMutation = Mutation<Mutation.ToggleToDo>() let task: GraphQL.TaskViewFragment var body: some View { HStack { Text(task.title) Spacer() Button(action: { toggleMutation.perform(input: .init(id: task.id)) }) { if toggleMutation.executing { ProgressView() } else if task.done { Image(systemName: "checkmark.square.fill") .foregroundColor(.green) } else { Image(systemName: "square") } } } } } NVUBUJPOγϯϓϧʹ࣮είʔϓΛด͡Δ͜ͱ͕Ͱ͖Δ -
91 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w Ҏ্Ͱɺ࠷ॳʹఆٛͨ͠ཧతͳΞʔΩςΫνϟΛ࣮ݱͰ͖·ͨ͠ w ΞʔΩςΫνϟϑϨʔϜϫʔΫͷΑ͏ͳେ͖ͳΈΛఆٛͨ͠ͱ͍͏ΑΓ͔ɺγ ϯϓϧͳݪཧݪଇΛੵΈ্͛ͨίʔυͱ͍͏ํ͕ద͔͠Ε·ͤΜ w ҙࣄ߲ w
ࠓճͷίʔυBQPMMPJPTΛಋೖ͢Δ͚ͩͰ͙͢ʹ࣮ݱͰ͖Δͱ͍͏Θ͚Ͱ͋Γ· ͤΜɻ w 8FCͷ"QPMMP͕͜ͷΑ͏ͳΠϯλʔϑΣʔεΛ͓࣋ͬͯΓɺBQPMMPJPT͕ͦΕʹ४ڌ Ͱ͖ΔΑ͏ʹ"QQJGZͰϥούʔΛ࣮͍ͯ͠·͢ɻ w BQPMMPJPTW͕ϦϦʔε͞ΕͨΒϥούʔͷ࣮͕ෆཁʹͳΔ͔͠Ε·ͤΜ -
92 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w .VUBUJPO࣮ߦ࣌ͷαʔόͱΫϥΠΞϯτΩϟογϡͷಉظ w .VUBUJPOʹΑΓαʔόͷ5P%Pঢ়ଶΛม͑ͨͱ͖ʹɺΫϥΠΞϯτΩϟογϡͷ σʔλΛߋ৽͢Δ͜ͱͰ7JFXͱαʔόͷঢ়ଶΛಉظ͢Δඞཁ͕͋Δ 5BTLT7JFX 5BTL7JFX Ωϟογϡ
αʔό UPHHMF5P%P JE $PNQMFUFE 5BTLT7JFX 6O$PNQMFUFE 5BTLT7JFX λεΫʹνΣοΫΛ͍ΕͨΒҎԼ͕ඞཁ શ5P%PͷλεΫʹνΣοΫ ະྃ5P%P͔ΒͷλεΫΛআ֎ ྃࡁΈ5P%PλεΫΛՃ -
93 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- 5BTLT7JFX 5BTL7JFX Ωϟογϡ αʔό UPHHMF5P%P JE mutation ToggleTodo($input:
ToggleToDoInput!) { toggleToDo(input: $input) { todo { ...TasksViewFragment ...UnCompletedTasksViewFragment ...CompletedTasksViewFragment } } } (SBQI2-Ͱ.VUBUJPOͷϨεϙϯεʹΑΓࣗಈత ʹΩϟογϡ͕ߋ৽͞Εɺଓ͍ͯ7JFXࣗಈతʹ ࠶ϨϯμϦϯά͞ΕΔ Ϩεϙϯε Ϩεϙϯε͔Β Ωϟογϡߋ৽ ࠶ϨϯμϦϯά w .VUBUJPO͔ΒͷΩϟογϡߋ৽ 7JFXʹରԠͨ͠'SBHNFOUΛϨεϙϯεͰฦ͢ 3FEVY5$"Ͱߋ৽͢ΔίʔυΛॻ͘ඞཁ͕͋ Δ͕ɺ(SBQI2-ͰNVUBUJPOͷ࣮ߦҎ֎ʹ͢Δ͜ ͱͳ͍ -
94 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- 5BTLT7JFX 5BTL7JFX Ωϟογϡ αʔό UPHHMF5P%P JE BQPMMPͰ0QUJNJTUJD6*Λ࣮ݱ͢ΔͨΊʹɺ NVUBUJPOͷૹ৴ͱಉ࣌ʹΩϟογϡͷߋ৽͕Մೳ
Ϩεϙϯε w .VUBUJPOͷϨεϙϯεͷલʹ7JFXΛߋ৽͍ͨ͠߹ w νΣοΫϘοΫεΛλοϓͨ͠Β͙͢ʹ7JFXʹө͍ͨ͠ Ωϟογϡߋ৽ ࠶ϨϯμϦϯά ϨεϙϯεʹΑΔ Ωϟογϡߋ৽ ϨεϙϯεʹΑΔ ࠶ϨϯμϦϯά -
95 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w ͦͷଞͷ(SBQI2-ͷϝϦοτ w σβΠϯͷϢʔεέʔεʹҾͬுΒΕͯɺ"1*Λมߋ͢Δඞཁ͕ͳ͍ w ΫϥΠΞϯτʮը໘9ʹ:Λදࣔ͢Δඞཁ͕Ͱ͖ͨͷͰɺ9"1*Ͱ:ΛҾ͖͍ͨʯ w 3&45ύλʔϯΫϥΠΞϯτଆ͕ଥڠ͢Δ߹
w όοΫΤϯυʮ9"1*ͷ͔Β:֎ΕΔͷͰ:"1*Λ࣮ߦͯ͠ཉ͍͠ʯ w ΫϥΠΞϯτʮ9"1*ͱ:"1*ճ࣮ߦ͢Δ͔ʜ355Ͱ69མͪ͠ίʔυෳࡶʹͳΔͳʯ w 3&45ύλʔϯόοΫΤϯυଆ͕ଥڠ͢Δ߹ w όοΫΤϯυʮ9"1*Ͱ:ฦ͢Α͏ʹ͢Δ͔ʜͱͯ͠ҧײ͋Δ͠ɺଞͷը໘ͰΘͳ͍ͷ ʹ༨ܭͳ3FBE૿͑Δͳɻ͘͠ઐ༻ͷ9:"1*Ճ͢Δ͔ʜʯ w (SBQI2-ͷ߹ΫϥΠΞϯτόοΫΤϯυͲͪΒͤ w όοΫΤϯυʮը໘9༻ʹ9ͱ:ΛҾ͘2VFSZΛॻ͍ͯऔಘ͍͍ͯ͠Αଞͷը໘Ͱ9͚ͩΛҾ͘ 2VFSZॻ͚ຖճ:ΛҾ͘ඞཁͳ͍͔ΒύϑΥʔϚϯεͷͳ͍Αʯ w ΫϥΠΞϯτʮ355ͰࡁΉ͠ɺίʔυγϯϓϧɺը໘Ͱඞཁͳͯ͢औಘͰ͖ͯخ͍͠ʯ w όοΫΤϯυΤϯδχΞͱͯ͠ͷ (SBQI2-࠷େͷϝϦοτ -
96 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w (SBIQ2-ͷ w όοΫΤϯυ͕(SBQI2-Ͱ࣮͞Ε͍ͯΔ͜ͱ͕ඞਢ όοΫΤϯυνʔϜͷ"1*αʔόΛ(SBQI2-ʹͯ͠Β͏ όοΫΤϯυνʔϜʹ(SBQI2-ͷ#''Λ༻ҙͯ͠Β͏
ΫϥΠΞϯτνʔϜͰڠྗͯ͠(SBQI2-ͷ#''Λ༻ҙ͢Δ w νʔϜঢ়گʹΑΔͱࢥ͍·͕͢ɺ৽نͳΒ͕͓͢͢ΊͰ͢ɻ w طଘͷ3&45H31$ͷ.JDSPTFSWJDFT͕͋Δ߹ɺ͔ʹͳΔͱࢥ͍·͢ɻ w ฐࣾ৽ن։ൃͰͰ͕͢ɺόοΫΤϯυͷ(SBQI2-։ൃΛؚΊͯνʔϜͱͯ͠ ͷ։ൃେ෯ʹݮͰ͖͍ͯ·͢ɻ w ·ͨόοΫΤϯυ୯ମͰߟ͑ͯ։ൃԼ͕͍ͬͯΔͱೝ͍ࣝͯ͠·͢ɻ w 3PQQPOHJ(SBQI2-ͷಈըͰɺ(SBQI2-࠾༻اۀ͕͍ͯ͠ΔͷͰͥͻ͝ཡ͍ͩ͘͞ -
97 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w BQPMMPJPTͷ w ൃల్্ w ੜ͞ΕΔίʔυαΠζ͕େ͖͘Ϗϧυ͕͍ w ੜ͞ΕΔྻ͕JEFOUJ
fi BCMFͰͳ͍ͷͰ࣮͢Δඞཁ͕͋Δ w $PEBCMFະରԠ w 8FC൛ͷ"QPMMPʹൺΔͱػೳ͕ෆ w ϖʔδωʔγϣϯ w એݴత6*ʹదͨ͠ΠϯλʔϑΣʔε w -PDBMTUBUF w ݱࡏBQPMMPJPTWͷ։ൃ͕ਐΜͰ͍ΔͷͰظ -
98 ༨ஊίϯϙʔωϯτ֊ͷεΩοϓ w 3FEVYͰάϩʔόϧεςʔτʹϨεϙϯεͷ݁ՌΛอ͍࣋ͯ͠Δ͕ɺίϯϙʔωϯτ ֊ͷεΩοϓਪ͞Εͳ͍͜ͱ͕͋Δ w ঢ়ଶͱίϯϙʔωϯτͷґଘ͕ؔΘ͔ΓͮΒ͘ͳΔ w ϨϯμϦϯά͕ฒߦͯ͠ߦΘΕΔΑ͏ʹͳΔͱ͖ʹݒ೦͕͋Δ 3PPU7JFX
6TFS7JFX 1SPEVDU 7JFX 4UPSF͔Β6TFS7JFX͢͜ͱ ճආ͢Δ͖ʁ 4UPSF 6TFSใ 6TFS 3PPU7JFX 6TFS7JFX 1SPEVDU 7JFX 4UPSF 6TFSใ 3PPU7JFX6TFS ෆཁ͚ͩͲܦ༝͢Δ 6TFS 6TFS εΩοϓ͠ͳ͍߹ εΩοϓ͢Δ߹ -
99 ༨ஊίϯϙʔωϯτ֊ͷεΩοϓ 3PPU7JFX 6TFS7JFX 1SPEVDU 7JFX 4UPSF 6TFSใ 6TFS 3FEVY
(SBQI2- 3PPU7JFX 6TFS7JFX 1SPEVDU 7JFX 6TFS (SBQI2-ΫΤϦʔͰ औಘ͢ΔͨΊεΩοϓ͕ͳ͍ ͷͰͳ͍ ຊʜʁ -
100 ༨ஊίϯϙʔωϯτ֊ͷεΩοϓ 3PPU7JFX 6TFS7JFX 1SPEVDU 7JFX 4UPSF 6TFSใ 6TFS 3FEVY
(SBQI2- 3PPU7JFX 6TFS7JFX 1SPEVDU 7JFX 6TFS (SBQI2- Ωϟογϡ 6TFSใ w ࣮ࡍʹ(SBQI2-ʹάϩʔόϧͳΩϟογϡ͕ଘࡏ͍ͯͯ͠ɺ͔ͦ͜Βऔಘ͍ͯ͠ΔͷͰ ֓೦తʹάϩʔόϧεςʔτ͔ΒεΩοϓ͍ͯ͠ΔͷͱมΘΒͳ͍ͷͰʁ w ࣗͱͯ͠ɺϨεϙϯεΩϟογϡʹ͍ͭͯ3FEVYͷ߹εΩοϓͯ͠͠ΐ͏͕ͳ͍ ͱߟ͍͑ͯ·͢ɻ͕͢͞ʹͯ͢ͷΛϧʔτ͔Β1SPQ%SJMMJOH͢Δ։ൃମݧਏ͍ͱࢥ͍ ·͢ʜͱ͍͑ࠓޙͦ͏͠ͳ͍ͰࡁΉํ๏ࡧ͍ͯ͘͠ඞཁ͕͋Δͱࢥ͍·͢ɻ ྆ऀʹେ͖ͳҧ͍ͳ͍ʁ -
101 ༨ஊίϯϙʔωϯτ֊ͷεΩοϓ 3PPU7JFX .PEBM7JFX 1SPEVDU 7JFX 4UPSF JT0QFO JT0QFO 3FEVY
w ͨͩͪΖΜ7JFXͷঢ়ଶͳͲΛ4UPSFʹஔͯ͠ɺεΩοϓ͢Δ͜ͱείʔϓ͕͕ ΓґଘؔΛᐆດʹ͢Δ͜ͱʹܨ͕ΔͷͰɺՄೳͳݶΓճආͨ͠ํ͕ྑ͍ͱࢥ͍·͢ 3PPU7JFX .PEBM7JFX 1SPEVDU 7JFX 4UPSF JT0QFO ඞཁͳίϯϙʔωϯτ͕ ঢ়ଶΛ࣋ͯे -
102 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙(SBQI2- w (SBIQ2-ʹΑͬͯঢ়ଶͷଊ͑ํ͕େ͖͘มΘΓ·ͨ͠ w ϨεϙϯεΩϟογϡͱͦΕҎ֎ͷঢ়ଶ 7JFXͷঢ়ଶͳͲ w (SBQI2-ΫϥΠΞϯτɺϨεϙϯεͷঢ়ଶཧΛΩϟογϡͱͯ͠࠷దͳܗͰཧ
͢Δ͜ͱΛఏҊ w ਖ਼نԽɺܕมɺΩϟογϡͷߋ৽ͷ࣮͕ෆཁ w એݴత6* (SBQI2-ͰଞͷΫϥΠΞϯταΠυͷίʔυͱύϥμΠϜΛ౷ҰͰ͖Δ w "QQJGZͷίʔυ8FCɺ"OEPJSEɺJ04ͲΕ͔ॻ͚Εશ෦ͷίʔυ͕ಡΊ·͢ w ࠓճઆ໌ͨ͠Ҏ֎ʹ(SBIQ2-ʹศརͳػೳ͕ଟ͘ଘࡏ͠·͢ w ͦͯ͠·ͩൃల్্ͳͷͰࠓޙͷʹظ͍ͯ͠·͢ -
104 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙"GUFS(SBQI2- 4UBSU 'MVY 3FEVY -JGUJOH 4UBUF6Q 5$" 3FEVY 5PPM,JU
35, 2VFSZ (SBQI2- 3FBDU 2VFSZ 3FBDUDPSF νʔϜͷࢥ ΫϥΠΞϯτ Ωϟογϡ 3FEVYͷվྑ ϘΠϥʔ ςϯϓϨʔτͷݮ 3FDPJM 4UBUFߋ৽ͷ Λ7JFX͔Β 4JOHMF4PVSDFPG5SVUI ΫϥΠΞϯτ ΩϟογϡΛ3FEVYͰ࣮ݱ ΫϥΠΞϯτ ΩϟογϡΛ3&45Ͱ࣮ݱ 3FBDU2VFSZͱ35,2VFSZͷొ ୯ํσʔλϑϩʔ -
106 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙"GUFS(SBQI2- w ͦΕʹΑΓීٴͨ͠ͷ͕3FBDU2VFSZ35,2VFSZͳͲͷϥΠϒϥϦͰ͢ɻ w 3FBDU2VFSZγϯϓϧʹ3&45ͰΩϟογϡͰ͖ΔΑ͏ʹͨ͠ϥΠϒϥϦͰ͢ɻ w ͠ࠓ·Ͱ3FEVYΛ"1*ϨεϙϯεΩϟογϡͷͨΊ͚ͩʹར༻͍ͯͯ͠3FBDU 2VFSZΛ࠾༻ͨ͠ͳΒ3FEVY͕ෆཁʹͳΔ w
4XJGUʹӨڹΛड͚ͨGNP1JHFPO͕͋Γ·͢ ීٴ͍ͯ͠ΔΘ͚Ͱͳ͍ w 35, 3FEVY5PPM,JU 2VFSZɺ3FEVYͰΩϟογϡΛͰ͖ΔΑ͏ʹͨ͠ϥΠϒϥϦ Ͱ͢ɻ w 3FEVYΛ"1*ϨεϙϯεҎ֎ͷ༻్Ͱ͍ͬͯͨ߹ͳͲɺ3FEVYΛ͍ͳ͕ΒϨ εϙϯεΩϟογϡΛར༻͢Δ߹ʹར༻͍͢͠ w ͔͜͠͠ΕΒ(SBQI2-Ͱͳ͍ͨΊਖ਼نԽ͕Ͱ͖ΔΘ͚Ͱͳ੍͕͋͘Γ·͢ɻ -
108 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FDPJM 4UBSU 'MVY 3FEVY -JGUJOH 4UBUF6Q 5$" 3FEVY 5PPM,JU
35, 2VFSZ (SBQI2- 3FBDU 2VFSZ 3FBDUDPSF νʔϜͷࢥ ΫϥΠΞϯτ Ωϟογϡ 3FEVYͷվྑ ϘΠϥʔ ςϯϓϨʔτͷݮ 3FDPJM 4UBUFߋ৽ͷ Λ7JFX͔Β 4JOHMF4PVSDFPG5SVUI ΫϥΠΞϯτ ΩϟογϡΛ3FEVYͰ࣮ݱ ΫϥΠΞϯτ ΩϟογϡΛ3&45Ͱ࣮ݱ 3FDPJM'BDFCPPLϥΠϒϥϦ 3FBDUDPSFνʔϜఏڙͰͳ͍ͷͰ3FBDUެࣜϥΠϒϥϦͰͳ͍ (SBQI2-ΫϥΠΞϯτͷ3FMBZͷ։ൃ3FBDUDPSFνʔϜ ୯ํσʔλϑϩʔ -
109 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FDPJM w -JGUJOH4UBUF6Qͷ w ࠶ϨϯμϦϯάͷ͋Δ શҰཡ7JFX ྃҰཡ 7JFX ະྃҰཡ
7JFX 5P%P7JFX 6TFS7JFX 6TFS ঢ়ଶ 3PPU7JFX શҰཡ ঢ়ଶ 7JFXͷ֊ͱঢ়ଶͷͷ֊ ͕ඥ͍͍ͮͯΔ UPEPT fi MUFS UPEPEPOF UPEPT fi MUFS UPEPEPOF -
110 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FDPJM w 3FDPJMͰ7JFXͱಠཱͯ͠ɺঢ়ଶͱ4FMFDUPSΛఆٛͰ͖Δ w ൺֱతײతͰૉʹཧղͰ͖Δ શҰཡ7JFX ྃҰཡ 7JFX ະྃҰཡ
7JFX 5P%P7JFX શҰཡ ঢ়ଶ UPEPT fi MUFS UPEPEPOF UPEPT fi MUFS UPEPEPOF -
112 એݴత6*ͷঢ়ଶཧΞʔΩςΫνϟͷྺ࢙3FDPJM w (SBQI2-ͳͲͷΫϥΠΞϯτΩϟογϡͱҟͳΔ՝Λղܾ͢Δ w 7JFXͳͲαʔόʹͳ͍ঢ়ଶΛ࣋ͭΞϓϦέʔγϣϯͰ༗ޮ w (SBQI2-ͳ͠ͰΩϟογϡΛ͢ΔͨΊʹ3FEVYͷΘΓʹ3FDPJMΛ͏͜ͱͰ͖Δ w ·ͨVTF3FEVDFSͷొҎ߱3FEVDFSඞਢͷͷͰͳ͘ɺ࣮खஈͷͭͱͯ͠ೝࣝ
͞ΕΔΑ͏ʹͳͬͨͨΊɺ3FDPJMͰγϯϓϧͳTFU4UBUFܗࣜͱSFEVDFSܗࣜબ͢Δ ͜ͱ͕Մೳͱͳ͍ͬͯΔɻ w ͜Εʹ֘͢Δීٴ͍ͯ͠ΔϥΠϒϥϦ4XJGUʹͳ͍ͣͳͷͰɺࠓޙཁ -
114 ۙͷΞʔΩςΫνϟͷ w 8FCओʹ64ͷΤϯδχΞ w 9͕࣠ຬ w :͕࣠ͬͨ͜ͱ͕͋Δ͔ w ંઢ͝ͱͷਪҠ
w ݁Ռ w 3FEVYܦݧऀଟ͍ w ׂ w (SBQI2-ܦݧऀ࿈ଓ૿Ճ w ׂ w 3FEVYͷຬԼ w (SBQI2-ׂ͕ۙ͘ຬ͍ͯ͠Δ w ଞٕज़ͷதͰτοϓ w ࠓޙར༻Ϣʔβ͕૿͑ͯԼ͕༧ ͞ΕΔ Ҿ༻5IF4UBUFPG+BWB4DSJQU4VSWFZ IUUQTTUBUFPGKTDPNKB+1 -
115 ۙͷΞʔΩςΫνϟͷ w J044XJGU6* w 5$"͕ීٴ͍ͯ͠Δʁ w ࠓޙ(SBQI2-ͳͲͷϨεϙϯεΩϟογϡͷಈʹཁ w "OESPJE+FUQBDL$PNQPTF
w +FUQBDL$PNQPTFDPSFνʔϜʹҎԼͷϝϯόʔ͕ࡏ੶ w ݩ3FBDUDPSFνʔϜͷΤϯδχΞ w ݩ"JSCOCͷ3FBDUΤϯδχΞ w 3FBDUಉҎ্ͷ͜ͱ͕Ͱ͖ΔͷͰ3FBDUͰʹͳͬͨΞʔΩςΫνϟઃܭద ༻Մೳ w ৽͍ͨ͠Ίɺ·ͩྲྀߦ͍ͬͯΔΞʔΩςΫνϟͳ͍ҹ w ࠓޙ.77.ɺ3FEVYͳͲͷద༻ݕূ͕࢝·Δͣ -
116 ۙͷΞʔΩςΫνϟͷ w $MFBO"SDIJUFDUVSF w ͜Εঢ়ଶཧͷΞʔΩςΫνϟͰͳ͍ͷͰผ్࠾༻͢Δ͜ͱෆ࠾༻ͱ͢Δ͜ͱ Ͱ͖·͢ɻ w ࠷ॳ͋ͷਤΛͯ͢࠶ݱ͢Δ͜ͱͤͣʹඞཁͳͱ͜ΖʹϞοΫΛͤ͞ΔΑ͏ʹ͠ ͓͚ͯͩ͘Ͱेͩͱࢥ͍·͢
w ·ͨ"QPMMPͳͲͷϥΠϒϥϦ͕.PDLͷػೳΛ͍࣋ͬͯΕͦΕͰे͔͠Ε· ͤΜ w ·ͨ7JFXΛಠཱͤ͞Δ͜ͱ͕తͰ͋Ε1SFTFOUBUJPOBM$PNQPOFOU 4UBUFMFTT $PNQPOFOU ͱ$POUBJOFS$PNQPOFOU 4UBUFGVM$PNQPOFOU ʹׂ͢Δͱ͜Ζ͔Β࢝ Ίͯྑ͍͔͠Ε·ͤΜɻ w ͨͩ͜͠Εͯ͢ʹద༻͢Δͱ͍͏ํ͓קΊ͠·ͤΜ -
118 ͓͢͢Ίͳબࢶ w -JGUJOH4UBUF6Qͱ0CTFSWBCMF0CKFDU w ࢝Ίͳ͍ݶΓ͜Ε͚ͩΛҙࣝͯ͠։ൃͯ͘͜͠ͱΛ͓͢͢Ί͠·͢ w ಛʹϨεϙϯεΩϟογϡ͕ෆཁͳ߹ɺ͜Ε͚ͩͰेͰ͠ΐ͏ w ·ͣެࣜͱͯ͠ਪ͍ͯ͠ΔجຊతͳΓํΛཧղ͢Δ͜ͱΛ༏ઌ͍ͯͩ͘͠͞
w ࠷ॳ͔Βʮ999ΞʔΩςΫνϟΛ࠾༻ʂʯͱ͍͏͜ͱ͓͢͢Ί͠·ͤΜ w ͘͠ߟ͑ͯϋʔυϧΛ্͛ͳ͍Α͏ʹ͠·͠ΐ͏ w ΧϓηϧԽɺείʔϓͷݶఆɺϦʔμϏϦςΟɺ࣮ɺγϯϓϧ͞ɺJNVUBCJMJUZɺ ςελϏϦςΟͳͲϓϩάϥϜͷݪଇΛݩʹࣗͰࢼߦࡨޡΛॏͶ͍ͯͩ͘͞ w ΞʔΩςΫνϟ*NNVUBCJMJSUZςελϏϦςΟͷਖ਼͠͞ʹ͗͢͠Δ͕͋ ΔͷͰؾΛ͚͍ͭͯͩ͘͞ w ਖ਼͠͞ͷͨΊʹΞʔΩςΫνϟΛ࠾༻͢ΔͷͰͳ͘ɺجຊΛ্͍ͬͯ͘ͰࣗͰ ՝Λମݧͯ͠ɺͦͷ՝Λղܾ͢ΔͨΊʹ࣍ͷखஈΛ୳͍ͯͩ͘͠͞ -
119 ͓͢͢Ίͳબࢶ w 5IF$PNQPTBCMF"SDIJUFDUVSF w 3FEVDFS& ff FDUʹັྗΛײͨ͡Βঢ়ଶߋ৽ϧʔϧΛ5$"ʹै͏ w 3PPUʹͭͷ4UPSFΛஔ͢ΔͷͰͳ͘খ͍͞είʔϓʹ4UPSFΛఆ͍ٛͯ͘͜͠
ͱΛ͓͢͢Ί͠·͢ w ϨεϙϯεΩϟογϡʹ͍ͭͯɺ3PPUʹͭͷ4UPSFΛஔ͢ΔબࢶΛݕ౼͠ ͯΑ͍͔͠Ε·ͤΜ w "1*ίʔϧΛ5$"ͷ& ff FDUͰཧ͢Δ߹ w "1*ͷMPBEJOHFSSPSͷঢ়ଶ5$"ʹஔ͠ɺ"TZOD༻ͷؔΛ༻ҙ͠ͳ͍ɻ w ՃͰϨεϙϯεΩϟογϡͰ͖ΔϥΠϒϥϦΛ࠾༻͢Δ߹ w Ωϟογϡ5$"Ͱͳ͘ϥΠϒϥϦʹͤΔ w "1*ͷMPBEJOHFSSPSͷঢ়ଶ5$"ʹஔ͔ͣʹ"TZOD༻ؔΛ࡞Δ w ͜ΕࢲͷҙݟͳͷͰ5$"ͷηΦϦʔ10*/5'3&&Λ֬ೝ͍ͯͩ͘͠͞ w & ff FDUؚΊͨςελϏϦςΟͳͲࣦΘΕ·͢ɻ -
120 ͓͢͢Ίͳબࢶ w (SBQI2-"QPMMP w (SBQI2-Λ࠾༻͍ͯ͠ΔͳΒ໎Θͣ͜Ε w (SBQI2-ͷϨεϙϯεΩϟογϡ 7JFXͷঢ়ଶ-JGUJOH4UBUF6Q w
ϨεϙϯεΩϟογϡҎ֎ͷঢ়ଶཧʹ5$"Λ࠾༻͢ΔͱͰ͖Δ -
121 ·ͱΊ w 4XJGU6*Λϕʔεʹɺ(SBQI2-ʹΑΔϨεϙϯεΩϟογϡɺ-JGUJOH4UBUF6Qɺ"1* ίʔϧͷվળΛ͢Δ͜ͱͰͱͯγϯϓϧʹ࣮Ͱ͖Δ͜ͱΛհ͠·ͨ͠ w ͜ΕΒΞʔΩςΫνϟͱ͍͏ΑΓ͔γϯϓϧͳݪଇͰ͋ΓɺͦΕͧΕ͍͠ͷ Ͱ͋Γ·ͤΜɻ w ΞʔΩςΫνϟΛݕ౼͢Δͱ༗໊ͳΞʔΩςΫνϟͷਤʹै͍ਖ਼͘͠ίʔυΛׂ͢Δ
ํ๏Λߟ͑Δ͜ͱ͕తʹͳͬͯ͠·͏͜ͱ͕͋Γ·͢ɻ w ͔͠͠େͳ͜ͱ՝Λղܾ͢Δ͜ͱͰ͢ɻ w ࠓճׂํ๏͚ͩͰͳ͘ΞʔΩςΫνϟ͕ղܾͨ͠՝Λ͓͑͢Δ͜ͱͰɺ͝ ࣗͰ͔ΒΞʔΩςΫνϟͷඞཁੑΛݕ౼͢Δ͖͔͚ͬʹͳΕخ͍͠Ͱ͢ɻ