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

アプリのユーザー体験を高めるAccessibility Modifier

Avatar for リョウ リョウ
September 19, 2025

アプリのユーザー体験を高めるAccessibility Modifier

iOSDC Japan 2025
パンフ記事(4ページ)

プロポーザル
https://fortee.jp/iosdc-japan-2025/proposal/871cad2e-f6e8-420d-8f46-cfc2fe28b679

Avatar for リョウ

リョウ

September 19, 2025
Tweet

More Decks by リョウ

Other Decks in Programming

Transcript

  1. ΞϓϦͷϢʔβʔମݧΛߴΊΔ "DDFTTJCJMJUZ.PEJpFS Ϧϣ΢!3ZP%FWFMPQFS ͸͡Ίʹ ΞΫηγϏϦςΟͱ͸ɺ৘ใ΍ػೳʹΞΫηεͰ͖Δ͔ɺ·ͨ͸ͦͷ౓߹͍Λҙຯ͠·͢ɻ ΞϓϦ։ൃʹ͓͍ͯ͸ɺςΩετͷ৭ͷಡΈ΍͢͞΍ɺϘλϯͷԡ͠΍͢͞ͱ͍ͬͨ೔ৗతʹ ҙࣝ͞ΕΔϙΠϯτ͔Βɺ04͕ఏڙ͢Δࢧԉٕज़ͷରԠ·Ͱɺ͞·͟·ͳ؍఺͕ٻΊΒΕ·͢ɻ ͜ͷύϯϑϨοτͰ͸ɺ7PJDF0WFS΍Ի੠ίϯτϩʔϧͳͲͷɺ04ͷࢧԉٕज़Λ׆༻͢ΔͨΊͷ .PEJpFSʹϑΥʔΧεΛ౰ͯͯ঺հ͠·͢ɻ ͜ΕΒͷࢧԉٕज़΋ɺ৐Γ෺ਲ͍͠΍͍͢ਓ͕ը໘Λ௚ࢹͤͣʹૢ࡞͍ͨ͠৔߹΍ɺख͕ԚΕͯ

    ͍Δ৔໘Ͱը໘Λ৮Εͣૢ࡞͍ͨ͠৔߹ͳͲɺ୭ʹͱͬͯ΋໾ཱͭ਎ۙͳػೳͰ͢ɻ ΞΫηγϒϧͳΞϓϦΛ࡞Δ͜ͱ͸ɺো͕͍ͷ༗ແ΍ఔ౓ɺΞϓϦΛར༻͢Δ؀ڥʹ͔͔ΘΒͣɺ ͢΂ͯͷϢʔβʔʹՁ஋͋ΔମݧΛఏڙ͢Δ͜ͱʹͭͳ͕Γ·͢ɻ ΞΫηγϏϦςΟରԠͷୈҰา ΞΫηγϏϦςΟ͸ਖ਼͘͠ରԠ͢Δ͜ͱͰޮՌΛ࠷େݶʹൃش͠·͢ɻ ͔͠͠ɺΞΫηγϏϦςΟػೳΛ࢖ͬͨ͜ͱ͕ͳ͍ਓ͕ద੾ͳରԠΛ͢Δͷ͸೉͍͠΋ͷͰ͢ɻ ͜ͷهࣄΛಡΈਐΊΔલʹɺ͓ख࣋ͪͷ୺຤ͰΞΫηγϏϦςΟػೳΛମݧ͢Δ͜ͱΛΦεεϝ ͠·͢ɻ ઃఆΞϓϦˠΞΫηγϏϦςΟˠγϣʔτΧοτͰ7PJDF0WFSͱԻ੠ίϯτϩʔϧʹνΣοΫΛ ͚ͭΔ͜ͱͰɺαΠυϘλϯΛτϦϓϧΫϦοΫͯ͠ɺ͜ΕΒͷػೳͷ༗ޮɾແޮΛ੾Γସ͑ΒΕ ·͢ɻ "QQMFͷΞϓϦ΍ࣗ͝਎Ͱ։ൃ͍ͯ͠ΔΞϓϦΛૢ࡞ͯ͠ɺΞΫηγϏϦςΟରԠͷύλʔϯ΍ ՝୊Λ୳͢ͱ͜Ζ͔Β࢝ΊͯΈ͍ͯͩ͘͞ɻ BDDFTTJCJMJUZ-BCFM ཁૉΛઆ໌͢ΔϥϕϧΛ௥Ճ͠·͢ɻ ඪ४ͷίϯϙʔωϯτ͸ɺجຊతʹ࠷దͳϥϕϧ͕ઃఆ͞Ε͍ͯ·͢ɻ 4'4ZNCPMT΋!CPPLNBSL͸ʮϒοΫϚʔΫʯɺ"UPSUPJTF͸ʮ଎౓ΛԼ͛ΔʯͷΑ͏ʹɺ Ϣʔεέʔεʹ͍ۙϥϕϧ͕ઃఆ͞Ε͍ͯ·͢ɻ ͦͷͨΊɺσϑΥϧτͷঢ়ଶͰ΋໰୊ͳ͍͜ͱ͕ଟ͍Ͱ͕͢ɺҙຯ͕఻ΘΓʹ͍͘৔߹͸ద੾ͳ આ໌ʹมߋͰ͖·͢ɻ αϯϓϧίʔυͰ͸ɺzϒοΫϚʔΫʹ௥Ճzͱ͍͏ϥϕϧΛ෇͚Δ͜ͱͰɺϘλϯͷઆ໌ΛΑΓ ໌֬ʹ͍ͯ͠·͢ɻ ͜ΕʹΑΓɺ7PJDF0WFSͰ͸ʮϒοΫϚʔΫʹ௥ՃϘλϯʯͱಡΈ্͛ΒΕɺԻ੠ίϯτϩʔϧ Ͱ͸ʮϒοΫϚʔΫʹ௥ՃΛλοϓʯͱൃ࿩͢Δ͜ͱͰૢ࡞Ͱ͖·͢ɻ
  2. BDDFTTJCJMJUZ&MFNFOU ৽͍͠ΞΫηγϏϦςΟཁૉΛ࡞੒͠·͢ɻ 7PJDF0WFSͳͲͷϑΥʔΧε͸ɺجຊతʹը໘ͷࠨ্͔ΒӈԼʹ޲͚ͯҠಈ͠·͢ɻ ͦͷͨΊɺαϯϓϧίʔυͷΑ͏ͳը໘Ͱ͸ʮλΠτϧʯˠʮλΠτϧʯˠʮλΠτϧʯˠ ʮίϯςϯπʯˠʮίϯςϯπʯˠʮίϯςϯπʯͷΑ͏ʹɺҙຯ͕఻ΘΒͳ͍ॱংͰಡΈ ্͛ΒΕΔ͜ͱ͕͋Γ·͢ɻ αϯϓϧίʔυͰ͸ɺBDDFTTJCJMJUZ&MFNFOUʹ.combineΛࢦఆ͢Δ͜ͱͰɺಡΈ্͛ॱংͷमਖ਼ ʹՃ͑ͯɺཁૉ಺ͷBDDFTTJCJMJUZ-BCFM΍ϑΥʔΧεͳͲΛͭͷཁૉʹ߹੒ͯ͠ɺ φϏήʔγϣϯΛ௚ײతʹ͍ͯ͠·͢ɻ BDDFTTJCJMJUZ)JEEFO

    ΞΫηγϏϦςΟػೳʹɺೝࣝ͞ΕΔඞཁͷͳ͍ཁૉΛӅ͠·͢ɻ ૷০໨తͷཁૉͳͲɺࢹ֮Ҏ֎Ͱ͸৘ใΛ࣋ͨͳ͍߲໨Λɺ7PJDF0WFSͳͲ͔Βೝࣝ͞Εͳ͍ Α͏ʹͰ͖·͢ɻ αϯϓϧίʔυͰ͸ɺഎܠը૾ΛΞΫηγϏϦςΟػೳ͔Βೝࣝͤ͞ͳ͍Α͏ʹ͍ͯ͠·͢ɻ Button { addBookmark() } label: { Image(systemName: "bookmark") } .accessibilityLabel("ϒοΫϚʔΫʹ௥Ճ") ScrollView(.horizontal) { HStack { ForEach(cardItems, id: \.self) { item in CardView(item: item) .accessibilityElement(children: .combine) } } .padding() } ద༻લͷϑΥʔΧε ద༻ޙͷϑΥʔΧε Image(.background) .resizable() .aspectRatio(contentMode: .fill) .ignoresSafeArea() .accessibilityHidden(true)
  3. BDDFTTJCJMJUZ4PSU1SJPSJUZ ཁૉͷ༏ઌ౓Λઃఆ͠·͢ɻ 7PJDF0WFSͳͲͷϑΥʔΧε͸ɺجຊతʹը໘ͷࠨ্͔ΒӈԼʹ޲͚ͯҠಈ͠·͢ɻ αϯϓϧίʔυͷΑ͏ʹɺλΠτϧɾίϯςϯπɾด͡ΔϘλϯ͕ฒΜͰ͍Δը໘Ͱɺด͡Δ Ϙλϯ͔ΒϑΥʔΧε͕౰ͨΔͱɺԿʹରͯ͠ͷด͡ΔϘλϯͳͷ͔͕༧ଌ͠ʹ͘͘ͳΓ·͢ɻ αϯϓϧίʔυͰ͸ɺλΠτϧˠίϯςϯπˠด͡Δͷॱ൪ͰϑΥʔΧε͕౰ͨΔΑ͏ʹ༏ઌ౓ Λௐ੔͢Δ͜ͱͰɺϘλϯͷ༻్Λ໌֬ʹ͍ͯ͠·͢ɻ ਺ࣈ͕େ͖͍΄Ͳ༏ઌ౓͕ߴ͘ɺσϑΥϧτ஋͸Ͱ͢ɻෛͷ஋Λࢦఆ͢Δ͜ͱ΋Ͱ͖·͢ɻ BDDFTTJCJMJUZ4PSU1SJPSJUZͰ༏ઌ౓Λௐ੔͢Δ৔߹͸ɺಉ࣌ʹϨΠΞ΢τࣗମ͕࠷ద͔Ͳ͏͔Λ ݕ౼͢Δ͜ͱ΋Φεεϝ͠·͢ɻ

    BDDFTTJCJMJUZ"EE5SBJUT ཁૉʹಛੑΛ௥Ճ͠·͢ɻ ཁૉʹʮݕࡧϑΟʔϧυʯͳͲͷ໾ׂ΍ɺʮબ୒தʯͱ͍ͬͨঢ়ଶΛ໌ࣔͯ͠ɺಡΈ্͛ͷ಺༰΍ ϑΥʔΧεͷڍಈΛௐ੔Ͱ͖·͢ɻ 7PJDF0WFSͰϘλϯʹϑΥʔΧεΛ౰ͯͨͱ͖ʹɺʮ BDDFTTJCJMJUZ-BCFM ϘλϯʯͱಡΈ্͛ ΒΕΔͷ΋͜ͷಛੑʹΑΔ΋ͷͰ͢ɻ αϯϓϧίʔυͷΑ͏ͳϞʔμϧΛ࡞੒ͨ͠৔߹ɺϞʔμϧͷԼʹӅΕ͍ͯΔཁૉʹ΋ϑΥʔΧε ͕౰ͨΔ͜ͱ͕͋Γ·͢ɻ VStack { HStack { Spacer() Button { dismiss() } label: { Image(systemName: "xmark") } .accessibilitySortPriority(-1.0) } Text(title) .font(.headline) .accessibilitySortPriority(1.0) Text(content) .accessibilitySortPriority(0.0) } ద༻લͷॳظϑΥʔΧε ద༻ޙͷॳظϑΥʔΧε
  4. αϯϓϧίʔυͰ͸ɺϞʔμϧͷ7JFXͷBDDFTTJCJMJUZ"EE5SBJUTʹ.isModalΛࢦఆ͢Δ͜ͱͰɺ Ϟʔμϧͷදࣔத͸എޙͷཁૉʹϑΥʔΧε͕౰ͨΒͳ͍Α͏ʹ͍ͯ͠·͢ɻ ͓ΘΓʹ ࠷ޙ·Ͱ͓ಡΈ͍͖ͨͩɺ͋Γ͕ͱ͏͍͟͝·͢ɻ ͜ͷύϯϑϨοτ͕ɺΞΫηγϏϦςΟͷॏཁੑ΍ࢧԉٕज़΁ͷཧղΛਂΊΔ͖͔͚ͬʹͳΕ͹ ޾͍Ͱ͢ɻ
 ײ૝͸ɺͥͻ#iosdc #Accessibility Λ͚ͭͯSNSͰڞ༗͍͚ͯͨͩ͠Δͱخ͍͠Ͱ͢ɻ
 ࠓޙ΋ΞϓϦ։ൃʹ໾ཱͭ৘ใΛൃ৴͠·͢ɻڵຯͷ͋Δํ͸X

    (@RyoDeveloper) ͷϑΥϩʔ΋͓ ଴͍ͪͯ͠·͢ɻ ZStack { VStack { Text("ϞʔμϧͷԼͷཁૉ") Button("ϞʔμϧΛ։͘") { isShowModal.toggle() } .disabled(isShowModal) } if isShowModal { CustomModalView { VStack { Text("Ϟʔμϧͷதͷཁૉ") Button("ϞʔμϧΛด͡Δ") { isShowModal.toggle() } } } .accessibilityAddTraits(.isModal) } } ϞʔμϧͷԼͷཁૉ ద༻લͷϑΥʔΧε ద༻ޙͷϑΥʔΧε