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

縦書きエディタを6プラットフォームで開発してみて / On development of multi-platform text editor for vertical writing

cc4966
September 06, 2019

縦書きエディタを6プラットフォームで開発してみて / On development of multi-platform text editor for vertical writing

縦書きエディタを6プラットフォームで開発してみて
iOSDC Japan 2019 2019/09/06 10:50〜 Track E 技術パッション共有トーク(60分)

Windows / macOS / Ubuntu / iOS / Android / UWP向けに縦書きのできるテキストエディタを趣味で開発しています。
小説や脚本などでいまだに根強い需要のある縦書きのテキスト入力を6プラットフォームに提供する唯一のプロダクトを目指しています。
(Windows / macOS / Ubuntu / Androidでリリース済み、iOS版リリース予定、UWP版プロトタイプ完成済み)

このプロダクトでは全プラットフォームで同じ描画結果を手に入れるためにテキスト描画エンジンから自前で作っています。
トークでは文字とコンピュータの関係、縦書きという特殊な書字方式とその裏側の実装、テキストエディタや組版、iOSやAndroidに限らないクロスプラットフォームなアプリ開発について話します。

内容
- テキストを表示するために必要な文字コードとフォントの知識
- コア機能をC++で作る理由
- デスクトップアプリとモバイルアプリを開発するための環境
- デスクトップアプリのテキスト入力とモバイルアプリのテキスト入力
- プラットフォームで千差万別なIMEという特異点
- iOS / Androidの標準TextViewのUIとその縦書きでの再実装

cc4966

September 06, 2019
Tweet

More Decks by cc4966

Other Decks in Programming

