Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
逆向きUIの世界 〜iOSアプリのRTL言語対応〜
Search
akatsuki174
September 20, 2025
Design
730
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
逆向きUIの世界 〜iOSアプリのRTL言語対応〜
逆向きUIの世界 〜iOSアプリのRTL言語対応〜
2025/09/21 iOSDC Japan day2
akatsuki174
September 20, 2025
More Decks by akatsuki174
See All by akatsuki174
逆向きUIの世界〜AndroidアプリのRTL言語対応〜
akatsuki174
1
1.2k
私が変えてきたこと、変えなかったこと
akatsuki174
2
1.1k
最近読んでいる本-読書シェア会vol.1
akatsuki174
2
300
SwiftUI、UIKitでキャプチャを撮ろう!
akatsuki174
1
160
Appleにおけるプライバシーの全容を把握する
akatsuki174
0
6.4k
近年のAppleにおける位置情報とプライバシー
akatsuki174
3
530
オフライン勉強会ぼっち対策
akatsuki174
1
750
Xcode 15の新機能
akatsuki174
0
2.9k
AndroidにもSelect Photosがやってきた
akatsuki174
0
1.5k
Other Decks in Design
See All in Design
Starfall (2025)
rezaline
0
140
decksh object reference
ajstarks
2
1.8k
デザインハーネス 〜AIが生成する"デザイン"の妥当性を、誰がどう担保するのか〜 / PdEConf2026 Design Harness
kgsi
14
22k
ISO 9241-171:2025っていうのがあってな
shosira
1
320
JBUG大阪#9_登壇資料_引き継ぎで困らないためのBacklogWikiの整え方_ミスと属人化を防ぐために、 “次の人が動ける状態”をどう残すか
webnaut
2
280
「おすすめ」はなぜ信用されないのか - 信頼を築くUI/UX設計
ryu1013
0
320
root COMPANY DECK / We are hiring!
root_recruit
4
31k
【CEDEC2026】『Shadowverse: Worlds Beyond』続編開発におけるUIデザイン・アニメーション演出の「超進化」 ~継承と挑戦を両立するデザイン手法~
cygames
PRO
4
5.3k
UI生成の鍵は要件整理 -デザインプロセスのエッセンスを プロンプト作成に取り入れよう-
abokadotyann
4
1.1k
【CEDEC2026】派手さと見やすさは両立できる!『Shadowverse: Worlds Beyond』エフェクト・3D背景の超進化したビジュアル設計
cygames
PRO
2
2.1k
設計の進め方と 品質特性品質特性
harakeishi
0
1.4k
もう迷わない!“なんとなく”を卒業するフォントの選び方【村田俊英】
toshihidemurata
0
990
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.9k
Balancing Empowerment & Direction
lara
6
1.3k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Evolving SEO for Evolving Search Engines
ryanjones
0
310
Faster Mobile Websites
deanohume
310
32k
Optimizing for Happiness
mojombo
378
71k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
510
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
300
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
We Have a Design System, Now What?
morganepeng
55
8.3k
Transcript
ٯ͖UIͷੈք ʙiOSΞϓϦͷRTLݴޠରԠʙ iOSDC Japan 2025 09/21 @akatsuki174
ࣗݾհ
• @akatsuki174 • Android/iOS/FlutterΤϯδχΞ • גࣜձࣾΏΊΈॴଐ • Android/FlutterνʔϜ • ࠓͷࣄAndroid/iOS
• 2ࣇͷ
ࠓͷ
None
͢ର • SwiftUI͕ϝΠϯ • iOS͕ϝΠϯ • ʙiOS 18ܥɺXcode 16ܥ
None
RTLݴޠରԠͱ
RTLݴޠͱ • จࣈUIͷஔ͕ʮӈ͔Βࠨʯʹ͔ͬͯਐΉݴޠɹɹɹ ʢRight to Leftݴޠʣ • දతͳRTLݴޠ • ΞϥϏΞޠ
• ϔϒϥΠޠ • ϧυΡʔޠ etc…
RTLݴޠରԠ͞Εͨঢ়ଶͱ ༁͕ೖ͍ͬͯΔ͜ͱʹՃ͑ͯ… • ϨΠΞτ͕ࠨӈస͍ͯ͠Δ • ํੑΛ࣋ͭΞΠίϯ͕ࠨӈస͍ͯ͠Δ • RTLݴޠɺLTRݴޠ͕ࠞࡏ͍ͯͯ͠ਖ਼͍͠ฒͼʹͳ͍ͬͯΔ etc…
None
None
None
RTLݴޠରԠͷඞཁੑ • RTLݴޠͰ͋ΔΞϥϏΞจࣈͷ༻ਓޱ6ԯ6ઍສਓ • ΞϧϑΝϕοτͱதࠃจࣈʹ͍࣍ͰੈքͰ3൪ʹଟ͘ॻ͔Εͯ ͍Δݴޠ • RTLݴޠϢʔβʔʹͱͬͯɺLTRϨΠΞτҧײ͕͋Δ
ͳΜ͔େมͦ͏͡ΌͶʁ • ͍͍ͩͨOSɺϑϨʔϜϫʔΫଆ͕ࣗಈͰରԠͯ͘͠ΕΔ • ͕ɺ։ൃऀ͕खಈରԠ͖͢ͱ͜Ζ͋Δ
લఏɿԿ͠ͳ͍ͱRTLϨΠΞτʹͳΒͳ͍ • ʮͱΓ͋͑ͣγεςϜݴޠΛΞϥϏΞޠʹͯ͠ϨΠΞτ่Ε͕ ͳ͍͔֬ೝͯ͠ΈΔ͔ʯͱࢥͬͯɺͦͷ··ͩͱLTRϨΠΞ τͷ·· • طଘݴޠͷίϐϖͰ͍͍͔Β༁ϑΝΠϧΛೖΕΔ͔ɺޙड़͢Δ σόοά༻ͷઃఆͰڧ੍RTLϨΠΞτʹ͢Δ
ɿҰ֓ʹʮRTLݴޠʯͱׅΕͳ͍ • ྫɿϔϒϥΠޠجຊRTLݴޠͰ͋Δ͕ɺͳͲLTRʹͳΔ • ରԠ͢Δݴޠʹ͓͍ͯԿ͕ਖ਼͍͔͠ࣄલʹௐ͓͖ͯ͘
RTLݴޠରԠʹؔ͢Δ ެࣜใ
ެࣜใ • ͍ΖΜͳͱ͜ΖʹRTLʹؔ͢Δެࣜใ͕͋Δ • WWDCͷಈը • Human Interface Guidelines etc…
Human Interface Guidelines • ʮRight to leftʯͱ͍͏ষ͕͋Δ • RTLϨΠΞτશൠΛͬ͘͟Γཏ͍ͯ͠Δ •
σβΠφʔ͞Μʹ·͔ͣ͜͜ΒݟͯΒ͏ͷ͕ྑͦ͞͏
Design for Arabic / WWDC22 • Human Interface GuidelinesΑΓৄࡉͳใ͕ࡌ͍ͬͯΔ •
σβΠφʔ͞Μʹ2൪ʹݟͯΒ͏ͳΒ͜Ε͔͠Εͳ͍
Get it right (to left) / WWDC22 • ։ൃऀ͚ͷRLTݴޠରԠಈը •
۩ମతʹͲ͏࣮ͨ͠Β͍͍͔͕հ͞Ε͍ͯΔ
ʮࣗಈͰʯ͞ΕΔ RTLݴޠରԠ
ӳޠڥ ΞϥϏΞޠڥ
RTLݴޠରԠΫΠζ
͜ͷΫΠζͷҙٛ • શ෦OSɺϑϨʔϜϫʔΫଆ͕ରԠͯ͘͠ΕΔΘ͚Ͱͳ͍ • ػցతʹʮਖ਼͍͠RTLσβΠϯʹͳ͍ͬͯΔ͔ʁʯΛςετ͢Δ ͷ͍͠ʢޙड़ʣ • ࣗͷײ֮Λཆ͏ඞཁ͕͋Δ
Q1. ͜ͷΞΠίϯRTL༻ʁ
A1. 🙆 • εϐʔΧʔ෦Իͷग़ΔํΛࣔ͢ͷͰసͤ͞Δ • ࣼઢ෦ແޮɺېࢭΛද͕͢ʗͰʘͰҙຯมΘΒͳ͍Β͍͠ • AppleʘͰ౷Ұ͍ͯ͠ΔΒ͍͠
ຊޠڥ ΞϥϏΞޠڥ J04 "OESPJE
Q2. ͜ͷΞΠίϯRTL༻ʁ
A2. 🙆 • ͜ͷϖϯ͕ӈʹ͍͍ͯΔͷӈར͖ͷਓ͕ଟ͍͔Β
Q3. ͜ͷঢ়ଶRTLରԠ͕͞Ε͍ͯΔʁ
A3. 🙅 • Human Interface GuidelinesʹΑΔͱɺஈམʢ3ߦҎ্ͷςΩετͰఆ ٛ͞ΕΔʣͷஔஈམͷݴޠͱҰகͤ͞ΔΑ͏ʹͱॻ͔Ε͍ͯΔ
Q4. ͜ͷঢ়ଶRTLରԠ͕͞Ε͍ͯΔʁ
A4. 🙆 • ࣌ܭදݱRTLݴޠݍͰʮ࣌ܭճΓʯ • ProgressViewͷCircularProgressViewStyleRTLݴޠͰʮ࣌ܭճΓʯ
ʮखಈͰʯΔ RTLݴޠରԠ
ϨΠΞτ
left/rightͰॻ͍͍ͯΔͱ͜Ζ • leading/trailingݴޠʹΑͬͯҧ͏͕ɺleft/rightڞ௨ • left/rightͰॻ͍͍ͯͨΒͪΖΜϨΠΞτ͕ݻఆ͞Εͯ͠·͏
None
ӳޠڥ ΞϥϏΞޠڥ
None
ӳޠڥ ΞϥϏΞޠڥ
None
Ұ෦ͷϨΠΞτ • Կ͔͠Βͷཧ༝ͰRTLͱLTRͰϨΠΞτΛผʹ͍ͨ͠߹ɺ ͷϨΠΞτํΛผ͔ͯ͠Β݅ذͰUIΛग़͚͠Δ
None
None
ํΛݻఆ͍ͨ͠߹ • RTLͰLTRͰಉ͡ϨΠΞτʹ͢Δ͜ͱ͕Ͱ͖Δ • UIKitͱSwiftUI྆ํͷํ๏Λհ
None
ΞϥϏΞޠڥʢରԠલʣ ΞϥϏΞޠڥʢରԠޙʣ
None
None
RTL,LTRݴޠࠞ߹ͷςΩετ • جຊతʹ͍͍͔Μ͡ʹͬͯ͘ΕΔ • ͕ɺྫ͑ύϥϝʔλ͖ͭURLΛͻͱ͖ͭͮͷLTRͱղऍͰ͖ͣ ʹόϥόϥʹฒΒΕͯ͠·͏͜ͱ͕͋Δ
LRM,RLMͰڬΉ • LRM (Left-to-Right Mark) • Unicode: \u{200E} • ςΩετͷྲྀΕΛࠨˠӈʹڧ੍͍ͨ͠ͱ͖ʹ͏੍ޚจࣈ
• RLM (Right-to-Left Mark) • Unicode: \u{200F} • ςΩετͷྲྀΕΛӈˠࠨʹڧ੍͍ͨ͠ͱ͖ʹ͏੍ޚจࣈ
˞͜ͷίʔυखΛՃ͑ͳͯ͘ਖ਼͍͠ޠॱͰදࣔ͞Ε·͢
ը૾
Ұ෦ͷը૾ • RTLͱLTRͰҟͳΔͷΛද͍ࣔͨ͠߹ɺAsset Catalogʹ྆ ํͷը૾ΛೖΕΔ
None
None
None
ͲΜͳը૾Λసͤ͞Δ͖͔ • ʮํੑͷ͋ΔͷʯͱݴΘΕͯ… • SF SymbolsΛࢀߟʹ͢Δͷ͕ྑͦ͞͏
None
None
None
ࣈ
ࣈ͕ೖͬͨςΩετ • ಉ͡ݴޠݍͰɺҬʹΑͬͯͲΜͳࣈදه͕Ұൠతͳͷ͔͕ ҟͳΔ • ྆ํͰද่ࣔΕ͕ͳ͍͔֬ೝͨ͠ํ͕͍͍ • ࣈϩʔΧϥΠζ͞ΕΔঢ়ଶʹͳ͍ͬͯΔ͔֬ೝ͢Δ
None
None
None
None
ه߸͖ࣈ • ʮ%ʯʮ-ʯͳͲͷه߸͕ࣈʹͭ͘߹͕͋Δ • ಉ͡RTLݴޠͰɺࣈͷલʹͭ͘߹͋ΕޙΖʹͭ͘߹ ͋Δ • ࣗͰه߸Λ༩͢ΔͷͰͳ͘ɺformatterΛ͏͜ͱ
88%$(FUJUSJHIU UPMFGU IUUQTEFWFMPQFSBQQMFDPNXXED
None
None
ͦͷଞ
WebViewͦͷଞ֎෦࿈ܞ • WebViewͷத͕ະରԠʹͳΒͳ͍Α͏ʹ • ͦͷଞݴޠίʔυࠃίʔυΛSDKͳͲʹ͍ͯ͠ΔՕॴ͕͋ͬ ͨΒҙ
ʮӈʯʮࠨʯͷςΩετ • ʮࠨʹεϫΠϓͯ͠আ͍ͯͩ͘͠͞ʯͳͲͷจݴ࣮ࡍͷಈ࡞ ͱҟͳΔ͔
ݻఆαΠζͷϨΠΞτ • ҰൠతʹΞϥϏΞޠͷํ͕͍ͷͰɺݻఆαΠζͷUIͩͱ่ΕΔ ͱ͜Ζ͕͋Δ͔ • ՄมϨΠΞτʹͨ͠Γɺ߹ʹΑͬͯ༁Λௐͨ͠Γ͢Δ
(option)ϑΥϯτͷมߋ • ҰൠతʹΞϥϏΞޠͷํ͕খ͘͞ݟ͑Δ • ΞϥϏΞޠͷϑΥϯτΛ10%େ͖͘͢ΔͱಡΈ͘͢ͳΔ 88%$%FTJHOGPS"SBCJD IUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED
88%$%FTJHOGPS"SBCJD IUUQTEFWFMPQFSBQQMFDPNKQWJEFPTQMBZXXED (option)ߴ͞ͷௐ • ൃԻه߸ɺࣝผه߸ͳͲ͕͋ΔͱΞϧϑΝϕοτΑΓΞϥϏΞจ ࣈͷํ͕ߴ͘ͳΔ • ্Լ͕Χοτ͞Εͳ͍Α͏ʹؾΛ͚Δ
ͲͷΑ͏ʹςετ͢Δ͔
લఏ • ػցతʹશ෦ʮRTLσβΠϯରԠͰ͖͍ͯΔ͔ʁʯΛςετ͢Δ ͷʢͨͿΜʣແཧ • ಠࣗΞΠίϯΛ͍ͬͯͨΒʮ͜Εస͖͢ͳͷ͔ʁʯ ਓ͕ؒஅ͢Δ͔͠ͳ͍ • ςετͱݴ͏ͷͷɺ࠷ॳʹ͜ΕΛͬͯײΛѲͨ͠ํ ͕͍͍ͱࢥ͏
ओͳνΣοΫϙΠϯτ • ϨΠΞτɺը૾ɺΞχϝʔγϣϯ͕ਖ਼͍͖͠ʹͳ͍ͬͯΔ͔ • RTLݴޠɺLTRݴޠ͕ࠞࡏ͍ͯͯ͠ਖ਼͍͠ฒͼʹͳ͍ͬͯΔ͔ etc…
༏ઌ͢ΔݴޠΛมߋͯ͠ࢹ • Ұ൪ຊʹ࣮ۙͯ֬͘ͳํ๏ • νΣοΫϙΠϯτʹैͬͯɺ͓͔͍͠ͱ͜Ζ͕ͳ͍͔Λ֬ೝ͢Δ • ͨͩ͠ɺRTLݴޠͷ༁ϑΝΠϧ͕ೖͬͯͳ͍ͱస͠ͳ͍
None
౾ࣝ • ʮRTLݴޠʹͨ͠ΒઃఆΞϓϦ͕ಡΊͳ͘ͳͬͯݩʹͤͳ͍ʯ ͱͳͬͨ߹ผͰGoogleϨϯζΛ͏ͱศར • ΞϓϦ͕ʮ༏ઌ͢ΔݴޠʯʹରԠ͍ͯ͠ΔͳΒͦͬͪΛͬͯ
εΩʔϜΤσΟλΛฤू • εΩʔϜΤσΟλʹApp Language͕͋ΓɺRTLݴޠʹͨ͠Γɺ PseudolanguageʢՍۭݴޠʣʹͰ͖Δ • ࣮ߦϑΝΠϧʹRTLݴޠ͕ೖͬͯͳͯ͘ςετͰ͖ͯศར
None
None
Right-to-Left Pseudolanguage • UI ϨΠΞτͷํ͚ͩΛRTLʹ͢Δ • จࣈྻͦͷ·· • ϨΠΞτ͕ਖ਼͘͠RTLݴޠରԠͰ͖͍ͯΔ͔Λ֬ೝͰ͖Δ
௨ৗϏϧυ 3JHIUUP-FGU1TFVEPMBOHVBHFࢦఆ
SwiftUIͷϓϨϏϡʔͰࢹ • SwiftUIͷϓϨϏϡʔͰRTL༻LTR༻ϓϨϏϡʔΛ࡞͢Δ • StoryboardͩͱͰ͖ͳͦ͏
None
࠷ޙʹ
ࠓͷ·ͱΊ • RTLݴޠΛ͍ͬͯΔਓ͔ͳΓଟ͍ͷͰରԠͨ͠ํ͕͍͍Α • OSɺϑϨʔϜϫʔΫଆ͕উखʹ͍͍͔Μ͡ʹͯ͘͠ΕΔ͜ͱ͕ଟ ͍Α • ͰࣗಈͰରԠ͞Εͳ͍ͱ͜Ζ͋Δ͔ΒؤுͬͯରԠ͠Α͏Ͷ
ݸਓతͳײ • σβΠφʔ͞Μͱ૬ஊͭͭ͠ɺͰ͖Δ͚ͩඪ४UIίϯϙʔωϯτ ͰσβΠϯΛ࡞Δͷ͕ྑͦ͞͏ • ຯʹେมͳͷͰଟΊʹऔͬͨํ͕ྑͦ͞͏ • ωΠςΟϒͷਓʹνΣοΫͯ͠Β͏ͷ͕Ұ൪҆৺…
͓ΘΓ