Transcript

  1. ॎॻ͖ΤσΟλΛ
    ϓϥοτϑΥʔϜͰ
    ։ൃͯ͠Έͯ
    J04%$+BQBO5SBDL&ʙ
    ࿡ʑ[email protected]
    ˞,FZOPUF
    ʹ


    ͖
    ͕


    ͞
    Ε
    ·
    ͠
    ͨ
    ʂ

    View Slide

  2. ࣗݾ঺հ
    w ࿡ʑʢΖ͘Ζ͘ʣ
    w [email protected]
    w ށ੶໊3ZP/POBLB
    !2

    View Slide

  3. աڈͷൃද
    w J04%$ʮ6*7JFXͱ6*5FYU*OQVUͰ࡞Δॎॻ͖ͷ
    5FYU7JFXʯ
    w IUUQTTQFBLFSEFDLDPNDDWFSUJDBM
    UFYUWJFXCBTFEPOVJWJFXXJUIVJUFYUJOQVU
    !3

    View Slide

  4. աڈͷൃද
    w %SPJE,BJHJʮθϩ͔Β࣮૷͢Δॎॻ͖5FYU7JFXͱ
    ͦͷपลٕज़ʯ
    w IUUQTTQFBLFSEFDLDPNDDWFSUJDBM
    UFYUWJFXGSPNTDSBUDIBOESFMBUFEUFDIOPMPHJFT
    !4

    View Slide

  5. झຯ
    w ςΩετΤσΟλ։ൃ
    w Ξχϝؑ৆ d࿩ि͘Β͍ɺࠓظ͸࿩ि

    w Ξχϝөըؑ৆ dຊ೥͘Β͍

    !5

    View Slide

  6. झຯ
    w ςΩετΤσΟλ։ൃ
    w 5"5&EJUPSͱ͍͏ॎॻ͖ΤσΟλΛݸਓ։ൃ
    w J04"OESPJE൛͸ετΞͰެ։த
    w NBD048JOEPXT6CVOUV൛͸αΠτͰެ։த
    w 681൛͸࡞੒தʢ·ͩϓϩτλΠϓͷΈʣ
    w IUUQTXXXDDOFU
    w ։ൃɺӡӦɺαϙʔτɺσβΠϯΛશ෦΍ͬͯΔ
    !6

    View Slide

  7. झຯ
    w 5"5&EJUPSͱ͸
    w ϧϏ͕ৼΕΔ
    ;Γ͕ͳ
    w 1%'Λग़ྗͰ͖Δ
    w ϖʔδදࣔͰ͖ΔʢσεΫτοϓ൛ͷΈʣ
    !7

    View Slide

  8. ϦϦʔε͠·ͨ͠
    w 5"5&EJUPSGPSJ04
    w ϦϦʔε
    w 5"5&EJUPSGPS"OESPJE
    w ϦϦʔε
    !8

    View Slide

  9. ςΩετΤσΟλ։ൃ
    w ͦ΋ͦ΋ͳͥ։ൃ͍ͯ͠Δͷ͔
    w ೥ࠒɺখઆ޷͖͕ߴͯ͡খઆΛॻ͍ͨΓ͍ͯͨ͠
    w 6OJDPEFΛѻ͑Δແྉͷॎॻ͖ΤσΟλ͕ͳ͔ͬͨ
    w ࠓ͸খઆΛॻ͘ਓ͕૿͑Δॿ͚ʹͳΕ͹͍͍ͳ͋ͱ͍
    ͏ࢥ͍Ͱ։ൃ
    !9

    View Slide

  10. ࠓճ࿩͍ͨ͜͠ͱ
    w ٕज़ύογϣϯڞ༗τʔΫͱ͍͏͜ͱͰʜʜ
    w ೥ॎॻ͖ΤσΟλΛͲ͏։ൃ͖͔ͯͨ͠
    w σεΫτοϓ͔ΒϞόΠϧʹͲ͏Ҡߦ͔ͨ͠
    w ॎॻ͖ΤσΟλ։ൃʹඞཁͳ৘ใΛ͍͍ͩͨશ෦
    w ΰʔϧ
    w ςΩετΤσΟλ͕04ඪ४Ͱଘࡏ͢Δ͜ͱʹײँ͢Δ
    w ॎॻ͖ΤσΟλΛ࡞ΔͨΊʹඞཁͳཁ݅Λڞ༗͢Δ
    !10

    View Slide

  11. Ξ΢τϥΠϯ
    ൃදλΠτϧʹ͍ͭͯ
    ॎॻ͖ΤσΟλΛ࡞Δ
    σεΫτοϓͱϞόΠϧ
    ·ͱΊ
    !11
    JPTEDF࣭໰Ͱ
    ࣭໰πΠʔτͯ͠΋Β͑Δͱ
    ޙͰҾ༻πΠʔτͰճ౴͠·͢

    View Slide

  12. ॎॻ͖ΤσΟλΛ
    ϓϥοτϑΥʔϜͰ
    ։ൃͯ͠Έͯ

    View Slide

  13. ʮॎॻ͖ΤσΟλʯΛ
    ʮϓϥοτϑΥʔϜʯͰ
    ʮ։ൃʯͯ͠Έͯ

    View Slide

  14. ʮॎॻ͖ΤσΟλʯΛ
    ʮϓϥοτϑΥʔϜʯͰ
    ʮ։ൃʯͯ͠Έͯ

    View Slide



  15. ͖
    Τ
    σ

    λ
    w


    ͖
    ͕
    Ͱ
    ͖
    Δ
    ς
    Ω
    ε
    τ
    Τ
    σ

    λ
    !15

    View Slide

  16. ॎॻ͖
    w


    ͖
    ͷ



    w



    w
    ٭


    γ
    φ
    Ϧ
    Φ

    w





    ͷ
    ه


    w
    ޿

    !16

    View Slide

  17. ॎॻ͖
    w


    ͖
    Τ
    σ

    λ
    ͷ



    w



    ʹ
    Ξ
    ΢
    τ
    ϓ

    τ
    ͞
    Ε
    Δ


    ʹ
    ۙ
    ͍
    ݟ
    ͨ

    Ͱ


    Λ

    ͖
    ͨ
    ͍
    ͱ
    ͍
    ͏


    !17

    View Slide

  18. ίϯϐϡʔλͱॎॻ͖
    w ςΩετΛॎॻ͖Ͱදࣔ͢ΔϑΝΠϧܗࣜ
    w 1%'
    w $.BQ8.PEFͳϑΥϯτΛ࢖͏
    w 47(
    w XSJUJOHNPEFUCUCSM
    w )5.-$44
    w XSJUJOHNPEFWFSUJBMSMWFSUJDBMMS
    !18

    View Slide

  19. ςΩετͱॎॻ͖
    w ॎॻ͖ͷςΩετͱ͍͏΋ͷ͸ͳ͍
    w σʔλ্ͷςΩετͷਐߦํ޲͸ͻͱͭ
    w ഑ྻͷJOEFY͕૿͑Δํ޲͚ͩ
    w ͋c͍c͏c͑c͓caOc͋
    w ҰํͰը૾͸࣍ݩ৘ใ
    w σΟεϓϨΠ্ʹςΩετͷਐߦํ޲͸ແ਺ʹ͋Δ
    w ͦͷҰ͕ͭॎॻ͖
    !19

    View Slide

  20. ॻࣈํ޲
    w ςΩετΛදࣔ͢Δࡍʹ͸ॻࣈํ޲ͱ͍͏΋ͷ͕͋Δ
    w ԣॻ͖
    w ࠨ͔Βӈʢࠨԣॻ͖ʣ
    w )FMMP XPSME
    w ӈ͔Βࠨʢӈԣॻ͖ʣ
    w ملاعلابابحرم
    !20
    w


    ͖

    w

    ͔
    Β
    Լ

    w
    ͜
    Μ
    ʹ
    ͪ
    ͸


    ք
    ʂ

    View Slide

  21. վ
    ߦ

    ޲
    w
    վ
    ߦ

    ޲
    ͸



    ޲
    ͱ

    ަ
    ͢
    Δ

    ޲

    w
    ԣ

    ͖


    ͔
    Β
    Լ


    w
    ӈ


    ͖

    ӈ
    ͔
    Β


    $44
    ͷ
    WFSUJDBMSM


    w


    ޠ

    w



    ͖


    ͔
    Β
    ӈ

    $44
    ͷ
    WFSUJDBMMS


    w
    Ϟ
    ϯ
    ΰ
    ϧ
    ޠ

    Ϟ
    ϯ
    ΰ
    ϧ


    Λ


    ͨ

    ߹


    w

    ͸
    Ω
    Ϧ
    ϧ


    ͕
    Ұ

    ʹ

    Θ
    Ε
    ͯ
    ͍
    Δ
    !21
    ը૾/PEFVF$$#:4"

    View Slide

  22. ͦͷଞͷॻࣈํ޲
    w ڇߞࣜʢ#PVTUSPQIFEPOʣ
    w ॻࣈํ޲͕ӈ͔Βࠨɺࠨ͔ΒӈͱަޓʹมΘΔ
    w ݹ୅ΪϦγϟޠ
    w ཐટܗ
    w ϑΝΠετεԁ൫ʢະղಡจࣈʣ
    w 6OJDPEFʹ΋ऩ࿥͞Ε͍ͯΔ
    w 6%d6'%
    !22
    ࣸਅ)FMJY$$#:4"
    ը૾3BOWFJH$$#:4"

    View Slide

  23. ʮॎॻ͖ΤσΟλʯΛ
    ʮϓϥοτϑΥʔϜʯͰ
    ʮ։ൃʯͯ͠Έͯ

    View Slide

  24. ϓϥοτϑΥʔϜ
    w σεΫτοϓ
    w NBD04
    w 8JOEPXT
    w 6CVOUV (5,

    w ϞόΠϧ
    w J04
    w "OESPJE
    w 681
    !24

    View Slide

  25. ϓϥοτϑΥʔϜ
    w σεΫτοϓɿ(6*πʔϧΩοτ͸ϥΠϒϥϦʢXY8JEHFUTʣ
    w NBD04
    w 8JOEPXT
    w 6CVOUV (5,

    w ϞόΠϧɿ(6*πʔϧΩοτ͸ωΠςΟϒͦͷ··
    w J04
    w "OESPJE
    w 681
    !25

    View Slide

  26. σεΫτοϓ
    !26
    OS ݴޠ ։ൃ؀ڥ
    Windows C++ Visual Studio
    macOS C++ / Objective-C Xcode
    Ubuntu (GTK+) C++ Eclipse → Makefile

    View Slide

  27. ϞόΠϧ
    !27
    OS ݴޠ ։ൃ؀ڥ
    iOS Swift / Objective-C / C++ Xcode
    Android Kotlin / Java / C++ Android Studio
    UWP C# / C++ Visual Studio

    View Slide

  28. ʮॎॻ͖ΤσΟλʯΛ
    ʮϓϥοτϑΥʔϜʯͰ
    ʮ։ൃʯͯ͠Έͯ

    View Slide

  29. ։ൃͷาΈ
    w ೥
    w ࣗ෼ͷཉ͍͠ॎॻ͖ΤσΟλͷͨΊʹϓϩάϥϛϯά
    Λ࢝ΊΔ
    w ࠷ॳʹ໨తΛ࣋ͬͯ࡞ͬͨͷ͸ϑΥϯτϑΝΠϧΛಡΈ
    ࠐΜͰॎॻ͖ͷจࣈྻΛදࣔ͢ΔϓϩάϥϜ
    w 0QFO5ZQFϑΥϯτͷ࢓༷ΛಡΜͩ
    !29

    View Slide

  30. ։ൃͷาΈ
    w ʙ೥
    w 8JOEPXT޲͚ϕʔλ൛Λग़͢
    w (6*πʔϧΩοτ͸XY8JEHFUT
    w 6OJDPEFจࣈྻΛ໰୊ͳ͘ѻ͑ΔϥΠϒϥϦͩͬͨ
    !30

    View Slide

  31. ։ൃͷาΈ
    w ʙ೥
    w NBD048JOEPXT6CVOUVʹରԠ
    w XY8JEHFUT͸ΫϩεϓϥοτϑΥʔϜϥΠϒϥϦ
    w ͔ͤͬ͘ͳͷͰରԠϓϥοτϑΥʔϜΛ૿΍ͨ͠
    w ΧϥʔֆจࣈରԠ
    !31

    View Slide

  32. ։ൃͷาΈ
    w ʙ೥
    w 1%'ग़ྗʢ1%'ͷ࢓༷ॻΛಡΜͰ࡞ͬͨʣ
    w ϖʔδදࣔʢ1%'ग़ྗΛ8:4*8:(ʹͨ͠ʣ
    w ࡿ࿈൑ʢxy࠲ඪܥͰ͸ͳ͘rθʹͯ͠Έͨʣ
    w HJUಋೖʢͦΕ·Ͱ೴಺؅ཧ͍ͯͨ͠ʣ
    !32

    View Slide

  33. σεΫτοϓ։ൃ
    !33
    OS ݴޠ ։ൃ؀ڥ
    Windows C++ Visual Studio
    macOS C++ / Objective-C Xcode
    Ubuntu (GTK+) C++ Eclipse → Makefile

    View Slide

  34. ιʔείʔυͷߏ੒
    !34
    5"5&EJUPSͷ

    શͯͷίʔυ
    XY8JEHFUT
    NBD048JOEPXT6CVOUV

    View Slide

  35. ։ൃͷาΈ
    w ೥ʙ
    w J04"OESPJE681Ͱͷ։ൃΛ࢝ΊΔ
    w ࢓ࣄͰJ04ͱ"OESPJEΛ֮͑ͨ
    !35

    View Slide

  36. ϞόΠϧ։ൃ
    !36
    OS ݴޠ ։ൃ؀ڥ
    iOS Swift / Objective-C / C++ Xcode
    Android Kotlin / Java / C++ Android Studio
    UWP C# / C++ Visual Studio

    View Slide

  37. ϞόΠϧ։ൃ
    !37
    5"5&EJUPSͷ
    શίʔυ

    $

    XY8JEHFUT $

    NBD048JOEPXT6CVOUV J04 "OESPJE 681

    View Slide

  38. ϞόΠϧ։ൃ
    !38
    5"5&EJUPSͷ
    શίʔυ

    $

    XY8JEHFUT $
    4XJGU ,PUMJO $
    NBD048JOEPXT6CVOUV J04 "OESPJE 681

    View Slide

  39. ϞόΠϧ։ൃ
    !39
    5"5&EJUPSͷ
    શίʔυ

    $

    XY8JEHFUT $
    4XJGU ,PUMJO $
    શίʔυ

    4XJGU

    શίʔυ

    ,PUMJO

    શίʔυ

    $

    NBD048JOEPXT6CVOUV J04 "OESPJE 681

    View Slide

  40. શίʔυ

    4XJGU

    શίʔυ

    ,PUMJO

    શίʔυ

    $

    ϞόΠϧ։ൃ
    !40
    5"5&EJUPSͷ
    શίʔυ

    $

    XY8JEHFUT $
    4XJGU ,PUMJO $
    NBD048JOEPXT6CVOUV J04 "OESPJE 681

    View Slide

  41. ϞόΠϧ։ൃ
    !41
    ςΩετฤूςΩετඳը

    ϥΠϒϥϦԽ $

    (6*෦෼ $

    XY8JEHFUT $
    4XJGU ,PUMJO $
    NBD048JOEPXT6CVOUV J04 "OESPJE 681

    View Slide

  42. ϞόΠϧ։ൃ
    !42
    (6*෦෼ $

    XY8JEHFUT $
    4XJGU ,PUMJO $
    NBD048JOEPXT6CVOUV J04 "OESPJE 681
    $͸Ͳͷ؀ڥͰ΋࢖͑ͯศར
    $ڞ௨ϥΠϒϥϦ ςΩετฤूςΩετඳը

    View Slide

  43. ϞόΠϧ։ൃ
    !43
    XY8JEHFUT $
    4XJGU ,PUMJO $
    NBD048JOEPXT6CVOUV J04 "OESPJE 681
    $ڞ௨ϥΠϒϥϦ ςΩετฤूςΩετඳը

    (6*෦෼ $
    (6*෦෼ (6*෦෼ (6*෦෼

    View Slide

  44. ϞόΠϧ։ൃ
    w ༨ஊɿ4XJGU͔Β$ϥΠϒϥϦΛ࢖͏ͨΊʹ͸
    w 4XJGU͔Βݺ΂Δ0CKFDUJWF$ͷϥΠϒϥϦΛ࡞Δ
    w 0CKFDUJWF$ͷϥΠϒϥϦ͔Β$ϥΠϒϥϦΛݺͿ
    !44

    View Slide

  45. ։ൃ࢙
    w ೥ࠒɿ։ൃ։࢝
    w ʙ೥ɿ8JOEPXT൛ެ։
    w ʙ೥ɿNBD046CVOUV൛ެ։ ΧϥʔֆจࣈରԠ
    w ʙ೥ɿ1%'ग़ྗɾࡿ࿈൑Ϟʔυʢ׬શʹझຯʣ
    w ೥ʙɿΞϓϦ൛ϓϩτλΠϓ࡞੒
    w ೥ɿJ04"OESPJE൛ެ։
    !45

    View Slide

  46. XY8JEHFUT $
    4XJGU ,PUMJO $
    NBD048JOEPXT6CVOUV J04 "OESPJE 681
    (6*෦෼ $
    (6*෦෼ (6*෦෼ (6*෦෼
    ࠓճͷൃද಺༰
    !46
    $ڞ௨ϥΠϒϥϦ ςΩετฤूςΩετඳը

    ʢϓϥοτϑΥʔϜʹΑΒͣʣ
    ςΩετΛॎॻ͖Ͱදࣔ͢Δ࿩

    View Slide

  47. XY8JEHFUT $
    4XJGU ,PUMJO $
    NBD048JOEPXT6CVOUV J04 "OESPJE 681
    (6*෦෼ $
    (6*෦෼ (6*෦෼ (6*෦෼
    ࠓճͷൃද಺༰
    !47
    $ڞ௨ϥΠϒϥϦ ςΩετฤूςΩετඳը

    ֤ϓϥοτϑΥʔϜͰ
    ςΩετΛฤू͢Δ࿩

    View Slide

  48. XY8JEHFUT $
    4XJGU ,PUMJO $
    NBD048JOEPXT6CVOUV J04 "OESPJE 681
    (6*෦෼ $
    (6*෦෼ (6*෦෼ (6*෦෼
    ࠓճͷൃද಺༰
    !48
    $ڞ௨ϥΠϒϥϦ ςΩετฤूςΩετඳը

    σεΫτοϓͱϞόΠϧͰͷ
    ςΩετΤσΟλͷ6*ͷҧ͍ͷ࿩

    View Slide

  49. Ξ΢τϥΠϯ
    ൃදλΠτϧʹ͍ͭͯ
    ॎॻ͖ΤσΟλΛ࡞Δ
    ςΩετΤσΟλ
    ςΩετΛදࣔ͢Δʢʴॎॻ͖ʣ
    ςΩετΛฤू͢Δ
    σεΫτοϓͱϞόΠϧ
    ·ͱΊ
    !49
    JPTEDF࣭໰Ͱ
    ࣭໰πΠʔτͯ͠΋Β͑Δͱ
    ޙͰҾ༻πΠʔτͰճ౴͠·͢

    View Slide



  50. ͖
    Τ
    σ

    λ
    ͸

    Ͳ
    ͏

    Δ
    ͷ
    ͔

    View Slide

  51. ॎॻ͖ΤσΟλ
    w ςΩετΤσΟλͰදࣔ͞ΕΔςΩετΛॎॻ͖ʹ͢Δ
    !51

    View Slide

  52. ॎॻ͖ΤσΟλ
    w ςΩετΤσΟλͬͯͳʹ
    w J04ͩͱ6*5FYU7JFX͕ςΩετΤσΟλ
    !52

    View Slide

  53. ॎॻ͖ΤσΟλ
    w ςΩετΤσΟλ 6*5FYU7JFXͷΑ͏ͳίϯϙʔωϯτ

    w Ͳͷ04Ͱ΋ඪ४తʹ༻ҙ͞Ε͍ͯΔ
    !53
    OS ඪ४࣮૷
    iOS UITextView
    Android android.widget.TextView
    UWP TextBox
    Windows MSFTEDIT_CLASS / Text box
    macOS NSTextView
    GTK+ GtkTextView

    View Slide

  54. ॎॻ͖ΤσΟλ
    w 2VFTUJPO
    w ඪ४ͷςΩετΤσΟλΛॎॻ͖ʹͰ͖Δͷ͔ʁ
    !54

    View Slide

  55. ॎॻ͖ΤσΟλ
    w "OTXFS
    w Ͱ͖ͳ͍Ͱ͢Ͷ
    !55

    View Slide

  56. ςΩετΤσΟλΛ
    ࠶࣮૷͢Δ

    View Slide

  57. ςΩετΤσΟλ
    w ςΩετΤσΟλ͸γϯϓϧͳίϯϙʔωϯτʁ
    !57

    View Slide

  58. ςΩετΤσΟλ
    w ςΩετΤσΟλ͸γϯϓϧͳίϯϙʔωϯτͰ͸ͳ͍
    !58

    View Slide

  59. ςΩετΤσΟλ
    w ༷ʑͳొ৔ਓ෺͕૬ޓʹӨڹ͠߹͏ࠞಱͱͨ͠৔ॴ
    w ೖग़ྗʢਓؒͱίϯϐϡʔλͷք໘ʣ
    w 04
    w ΞϓϦ
    w *.&ʢ೔ຊޠೖྗͳͲʣ
    w ͔͠΋͜ΕΒશ͕ͯঢ়ଶΛ΋͍ͬͯΔ
    !59

    View Slide

  60. ςΩετΤσΟλ
    w ςΩετΤσΟλʹඞཁͳ͜ͱ
    w ը໘ʹςΩετΛදࣔͰ͖Δ
    w ը໘ͷςΩετΛฤूͰ͖Δ
    !60

    View Slide

  61. ςΩετΤσΟλ
    w ςΩετΤσΟλʹඞཁͳ͜ͱ
    w ը໘ʹςΩετΛදࣔͰ͖Δ
    w จࣈίʔυͱϑΥϯτͱը૾ͷ࿩
    w ը໘ͷςΩετΛฤूͰ͖Δ
    w 04ͱ*.&ͱ6*ͷ࿩
    !61

    View Slide

  62. ςΩετΤσΟλ
    w ςΩετΤσΟλʹඞཁͳ͜ͱ
    w ը໘ʹςΩετΛදࣔͰ͖Δ
    w จࣈίʔυͱϑΥϯτͱը૾ͷ࿩
    w େ෦෼͕QMBUGPSNJOEFQFOEFOU
    w ը໘ͷςΩετΛฤूͰ͖Δ
    w 04ͱ*.&ͱ6*ͷ࿩
    w େ෦෼͕QMBUGPSNTQFDJpD
    !62

    View Slide

  63. ςΩετΤσΟλ
    w ςΩετΤσΟλʹඞཁͳ͜ͱ
    w ΈΔʢ7JFXFSʣ
    w ฤू͢Δʢ&EJUPSʣ
    !63

    View Slide

  64. ςΩετͷදࣔ

    View Slide

  65. ςΩετͷදࣔ
    w ςΩετ͕දࣔ͞ΕΔ
    w ʹσΟεϓϨΠʹจࣈͷॻ͔Εͨը૾͕ग़Δ
    !65

    View Slide

  66. ςΩετͷදࣔ
    w J04ͰςΩετΛදࣔ͢Δํ๏͸͍͔ͭ͋͘Δ
    w 6*-BCFM
    w 4USJOHESBX 6*7JFXESBX

    w $5'POU%SBX(MZQIT $PSF5FYU
    ॎॻ͖΋Մೳ
    !66

    View Slide

  67. ςΩετͷදࣔ
    w $PSF5FYU͸ඇৗʹྑ͍ϑϨʔϜϫʔΫͳͷͰ͕͢ʜʜ
    w 5"5&EJUPSͰ͸ҎԼͷཧ༝͔ΒςΩετͷදࣔΛಠ࣮ࣗ૷
    w શͯͷϓϥοτϑΥʔϜͰಉ͡ඳը݁Ռ͕ཉ͍͠
    w 1%'Λ8:4*8:(Ͱग़ྗ͍ͨ͠
    w ϓϥοτϑΥʔϜͷจࣈඳը͸࣌ʑյΕΔ
    w ॎॻ͖Λશ͘αϙʔτ͠ͳ͍04΋͋Δʢ"OESPJEʣ
    w ࣮૷։࢝࣌ظ͕೥લ
    w झຯ͔ͩΒ
    !67

    View Slide

  68. ςΩετͷදࣔ
    w จࣈྻඳըܥΛθϩ͔Β࡞͍ͬͯ͘
    !68
    ςΩετ ը૾

    View Slide

  69. ςΩετͷදࣔ
    w จࣈྻඳըܥΛθϩ͔Β࡞͍ͬͯ͘
    !69
    6**NBHFESBX
    6**NBHF7JFX
    ςΩετ ը૾

    View Slide

  70. ςΩετͷදࣔ
    w จࣈྻඳըܥΛθϩ͔Β࡞͍ͬͯ͘
    !70
    ςΩετ ը૾
    จࣈྻඳըܥ

    View Slide

  71. ςΩετͷදࣔ
    ςΩετ ը૾
    จࣈྻඳըܥ
    w ը૾ʹ3(#"ͷ഑ྻ
    w શ04ͰදࣔͰ͖Δ
    !71

    View Slide

  72. ศརͳശ
    ςΩετͷදࣔ
    !72
    ςΩετ ը૾
    จࣈྻඳըܥ

    View Slide

  73. ςΩετͷදࣔ
    w ศརͳശͷΠϝʔδ
    !73
    extension UIImage {
    convenience init(text: String) {
    ...
    }
    }

    View Slide

  74. ศརͳശ
    ςΩετͷදࣔ
    !74
    ը૾
    จࣈྻඳըܥ
    ςΩετ
    ʢόΠτྻʣ

    View Slide

  75. ςΩετͷදࣔ
    !75
    ςΩετ
    ʢόΠτྻʣ
    ը૾
    จࣈྻඳըܥ
    จࣈίʔυͱ
    ϑΥϯτͷ஌ࣝ

    View Slide

  76. จࣈίʔυ
    w ػց΍ͦΕΛ࢖͏ਓಉ࢜Ͱͷϓϩτίϧ
    w ͜ͷόΠτྻ͸͜ͷจࣈʹ૬౰͢Δ΋ͷͱͯ͠ѻ͍·
    ͠ΐ͏ͱ͍͏໿ଋ
    w Ͱ͔͍ͬද
    w ϓϩτίϧΛऔΓҧ͑ͯ͠·͏ͷ͕͍ΘΏΔจࣈԽ͚
    w ࠷ۙͩͱ͍͍ͩͨ6OJDPEF
    !76

    View Slide

  77. ϑΥϯτ
    w จࣈྻ͔ΒਓؒͷͨΊͷը૾Λੜ੒͢Δͷʹඞཁͳશͯ
    ͷ৘ใΛ֨ೲͨ͠ϑΝΠϧ
    w Ͳͷจࣈ͕Ͳ͏͍͏ܗͳͷ͔
    w จࣈͷେ͖͞͸ͲΕ͘Β͍ͳͷ͔
    w ࠷ۙͩͱ͍͍ͩͨ0QFO5ZQFϑΥϯτ
    !77
    https://www.freetype.org/freetype2/docs/glyphs/glyphs-3.html

    View Slide

  78. ςΩετͷදࣔ
    !78
    ςΩετ
    ʢόΠτྻʣ
    ը૾
    จࣈྻඳըܥ
    6OJDPEFͱ
    0QFO5ZQFͷ
    ࢓༷

    View Slide

  79. 6OJDPEF
    w จࣈྻΛόΠτྻʹͯ͠ѻ͏ͨΊͷن֨
    w 6OJDPEF͸ූ߸Խจࣈू߹ͷͻͱͭ
    w 6d6''''ͷූ߸ΛจࣈʹରԠ͚ͮͨ΋ͷ
    w 6ͷޙΖ͸ਐ਺දه
    w 65'65'65'͸จࣈූ߸Խܗࣜ
    w 6d6''''ͷCJUͷ৘ใΛͲͷΑ͏ʹό
    ΠτྻͰදݱ͢Δ͔ΛఆΊͨ΋ͷ
    !79

    View Slide

  80. ίʔυϙΠϯτ
    w 6OJDPEF಺ͷจࣈͷ࠷খ୯ҐΛίʔυϙΠϯτͱ͍͏
    w ऩ࿥͞Ε͍ͯΔจࣈͻͱͭΛࣔ͢΋ͷ
    w ྫɿ
    w 6"aO
    w 6"
    w 6͋
    w 6#҆
    !80

    View Slide

  81. 4XJGUͱ6OJDPEF
    w 4USJOHͷ಺෦දݱ͸65'
    w 4USJOHDPVOUHSBQIFNFDMVTUFSͷ਺
    w !DPVOU
    w 4USJOHVOJDPEF4DBMBSTDPVOUίʔυϙΠϯτͷ਺
    w !VOJDPEF4DBMBSTDPVOU
    w 4USJOHVUGDPVOU65'Ͱͷ௕͞
    w !VUGDPVOU
    !81

    View Slide

  82. 0QFO5ZQF
    w ϑΥϯτϑΝΠϧͷ࢓༷ͷͻͱͭ
    w จࣈΛ࠷େݸ֨ೲͰ͖Δ
    w ࠷ॳͷͭ͸OPUEFGͱఆΊΒΕ͍ͯΔ
    w ͍ΘΏΔ౾෗
    !82

    View Slide

  83. άϦϑ
    w ϑΥϯτ಺ͷจࣈͷ࠷খ୯ҐΛάϦϑͱ͍͏
    w ऩ࿥͞Ε͍ͯΔ֤จࣈʢܗঢ়ʣͷ͜ͱ
    w ӈͷਤΈ͍ͨͳΠϝʔδ
    w جຊతʹϕΫλʔը૾
    w දࣔʹ͸ϥελϥΠζ͕ඞཁ
    !83
    http://fontforge.github.io/en-US/documentation/interface/charview/

    View Slide

  84. 0QFO5ZQFϑΥϯτ
    w ϑΝΠϧߏ଄ʢৄ͘͠͸0QFO5ZQFͷ࢓༷ΛݟΔͱྑ͍ʣ
    w ϔομʔͱσʔλͰߏ੒͞ΕΔόΠφϦ
    w ϔομʔɿͲ͜ʹͲ͏͍͏ςʔϒϧ͕͋Δ͔ॻ͔Ε͍ͯΔ
    w ςʔϒϧɿ࢓༷Ͱఆٛ͞ΕͨσʔλʢҎԼ͸୅දతͳ΋ͷʣ
    w HMZG5SVF5ZQFͷάϦϑ৘ใ
    w $''㾐1PTU4DSJQUͷάϦϑ৘ใ
    w $''7BSJBCMF'POUͰ࢖ΘΕΔάϦϑ৘ใ
    w ͜ΕΛਖ਼͘͠ղऍ͢ΔͱจࣈΛදࣔͰ͖Δ
    !84

    View Slide

  85. ςΩετͷදࣔ
    !85
    ςΩετ
    ʢόΠτྻʣ
    ը૾
    จࣈྻඳըܥ
    6OJDPEFͱ
    0QFO5ZQFͷ
    ࢓༷
    ϑΥϯτ

    View Slide

  86. 04ͱϑΥϯτ
    w ࢓༷͚ͩͰ͸ͳ࣮͘ࡍͷϑΥϯτ͕ςΩετදࣔʹඞཁ
    w ͦΕͰϑΥϯτ͸Ͳ͜ʹʁ
    w ˠ୺຤ʹΠϯετʔϧ͞Ε͍ͯΔ΋ͷΛ࢖͏
    !86

    View Slide

  87. 04ͱϑΥϯτ
    !87
    OS ϑΥϯτͷऔಘ औಘͰ͖Δ΋ͷ
    iOS CGFontCopyTableForTag όΠφϦʢஅยʣ
    Android /system/etc/fonts.xml ϑΝΠϧύε
    UWP IDWriteLocalFontFileLoader ϑΝΠϧύε
    Windows
    IDWriteLocalFontFileLoader /
    GetFontData
    ϑΝΠϧύε / 

    όΠφϦ
    macOS CGFontCopyTableForTag όΠφϦʢஅยʣ
    GTK+ fontconfig ϑΝΠϧύε

    View Slide

  88. ςΩετͷදࣔ
    !88
    ςΩετ
    ʢόΠτྻʣ
    ը૾
    จࣈྻඳըܥ
    6OJDPEFͱ
    0QFO5ZQFͷ
    ࢓༷
    ϑΥϯτ

    View Slide

  89. ςΩετͷදࣔ
    !89
    ςΩετ
    ʢόΠτྻʣ
    ը

    ί
    ʔ
    υ
    ϙ
    Π
    ϯ
    τ

    ά
    Ϧ
    ϑ
    ྻ ϥ
    ε
    λ
    ϥ
    Π
    ζ
    6OJDPEF
    ը


    View Slide

  90. ςΩετͷදࣔ
    !90
    ςΩετ
    ʢόΠτྻʣ
    ը

    ί
    ʔ
    υ
    ϙ
    Π
    ϯ
    τ

    ά
    Ϧ
    ϑ
    ྻ ϥ
    ε
    λ
    ϥ
    Π
    ζ
    6OJDPEF
    ը


    ʁ

    View Slide

  91. 6OJDPEFͱ0QFO5ZQFΛͭͳ͙
    w 0QFO5ZQFͷDNBQςʔϒϧ
    w ίʔυϙΠϯτ͔ΒάϦϑͷ*%΁ͷม׵ද
    w άϦϑ*%ͷ͸OPUEFGͱݺ͹ΕΔ͍ΘΏΔ౾෗จࣈ
    w ίʔυϙΠϯτ͸ສ͘Β͍
    w άϦϑ͸ϑΥϯτͭ͋ͨΓ࠷େ

    View Slide

  92. 6OJDPEFͱ0QFO5ZQFΛͭͳ͙
    w 0QFO5ZQFͷDNBQςʔϒϧ
    w ίʔυϙΠϯτ͔ΒάϦϑͷ*%΁ͷม׵ද
    w άϦϑ*%ͷ͸OPUEFGͱݺ͹ΕΔ͍ΘΏΔ౾෗จࣈ
    !92
    cmap
    ίʔυϙΠϯτ
    U+0041
    U+0042
    U+3042
    U+3043
    U+5B89
    U+1F389
    άϦϑID ܗঢ়
    0
    1 A
    2 B
    3 ҆
    4 ͋
    5 ͍

    View Slide

  93. ςΩετͷදࣔ
    !93
    ςΩετ
    ʢόΠτྻʣ
    ը

    ί
    ʔ
    υ
    ϙ
    Π
    ϯ
    τ

    ά
    Ϧ
    ϑ

    ϕ
    Ϋ
    λ
    ʔ
    ը


    ϥ
    ε
    λ
    ϥ
    Π
    ζ
    6OJDPEF
    ը


    ϑ

    ϯ
    τ
    ͷ
    DNBQ
    ʁ

    View Slide

  94. άϦϑͷϥελϥΠζ
    w ϑΥϯτͷಡΈࠐΈʹ͸'SFF5ZQFͱ͍͏$ݴޠͰॻ͔Ε
    ͨϥΠϒϥϦ͕Α͘࢖ΘΕΔ
    w ίʔυϙΠϯτ͔ΒάϦϑ*%΁ͷม׵
    w άϦϑ*%Λࢦఆͯ͠ϕΫλʔը૾ΛϥελϥΠζ
    w 1PTU4DSJQU $''
    ܥɺ5SVF5ZQFܥͷϑΥϯτΛ·ͱ
    Ίͯѻ͑Δ
    !94

    View Slide

  95. ςΩετͷදࣔ
    !95
    ςΩετ
    ʢόΠτྻʣ
    ը

    ί
    ʔ
    υ
    ϙ
    Π
    ϯ
    τ

    ά
    Ϧ
    ϑ

    6OJDPEF
    ը


    ϑ

    ϯ
    τ
    ͷ
    DNBQ
    'SFF5ZQF
    ͱ
    ͔


    ʁ

    View Slide

  96. άϦϑͷ഑ஔ
    w ҎԼΛ܁Γฦ͢
    w άϦϑΛஔ͘
    w άϦϑͷ෯͚ͩඳըҐஔΛਐΊΔ
    w ͨͩ͠ɺվߦจࣈ΍ંΓฦ͠Ͱ࣍ͷߦʹδϟϯϓ͢Δ
    !96
    https://www.freetype.org/freetype2/docs/glyphs/glyphs-3.html

    View Slide

  97. վߦจࣈ
    w 8JOEPXTͷվߦ͸aSaOͰͭͷվߦ
    w $BSSJBHF3FUVSOߦ಄ʹ໭Δ
    w -JOF'FFEߦΛਐΊΔ
    !97
    U+000D CARRIAGE RETURN \r Mac OS 9·Ͱ
    U+000A LINE FEED \n Linux / macOS
    U+000C FORM FEED \f
    U+000B LINE TABULATION \v
    U+2028 LINE SEPARATOR
    U+2029 PARAGRAPH SEPARATOR
    U+0085 NEW LINE

    View Slide

  98. ͱΓ͋͑ͣ
    w ؆୯ͷͨΊ·ͣ͸ԣॻ͖
    !98

    View Slide

  99. จࣈΛฒ΂ͨ
    w ඳըྖҬ͔Β͸Έग़ͯ͠·ͬͨͷͰંΓฦ͞ͳ͍ͱ
    !99

    View Slide

  100. ંΓฦ͠
    w UFYUBSFBͱ͍͏ӳ୯ޠ͕෼ׂ͞Εͯ͠·ͬͨʜʜ
    !100

    View Slide

  101. 6"96OJDPEF-JOF
    #SFBL"MHPSJUIN
    w 6OJDPEFඪ४ͷҰ෦
    w ςΩετͷͲ͕͜ંΓฦ͠Մೳ͔Λఆ͍ٛͯ͠Δ
    w ߦ಄ߦ຤ېࢭɾ෼ׂېࢭͳͲ΋
    !101

    View Slide

  102. 6"96OJDPEF-JOF
    #SFBL"MHPSJUIN
    w *$6 *OUFSOBUJPOBM$PNQPOFOUGPS6OJDPEF

    w ΋ͱ΋ͱ*#.ओಋͷ044Ͱࠓ͸6OJDPEFʹଐͯ͠Δ
    w *$6ʹ͋Δ-JOF#SFBL*UFSBUPSΛ࢖͏ͱંΓฦ͠Մೳͳ
    ৔ॴ͕Θ͔Δ
    !102

    View Slide

  103. ԣॻ͖ͷ׬੒
    w ͖ͪΜͱંΓฦͤ·ͨ͠
    !103

    View Slide

  104. ςΩετͷදࣔʴॎॻ͖
    w ԣॻ͖͔Βॎॻ͖ʹม͑Δ
    w จࣈΛਫฏํ޲Ͱ͸ͳ͘ɺਨ௚ํ޲ʹਐΊΔ
    w ߦΛਨ௚ํ޲Ͱ͸ͳ͘ɺਫฏํ޲ʹਐΊΔ
    !104

    View Slide

  105. ςΩετͷදࣔʴॎॻ͖
    !105

    View Slide

  106. ςΩετͷදࣔʴॎॻ͖
    !106

    View Slide

  107. ςΩετͷදࣔʴॎॻ͖
    !107

    View Slide

  108. ςΩετͷදࣔʴॎॻ͖
    w ԣॻ͖͔Βॎॻ͖ʹม͑Δ
    w จࣈΛਫฏํ޲Ͱ͸ͳ͘ɺਨ௚ํ޲ʹਐΊΔ
    w ߦΛਨ௚ํ޲Ͱ͸ͳ͘ɺਫฏํ޲ʹਐΊΔ
    w ϑΥϯτͷॎॻ͖༻ͷάϦϑΛ࢖༻͢Δ
    w ʮɻʯʮɺʯʮΐʯʮ₃ʯʮʢʯʮʣʯʮʔʯ
    w ΞϧϑΝϕοτ౳ͷจࣈΛ౓ճసͤ͞Δ
    w ൒֯ͩͱճస͢Δɺશ֯ͩͱճస͠ͳ͍
    !108

    View Slide

  109. 6"96OJDPEF7FSUJDBM
    5FYU-BZPVU
    w ͭʹ෼ྨͯ͠ఆٛ͞Ε͍ͯΔʢ656S5Sʣ
    w ೥ʹυϥϑτͷ࢓༷͕ࡦఆ͞Εͨ
    !109
    ෼ྨ ಺༰ ର৅ίʔυϙΠϯτ
    U (Upright) ਖ਼ཱʢͦͷ··ʣͰදࣔ ׽ࣈ౳
    R (Rotated) ࣌ܭճΓʹճసͯ͠දࣔ Alphabet etc...
    Tu (Transformed, upright) U͕ͩઐ༻άϦϑ͕ඞཁ ɺɻΐ₃
    Tr (Transformed, rotated) R͕ͩઐ༻άϦϑ͕ඞཁ ʢʣʔ




    View Slide

  110. 6"96OJDPEF7FSUJDBM
    5FYU-BZPVU
    w ͭʹ෼ྨͯ͠ఆٛ͞Ε͍ͯΔʢ656S5Sʣ
    w ೥ʹυϥϑτͷ࢓༷͕ࡦఆ͞Εͨ
    !110
    ෼ྨ ಺༰ ର৅ίʔυϙΠϯτ
    U (Upright) ਖ਼ཱʢͦͷ··ʣͰදࣔ ׽ࣈ౳
    R (Rotated) ࣌ܭճΓʹճసͯ͠දࣔ Alphabet etc...
    Tu (Transformed, upright) U͕ͩઐ༻άϦϑ͕ඞཁ ɺɻΐ₃
    Tr (Transformed, rotated) R͕ͩઐ༻άϦϑ͕ඞཁ ʢʣʔ
    ͋ʔ

    View Slide

  111. 6"96OJDPEF7FSUJDBM
    5FYU-BZPVU
    w ͭʹ෼ྨͯ͠ఆٛ͞Ε͍ͯΔʢ656S5Sʣ
    w ೥ʹυϥϑτͷ࢓༷͕ࡦఆ͞Εͨ
    !111
    ෼ྨ ಺༰ ର৅ίʔυϙΠϯτ
    U (Upright) ਖ਼ཱʢͦͷ··ʣͰදࣔ ׽ࣈ౳
    R (Rotated) ࣌ܭճΓʹճసͯ͠දࣔ Alphabet etc...
    Tu (Transformed, upright) U͕ͩઐ༻άϦϑ͕ඞཁ ɺɻΐ₃
    Tr (Transformed, rotated) R͕ͩઐ༻άϦϑ͕ඞཁ ʢʣʔ
    ͋
    ʔ
    ൃදࢿྉΛ࡞͍ͬͯͯݟ͚ͭ
    ͯ͠·ͬͨͷͰ͕͢ɺ"QQMFͷ
    จࣈྻඳըܥͷόάͰ͢Ͷ
    ʢNBD04J04Ͱ֬ೝʣ
    ͋ʔ

    View Slide

  112. !112
    w ରԠ͢Δ0QFO5ZQFͷ࢓༷
    w (46# (MZQI4VCTUJUVUJPO

    w άϦϑΛผͷάϦϑʹஔ׵͢Δػೳ
    w ॎॻ͖ͷ৔߹͸άϦϑ↦άϦϑ
    w WFSUWSUWSUSͱ͔ͷλάͷ΋ͷ
    w ଞͷ༻్ͩͱ/άϦϑ↦.άϦϑͷ৔߹΋͋Δ
    6"96OJDPEF7FSUJDBM
    5FYU-BZPVU

    View Slide

  113. ׬੒
    !113

    View Slide

  114. ςΩετͷදࣔʴΧϥʔֆจࣈ
    w ౾෗
    !114

    View Slide

  115. ςΩετͷදࣔʴΧϥʔֆจࣈ
    w ౾෗ͷਖ਼ମ
    w ϑΥϯτͷάϦϑ*%ͷจࣈ
    w ϑΥϯτʹରԠ͢ΔάϦϑ͕ͳ͍৔߹ʹ࢖༻͞ΕΔ
    w ࣮ࡍʹ͸Λද͍ࣔͨ͠
    w ଟ͘ͷ৔߹ಛผͳϑΥϯτ͕༻ҙ͞Ε͍ͯΔ
    w "QQMF$PMPS&NPKJ/PUP$PMPS&NPKJ4FHPF
    6*&NPKJ
    !115

    View Slide

  116. ΧϥʔֆจࣈͱϑΥϯτ
    w 0QFO5ZQFͷ࢓༷
    w Χϥʔֆจࣈͷ࢓༷͸େ͖͘छྨ
    !116
    ܗࣜ ओͳϓϥοτϑΥʔϜ த਎ͷܗࣜ
    $#%5$#-$ "OESPJE-JOVY 1/(ը૾
    $0-3$1"- 8JOEPXT ී௨ͷάϦϑͱ৭৘ใ
    47(㾐 $1"-
    "EPCF.P[JMMB 47(ը૾ʢͱ৭৘ใʣ
    TCJY "QQMF
    NBD041/(ը૾
    J04FNKDը૾ʢಠࣗܗࣜʣ

    View Slide

  117. 6546OJDPEF&NPKJ
    w 6OJDPEFͷΧϥʔֆจࣈͷ࢓༷
    w Χϥʔֆจࣈͷ෼ྨ
    w ࠃض
    w ғΈ਺ࣈ
    w ݁߹จࣈ ;8+

    w 1SFTFOUBUJPO4FMFDUPS
    w &NPKJ.PEJpFS
    w 5BH4FRVFODF
    !117

    View Slide

  118. ςΩετͷදࣔͱΧϥʔֆจࣈ
    w ࢓༷͕ͨ͘͞Μ͋ͬͯେม
    w Χϥʔֆจࣈʹؔ͢Δ੹຿͕ࢄΒ͹͍ͬͯΔͷͰେม
    w 6OJDPEFͷྖҬ
    w ԿΛͲ͏දࣔ͢΂͖͔ͱ͍͏࢓༷
    w ϑΥϯτͷྖҬ
    w දࣔ͢Δ͜ͱͷͰ͖Δจࣈͷఏڙ
    w จࣈྻඳըܥͷྖҬ
    w ΧϥʔֆจࣈΛ࢖͏͔നࠇจࣈΛ࢖͏͔ͷ൑அ
    !118

    View Slide

  119. ς
    Ω
    ε
    τ
    ͷ



    ɹ
    ɹ
    ɹ
    ɹ
    ʴ
    Χ
    ϥ
    ʔ
    ֆ


    w
    ς
    Ω
    ε
    τ
    ͕


    ͖
    Ͱ


    Ͱ
    ͖
    ·
    ͠
    ͨ
    !119

    View Slide

  120. ςΩετͷදࣔʴͦͷଞ
    w ࠓճѻΘͳ͔ͬͨ΋ͷ
    w ίʔυϙΠϯτ㱠άϦϑ
    w *74ʢҟମࣈηϨΫλʣ
    w (46#
    w ೔ຊޠҎ֎ͷςΩετͷॲཧ
    w CJEJʢ૒ํ޲ςΩετɾΞϥϏΞޠʣ
    w (104
    w ౳ʑ
    !120

    View Slide

  121. ςΩετͷฤू

    View Slide

  122. ςΩετͷฤू
    w จࣈྻΛબ୒͢Δ
    w બ୒ൣғΛจࣈྻͰஔ׵͢Δ
    !122

    View Slide

  123. ςΩετͷฤू
    w จࣈྻΛબ୒͢Δʢ࠷ޙʹ࿩͠·͢ʣ
    w ΩʔϘʔυૢ࡞ʹΑΔมߋ
    w Ϛ΢εૢ࡞ɾλονૢ࡞ʹΑΔมߋ
    w બ୒ൣғΛจࣈྻͰஔ׵͢Δ
    w ΩʔϘʔυ͔Βड͚औͬͨจࣈྻͰஔ׵
    w ΫϦοϓϘʔυͷจࣈྻͰஔ׵
    !123

    View Slide

  124. σεΫτοϓͷ5FYU7JFX
    !124
    ਓؒ
    ೖྗ૷ஔ
    ग़ྗ૷ஔ
    04
    ΞϓϦ
    5FYU7JFX
    ςΩετදࣔ
    ςΩετʁ

    View Slide

  125. σεΫτοϓͷ5FYU7JFX
    !125
    ਓؒ
    ೖྗ૷ஔ
    ग़ྗ૷ஔ
    04
    ΞϓϦ
    5FYU7JFX
    ςΩετදࣔ
    Ωʔίʔυ
    ςΩετʁ

    View Slide

  126. 5FYU7JFXͱ͸ʁ
    w ΩʔίʔυͷετϦʔϜ͔ΒͲ͏ʹ͔ͯ͠ςΩετΛੜ੒
    ͠ͳ͍ͱ͍͚ͳ͍
    w ΞϧϑΝϕοτ͸͍͍ͱͯ͠೔ຊޠ͸ʜʜʁ
    w ͜ΕΛղܾ͢ΔͨΊʹ*.&ͱ͍͏΋ͷ͕͋Δ

    ʢJ04Ͱ͸͜Ε͕ΩʔϘʔυͱݺ͹Ε͍ͯΔʣ
    !126

    View Slide

  127. σεΫτοϓͷ5FYU7JFX
    !127
    ਓؒ
    ೖྗ૷ஔ
    ग़ྗ૷ஔ
    *.&
    ΞϓϦ
    5FYU7JFX
    04
    ςΩετදࣔ
    Ωʔίʔυ
    ςΩετ

    View Slide

  128. εϚϗͷ5FYU7JFX
    !128
    ਓؒ
    ೖग़ྗ૷ஔ
    *.&
    ΞϓϦ
    5FYU7JFX
    04
    ςΩετදࣔ
    ςΩετ

    View Slide

  129. 5FYU7JFXͱ*.&ͷؔ܎
    !129
    ਓؒ
    ೖྗ૷ஔ
    ग़ྗ૷ஔ
    *.&
    ΞϓϦ
    5FYU7JFX
    04
    ςΩετදࣔ
    Ωʔίʔυ
    ςΩετ

    View Slide

  130. 5FYU7JFXͱ*.&ͷؔ܎
    w Ͳ͏΍ͬͯ*.&ͱ7JFX͕৘ใΛ΍ΓऔΓ͢Δͷʁ
    w 4%,ʁ
    w ௨৴ϓϩτίϧʁ
    !130

    View Slide

  131. 5FYU7JFXͱ*.&ͷؔ܎
    !131
    ਓؒ
    ೖྗ૷ஔ
    ग़ྗ૷ஔ
    *.&
    ΞϓϦ
    04ͷ༻ҙͨ͠
    *.&"1*
    5FYU7JFX
    04
    ςΩετදࣔ

    View Slide

  132. *.&"1*ͱ͸
    w 04͕5FYU7JFXΛ࣮૷͢ΔͨΊʹ༻ҙ͢Δ7JFXͱ*.&ͷ
    ΠϯλʔϑΣʔε
    w ۩ମతͳ࣮૷Λ஌Δ͜ͱͳ͘7JFX͕*.&Λར༻Ͱ͖Δ
    w *.&͸4%,ͳͲΛ༻ҙͤͣʹ7JFXʹػೳΛఏڙͰ͖Δ
    !132

    View Slide

  133. *.&"1*ͷҰཡ
    !133
    04
    *.&"1*ͷ໊শ

    7JFXଆ

    ίϝϯτ
    8JOEPXT *5FYU4UPSF"$1 ೉ղ͚ͩͲߴػೳ
    NBD04 /45FYU*OQVU$MJFOU BUUSJCVUFE4USJOH
    ͕ͭΒ͍
    (5, (UL*.$POUFYU ΍͚ʹυΩϡϝϯτ͕গͳ͍
    J04 6*5FYU*OQVU J04Ͱ৭ʑվળ͞ΕΔ
    "OESPJE #BTF*OQVU$POOFDUJPO ᴈ໌ظͷҋ͕֞ؒݟ͑Δ
    681 8JOEPXT6*5FYU$PSF ॎॻ͖͕͋Ε͹ʜʜ

    View Slide

  134. *.&"1*ͷ֓؍
    w *.&"1*͕7JFXʹཁٻ͢Δͷ͸
    w ςΩετͷऔಘͱมߋ
    w બ୒ൣғͷऔಘͱมߋ
    w 7JFX্ͰͷจࣈͷҐஔ৘ใ
    w ະ֬ఆจࣈྻͷ؅ཧʢྫɿεΫγϣͷʮม׵ʯ͕ະ֬
    ఆจࣈྻʣ
    w 7JFXʹΑΔςΩετɾબ୒ൣғɾϨΠΞ΢τมߋͷ௨

    !134

    View Slide

  135. จࣈΛೖྗ͢Δ
    w ਓ͕ؒΩʔϘʔυ͔ΒจࣈΛೖྗ͢Δࡍͷϧʔϓ
    ਓ͕ؒΩʔϘʔυΛୟ͘
    *.&͕ΩʔίʔυΛड͚औΔ
    *.&͕ΞϓϦʹςΩετPSະ֬ఆจࣈྻΛ౉͢
    ΞϓϦ͕*.&͔ΒจࣈྻΛड͚औΔ
    ΞϓϦ΍*.&͕ݱࡏͷঢ়ଶΛσΟεϓϨΠʹදࣔ͢Δ
    ਓ͕ؒσΟεϓϨΠΛݟΔ
    !135

    View Slide

  136. *.&"1*ͱॎॻ͖
    !136
    04
    *.&"1*ͷ໊শ

    7JFXଆ

    ॎॻ͖ରԠ

    ʢॎॻ͖Ͱ͋ΔࣄΛ఻͑Δํ๏ʣ
    8JOEPXT *5FYU4UPSF"$1 ͋Γ
    NBD04 /45FYU*OQVU$MJFOU ͋Γ
    (5, (UL*.$POUFYU
    ͋Γ(ULҎ߱

    ʢͨͩ͠ରԠ*.&͕ͳ͍ؾ͕͢Δʣ
    "OESPJE #BTF*OQVU$POOFDUJPO
    ෆՄೳͰ͸ͳ͍͸ͣ

    ʢ$VSTPS"ODIPS*OGPͷTFU.BUSJYʣ
    681 8JOEPXT6*5FYU$PSF ͳ͠
    J04 6*5FYU*OQVU ͳ͍ͷͱಉ͡

    View Slide



  137. ͖


    ͷ
    ׬

    w
    *.&"1*
    Λ
    7JFX
    ʹ


    ͢
    Ε
    ͹

    04


    ͷ
    ς
    Ω
    ε
    τ
    Τ
    σ

    λ
    Ҏ
    ֎
    Ͱ
    ΋




    ͕
    Ͱ
    ͖
    Δ
    !137

    View Slide

  138. Ξ΢τϥΠϯ
    ൃදλΠτϧʹ͍ͭͯ
    ςΩετΤσΟλºॎॻ͖
    ςΩετΤσΟλΛ࡞Δ
    ςΩετΛදࣔ͢Δ
    ςΩετΛฤू͢Δ
    σεΫτοϓͱϞόΠϧ
    ·ͱΊ
    !138

    View Slide

  139. σεΫτοϓͱϞόΠϧ

    View Slide

  140. σεΫτοϓͱϞόΠϧ
    w ΞϓϦͷ6*͸ɺσεΫτοϓͷ࣌୅͔Βେ͖͘มΘͬͨ
    w σΟεϓϨΠͱΩʔϘʔυɾϚ΢ε͸཭Ε͍ͯͨ
    w දࣔͱૢ࡞͕ಠཱ͍ͯ͠Δ
    w ϞόΠϧͰ͸දࣔ΋ૢ࡞΋খ͍͞σΟεϓϨΠ͚ͩ
    w දࣔͱૢ࡞͕ಉډ͍ͯ͠Δ
    !140

    View Slide

  141. σεΫτοϓͱϞόΠϧ
    w ςΩετΤσΟλͷ6*΋େ͖͘มΘͬͨ
    w ςΩετͷೖྗ
    w ςΩετͷબ୒
    !141

    View Slide

  142. σεΫτοϓͱϞόΠϧ
    w σεΫτοϓͷςΩετΤσΟλͷ6*
    w ௕೥ͷ஝ੵͰ΄΅ڞ௨ͷܗ
    w ϞόΠϧͷςΩετΤσΟλͷ6*
    w ຖ೥ͷ04Ξοϓσʔτͱͱ΋ʹਐԽத
    w Ϣʔβʔ͸࢖͍ͬͯΔ04ݻ༗ͷςΩετೖྗମݧʹ׳
    Ε͍ͯΔͷͰɺॎॻ͖ΤσΟλ΋ͦΕʹै͏Α͏ͳ6*Λ
    ఏڙ͢Δඞཁ͕͋Δ
    !142

    View Slide

  143. σεΫτοϓͱϞόΠϧ
    w جຊతͳจࣈྻબ୒ͷ6*ʢΩʔϘʔυҎ֎͔Βͷૢ࡞ʣ
    w ςΩετૠೖҐஔͷมߋ
    w ςΩετͷฤूϝχϡʔͷදࣔ
    w ςΩετͷબ୒
    w ςΩετબ୒ൣғͷमਖ਼
    !143

    View Slide

  144. σεΫτοϓͱϞόΠϧ
    w ςΩετૠೖҐஔͷมߋ
    !144
    ૢ࡞ ίϝϯτ
    σεΫτοϓ w ࠨΫϦοΫ ϐΫηϧ୯Ґͷૢ࡞ਫ਼౓
    J04
    w λοϓ
    w ϩϯάλοϓʴҠಈ
    ิਖ਼खஈͱͯ͠ͷϩϯά
    λοϓ
    "OESPJE
    w λοϓ
    w ΩϟϨοτͷυϥοά
    ิਖ਼खஈͱͯ͠ͷυϥο
    ά

    View Slide

  145. σεΫτοϓͱϞόΠϧ
    w ςΩετૠೖҐஔͷมߋ
    !145
    ૢ࡞ ίϝϯτ
    σεΫτοϓ w ࠨΫϦοΫ ϐΫηϧ୯Ґͷૢ࡞ਫ਼౓
    J04
    w λοϓ
    w ϩϯάλοϓʴҠಈ
    ิਖ਼खஈͱͯ͠ͷϩϯά
    λοϓ
    "OESPJE
    w λοϓ
    w ΩϟϨοτͷυϥοά
    ิਖ਼खஈͱͯ͠ͷυϥο
    ά

    View Slide

  146. σεΫτοϓͱϞόΠϧ
    w ςΩετͷฤूϝχϡʔͷදࣔ
    !146
    ૢ࡞ ίϝϯτ
    σεΫτοϓ w ӈΫϦοΫ Ϣʔβʔ͕໌ࣔతʹ։͘
    J04
    w จࣈྻબ୒࣌ʢૢ࡞தҎ֎ʣ
    w ϩϯάλοϓͰૠೖҐஔΛมߋޙ
    w ૠೖҐஔΛλοϓ
    Ϣʔβʔૢ࡞͔ΒࣗಈͰ
    දࣔ͞ΕΔ͜ͱ͕͋Δ
    "OESPJE
    w จࣈྻબ୒࣌ʢૢ࡞தҎ֎ʣ
    w ΩϟϨοτͷϋϯυϧΛλοϓ
    Ϣʔβʔૢ࡞͔ΒࣗಈͰ
    දࣔ͞ΕΔ͜ͱ͕͋Δ

    View Slide

  147. σεΫτοϓͱϞόΠϧ
    w ςΩετͷฤूϝχϡʔͷදࣔ
    !147
    ૢ࡞ ίϝϯτ
    σεΫτοϓ w ӈΫϦοΫ Ϣʔβʔ͕໌ࣔతʹ։͘
    J04
    w จࣈྻબ୒࣌ʢૢ࡞தҎ֎ʣ
    w ϩϯάλοϓͰૠೖҐஔΛมߋޙ
    w ૠೖҐஔΛλοϓ
    Ϣʔβʔૢ࡞͔ΒࣗಈͰ
    දࣔ͞ΕΔ͜ͱ͕͋Δ
    "OESPJE
    w จࣈྻબ୒࣌ʢૢ࡞தҎ֎ʣ
    w ΩϟϨοτͷϋϯυϧΛλοϓ
    Ϣʔβʔૢ࡞͔ΒࣗಈͰ
    දࣔ͞ΕΔ͜ͱ͕͋Δ

    View Slide

  148. σεΫτοϓͱϞόΠϧ
    w ςΩετͷબ୒Ϟʔυ։࢝
    !148
    ૢ࡞ ίϝϯτ
    σεΫτοϓ w ΫϦοΫԡԼ Ϛ΢εΛҠಈͰൣғมߋ
    J04
    w ϩϯάλοϓ͔Β%λον
    w %λον͔ΒԣεϫΠϓ
    ࢦΛҠಈͰൣғมߋ
    "OESPJE
    w ϩϯάλοϓ
    w ԣʹ௕͘εϫΠϓ
    ࢦΛҠಈͰൣғมߋ

    View Slide

  149. σεΫτοϓͱϞόΠϧ
    w ςΩετͷબ୒Ϟʔυ։࢝
    !149
    ૢ࡞ ίϝϯτ
    σεΫτοϓ w ΫϦοΫԡԼ Ϛ΢εΛҠಈͰൣғมߋ
    J04
    w ϩϯάλοϓ͔Β%λον
    w %λον͔ΒԣεϫΠϓ
    ࢦΛҠಈͰൣғมߋ
    "OESPJE
    w ϩϯάλοϓ
    w ԣʹ௕͘εϫΠϓ
    ࢦΛҠಈͰൣғมߋ

    View Slide

  150. σεΫτοϓͱϞόΠϧ
    w ςΩετͷબ୒Ϟʔυऴྃ
    !150
    ૢ࡞ ίϝϯτ
    σεΫτοϓ w ΫϦοΫΛ཭͢
    J04 w ࢦΛ཭͢
    "OESPJE w ࢦΛ཭͢

    View Slide

  151. σεΫτοϓͱϞόΠϧ
    w ςΩετͷબ୒Ϟʔυมߋ
    !151
    ૢ࡞ ίϝϯτ
    σεΫτοϓ
    w μϒϧλοϓԡԼ͔Β࢝ΊΔ
    w τϦϓϧλοϓԡԼ͔Β࢝ΊΔ
    w ճλοϓԡԼ͔Β࢝ΊΔ
    ͦΕͧΕ୯ޠɾจষɾஈ
    མ୯Ґͷબ୒Ϟʔυ
    ͍ͣΕ΋ͳ͍͜ͱ͕͋Δ
    J04
    w %λονͰ୯ޠ୯ମબ୒Ϟʔυ
    w μϒϧ%λονͰจষબ୒Ϟʔυ
    w τϦϓϧ%λονͰஈམબ୒Ϟʔυ
    ϩϯάλοϓதʹάοά
    ͬͱԡ͢ͱͰ͖Δ
    "OESPJE w ͳ͠

    View Slide

  152. σεΫτοϓͱϞόΠϧ
    w ςΩετͷબ୒Ϟʔυมߋ
    !152
    ૢ࡞ ίϝϯτ
    σεΫτοϓ
    w μϒϧλοϓԡԼ͔Β࢝ΊΔ
    w τϦϓϧλοϓԡԼ͔Β࢝ΊΔ
    w ճλοϓԡԼ͔Β࢝ΊΔ
    ͦΕͧΕ୯ޠɾจষɾஈ
    མ୯Ґͷબ୒Ϟʔυ
    ͍ͣΕ΋ͳ͍͜ͱ͕͋Δ
    J04
    w %λονͰ୯ޠ୯ମબ୒Ϟʔυ
    w μϒϧ%λονͰจষબ୒Ϟʔυ
    w τϦϓϧ%λονͰஈམબ୒Ϟʔυ
    ϩϯάλοϓதʹάοά
    ͬͱԡ͢ͱͰ͖Δ
    "OESPJE w ͳ͠

    View Slide

  153. σεΫτοϓͱϞόΠϧ
    w ςΩετͷબ୒
    !153
    ૢ࡞ ίϝϯτ
    σεΫτοϓ
    w μϒϧΫϦοΫ
    w τϦϓϧΫϦοΫ
    w ճΫϦοΫ
    ͦΕͧΕ୯ޠɾจষɾஈ
    མ୯Ґͷબ୒
    ͍ͣΕ΋ͳ͍͜ͱ͕͋Δ
    J04
    w μϒϧλοϓ
    w %λον
    "OESPJE w μϒϧλοϓ

    View Slide

  154. σεΫτοϓͱϞόΠϧ
    w ςΩετͷબ୒ൣғͷमਖ਼
    !154
    ૢ࡞ ίϝϯτ
    σεΫτοϓ w 4IJGUΩʔʴΫϦοΫ
    ։࢝Ґஔͷมߋ͸Ͱ͖ͳ
    ͍
    J04 w બ୒ൣғͷΧʔιϧΛυϥοά બ୒ൣғΛमਖ਼Ͱ͖Δ
    "OESPJE w બ୒ൣғͷΧʔιϧΛυϥοά બ୒ൣғΛमਖ਼Ͱ͖Δ

    View Slide

  155. σεΫτοϓͱϞόΠϧ
    w ςΩετͷબ୒ൣғͷमਖ਼
    !155
    ૢ࡞ ίϝϯτ
    σεΫτοϓ w 4IJGUΩʔʴΫϦοΫ
    ։࢝Ґஔͷมߋ͸Ͱ͖ͳ
    ͍
    J04 w બ୒ൣғͷΧʔιϧΛυϥοά બ୒ൣғΛमਖ਼Ͱ͖Δ
    "OESPJE w બ୒ൣғͷΧʔιϧΛυϥοά બ୒ൣғΛमਖ਼Ͱ͖Δ

    View Slide

  156. σεΫτοϓͱϞόΠϧ
    w جຊతͳจࣈྻબ୒ͷ6*ʢΩʔϘʔυҎ֎͔Βͷૢ࡞ʣ
    w ࢦͷૢ࡞ਫ਼౓͕௿͍ͷͰͦΕΛิ͏ૢ࡞͕ଟ͍
    w J04ͱ"OESPJEͰ΋͚ͬ͜͏ҧ͏
    !156

    View Slide

  157. ༨ஊJ04ͱςΩετ
    w TFU"UUSJCVUFE.BSLFE5FYUʹΑΔະ֬ఆจࣈྻͷ૷০
    w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJU
    VJUFYUJOQVUTFUBUUSJCVUFENBSLFEUFYU
    w ະ֬ఆจࣈྻͷαʔυύʔςΟΩʔϘʔυ΁ͷ։์
    w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJU
    VJUFYUEPDVNFOUQSPYZTFUNBSLFEUFYU
    w IUUQTXXXBQQMFDPNKQJPTJPTQSFWJFXGFBUVSFT
    w ຊࢦεϫΠϓͰͷऔΓফ͠ɾ΍Γ௚͠
    w ຊࢦͰͷίϐʔɾΧοτˍϖʔετ
    w ճλοϓճλοϓͰจষஈམͷબ୒
    !157

    View Slide

  158. σ
    ε
    Ϋ
    τ

    ϓ
    ͱ
    Ϟ
    ό
    Π
    ϧ
    w
    σ
    ε
    Ϋ
    τ

    ϓ

    w


    Ω
    ʔ
    Ϙ
    ʔ
    υ

    w
    Ϟ
    ό
    Π
    ϧ

    w
    ι
    ϑ
    τ
    ΢

    Ξ
    Ω
    ʔ
    Ϙ
    ʔ
    υ
    ɾ
    Ի




    w


    ͖
    Τ
    σ

    λ


    ͷ



    w
    ι
    ϑ
    τ
    Ω
    ʔ
    Ϙ
    ʔ
    υ
    WT
    Ϧ
    ϑ
    ϩ
    ʔ
    !158

    View Slide

  159. "OESPJE࣮૷
    w "OESPJEͷ࣮૷
    w BOESPJEXJEHFU5FYU7JFXͷΑ͏ͳΧελϜ7JFX
    w ςΩετϏϡʔΞΛ࣮૷
    w ςΩετબ୒ͷ6*Λ࣮૷
    w 7JFXͰPO$SFBUF*OQVU$POOFDUJPOΛ࣮૷
    w Ωʔϫʔυɿ#BTF*OQVU$POOFDUJPO
    !159

    View Slide

  160. "OESPJE࣮૷ʹ͍ͭͯৄ͘͠
    w %SPJE,BJHJʮθϩ͔Β࣮૷͢Δॎॻ͖5FYU7JFXͱ
    ͦͷपลٕज़ʯ
    w IUUQTTQFBLFSEFDLDPNDDWFSUJDBM
    UFYUWJFXGSPNTDSBUDIBOESFMBUFEUFDIOPMPHJFT
    !160

    View Slide

  161. J04࣮૷
    w J04ͷ࣮૷
    w 6*5FYU7JFXͷΑ͏ͳΧελϜ7JFX
    w ςΩετϏϡʔΞΛ࣮૷
    w ςΩετબ୒ͷ6*Λ࣮૷
    w 6*7JFXͰ6*5FYU*OQVUΛ࣮૷
    !161

    View Slide

  162. J04࣮૷ʹ͍ͭͯৄ͘͠
    w J04%$ʮ6*7JFXͱ6*5FYU*OQVUͰ࡞Δॎॻ͖ͷ
    5FYU7JFXʯ
    w IUUQTTQFBLFSEFDLDPNDDWFSUJDBM
    UFYUWJFXCBTFEPOVJWJFXXJUIVJUFYUJOQVU
    !162

    View Slide

  163. ·ͱΊ

    View Slide

  164. ·ͱΊ
    w ॎॻ͖ΤσΟλͷ࡞Γํ
    w QMBUGPSNJOEFQFOEFOUͳ࿩
    w จࣈίʔυ
    w ϑΥϯτඳը
    w QMBUGPSNTQFDJpDͳ࿩
    w *.&ͱͷΠϯλϑΣʔεʹ͍ͭͯ
    w ୺຤಺ͷϑΥϯτಡΈࠐΈํ๏
    w ਐԽ͢ΔϞόΠϧͷςΩετΤσΟλͷ6*
    !164

    View Slide

  165. ͓·͚

    View Slide

  166. 8ʹ͍ͭͯิ଍
    w 8ϒϥ΢βͰॎॻ͖ฤू͢Δ৔߹
    w XSJUJOHNPEFWFSUJDBMSMWFSUJDBMMS
    w DPOUFOUFEJUBCMFUSVF
    !166
    ϒϥ΢β දࣔ/ฤू
    Firefox Մೳ
    Enge Մೳ
    Safari Մೳ
    Google Chrome
    ෆՄೳͰ͸ͳ͍
    ʢ্Լࠨӈʹਖ਼͘͠ಈ͚ͳ͍ʣ

    View Slide

  167. ࠓޙ
    w 8Ϋϥ΢υػೳ
    w σεΫτοϓ൛ͷ࠶࣮૷
    w 6*͕΍͹͍
    w (16ʹΑΔϨϯμϦϯά
    w .VMUJDIBOOFM4%'
    w 47(ΧϥʔֆจࣈରԠ
    !167

    View Slide