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. झຯ w ςΩετΤσΟλ։ൃ w 5"5&EJUPSͱ͍͏ॎॻ͖ΤσΟλΛݸਓ։ൃ w J04"OESPJE൛͸ετΞͰެ։த w NBD048JOEPXT6CVOUV൛͸αΠτͰެ։த w

    681൛͸࡞੒தʢ·ͩϓϩτλΠϓͷΈʣ w IUUQTXXXDDOFU w ։ൃɺӡӦɺαϙʔτɺσβΠϯΛશ෦΍ͬͯΔ !6
  2. Ξ΢τϥΠϯ  ൃදλΠτϧʹ͍ͭͯ  ॎॻ͖ΤσΟλΛ࡞Δ  σεΫτοϓͱϞόΠϧ  ·ͱΊ !11

    JPTEDF࣭໰Ͱ ࣭໰πΠʔτͯ͠΋Β͑Δͱ ޙͰҾ༻πΠʔτͰճ౴͠·͢
  3. ॎ ॻ ͖ Τ σ ỹ λ w ॎ ॻ

    ͖ ͕ Ͱ ͖ Δ ς Ω ε τ Τ σ ỹ λ !15
  4. ॎॻ͖ w ॎ ॻ ͖ ͷ ༻ ్  w

    খ આ  w ٭ ຊ ỏ γ φ Ϧ Φ  w ৽ ฉ ỏ ࡶ ࢽ ͷ ه ࣄ  w ޿ ࠂ !16
  5. ॎॻ͖ w ॎ ॻ ͖ Τ σ ỹ λ ͷ

    ༻ ్  w ࠷ ऴ త ʹ Ξ ΢ τ ϓ ỽ τ ͞ Ε Δ ঢ় ଶ ʹ ۙ ͍ ݟ ͨ ໨ Ͱ จ ষ Λ ॻ ͖ ͨ ͍ ͱ ͍ ͏ ध ཁ !17
  6. ίϯϐϡʔλͱॎॻ͖ w ςΩετΛॎॻ͖Ͱදࣔ͢ΔϑΝΠϧܗࣜ w 1%' w $.BQ8.PEFͳϑΥϯτΛ࢖͏ w 47( w

    XSJUJOHNPEFUCUCSM w )5.-$44 w XSJUJOHNPEFWFSUJBMSMWFSUJDBMMS !18
  7. ςΩετͱॎॻ͖ w ॎॻ͖ͷςΩετͱ͍͏΋ͷ͸ͳ͍ w σʔλ্ͷςΩετͷਐߦํ޲͸ͻͱͭ w ഑ྻͷJOEFY͕૿͑Δํ޲͚ͩ w ͋c͍c͏c͑c͓caOc͋ w

    ҰํͰը૾͸࣍ݩ৘ใ w σΟεϓϨΠ্ʹςΩετͷਐߦํ޲͸ແ਺ʹ͋Δ w ͦͷҰ͕ͭॎॻ͖ !19
  8. ॻࣈํ޲ w ςΩετΛදࣔ͢Δࡍʹ͸ॻࣈํ޲ͱ͍͏΋ͷ͕͋Δ w ԣॻ͖ w ࠨ͔Βӈʢࠨԣॻ͖ʣ w )FMMP XPSME

    w ӈ͔Βࠨʢӈԣॻ͖ʣ w ملاعلابابحرم !20 w ॎ ॻ ͖  w ্ ͔ Β Լ  w ͜ Μ ʹ ͪ ͸ ỏ ੈ ք ʂ
  9. վ ߦ ํ ޲ w վ ߦ ํ ޲ ͸

    ॻ ࣈ ํ ޲ ͱ ௚ ަ ͢ Δ ํ ޲  w ԣ ॻ ͖ ớ ্ ͔ Β Լ Ờ  w ӈ ॎ ॻ ͖ ớ ӈ ͔ Β ࠨ ỏ $44 ͷ WFSUJDBMSM Ờ  w ೔ ຊ ޠ  w ࠨ ॎ ॻ ͖ ớ ࠨ ͔ Β ӈ ỏ $44 ͷ WFSUJDBMMS Ờ  w Ϟ ϯ ΰ ϧ ޠ ớ Ϟ ϯ ΰ ϧ จ ࣈ Λ ࢖ ỳ ͨ ৔ ߹ Ờ  w ࠓ ͸ Ω Ϧ ϧ จ ࣈ ͕ Ұ ൠ ʹ ࢖ Θ Ε ͯ ͍ Δ !21 ը૾/PEFVF$$#:4"
  10. ͦͷଞͷॻࣈํ޲ w ڇߞࣜʢ#PVTUSPQIFEPOʣ w ॻࣈํ޲͕ӈ͔Βࠨɺࠨ͔ΒӈͱަޓʹมΘΔ w ݹ୅ΪϦγϟޠ w ཐટܗ w

    ϑΝΠετεԁ൫ʢະղಡจࣈʣ w 6OJDPEFʹ΋ऩ࿥͞Ε͍ͯΔ w 6 %d6 '% !22 ࣸਅ)FMJY$$#:4" ը૾3BOWFJH$$#:4"
  11. ϓϥοτϑΥʔϜ w σεΫτοϓɿ(6*πʔϧΩοτ͸ϥΠϒϥϦʢXY8JEHFUTʣ w NBD04 w 8JOEPXT w 6CVOUV (5,

     w ϞόΠϧɿ(6*πʔϧΩοτ͸ωΠςΟϒͦͷ·· w J04 w "OESPJE w 681 !25
  12. σεΫτοϓ !26 OS ݴޠ ։ൃ؀ڥ Windows C++ Visual Studio macOS

    C++ / Objective-C Xcode Ubuntu (GTK+) C++ Eclipse → Makefile
  13. ϞόΠϧ !27 OS ݴޠ ։ൃ؀ڥ iOS Swift / Objective-C /

    C++ Xcode Android Kotlin / Java / C++ Android Studio UWP C# / C++ Visual Studio
  14. σεΫτοϓ։ൃ !33 OS ݴޠ ։ൃ؀ڥ Windows C++ Visual Studio macOS

    C++ / Objective-C Xcode Ubuntu (GTK+) C++ Eclipse → Makefile
  15. ϞόΠϧ։ൃ !36 OS ݴޠ ։ൃ؀ڥ iOS Swift / Objective-C /

    C++ Xcode Android Kotlin / Java / C++ Android Studio UWP C# / C++ Visual Studio
  16. ϞόΠϧ։ൃ !39 5"5&EJUPSͷ શίʔυ
 $ XY8JEHFUT $ 4XJGU ,PUMJO $

    શίʔυ
 4XJGU શίʔυ
 ,PUMJO શίʔυ
 $ NBD048JOEPXT6CVOUV J04 "OESPJE 681
  17. શίʔυ
 4XJGU શίʔυ
 ,PUMJO શίʔυ
 $ ϞόΠϧ։ൃ !40 5"5&EJUPSͷ શίʔυ


    $ XY8JEHFUT $ 4XJGU ,PUMJO $ NBD048JOEPXT6CVOUV J04 "OESPJE 681
  18. ϞόΠϧ։ൃ !42 (6*෦෼ $ XY8JEHFUT $ 4XJGU ,PUMJO $ NBD048JOEPXT6CVOUV

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

    681 $ ڞ௨ϥΠϒϥϦ ςΩετฤूςΩετඳը (6*෦෼ $ (6*෦෼ (6*෦෼ (6*෦෼
  20. XY8JEHFUT $ 4XJGU ,PUMJO $ NBD048JOEPXT6CVOUV J04 "OESPJE 681 (6*෦෼

    $ (6*෦෼ (6*෦෼ (6*෦෼ ࠓճͷൃද಺༰ !46 $ ڞ௨ϥΠϒϥϦ ςΩετฤूςΩετඳը ʢϓϥοτϑΥʔϜʹΑΒͣʣ ςΩετΛॎॻ͖Ͱදࣔ͢Δ࿩
  21. XY8JEHFUT $ 4XJGU ,PUMJO $ NBD048JOEPXT6CVOUV J04 "OESPJE 681 (6*෦෼

    $ (6*෦෼ (6*෦෼ (6*෦෼ ࠓճͷൃද಺༰ !47 $ ڞ௨ϥΠϒϥϦ ςΩετฤूςΩετඳը ֤ϓϥοτϑΥʔϜͰ ςΩετΛฤू͢Δ࿩
  22. XY8JEHFUT $ 4XJGU ,PUMJO $ NBD048JOEPXT6CVOUV J04 "OESPJE 681 (6*෦෼

    $ (6*෦෼ (6*෦෼ (6*෦෼ ࠓճͷൃද಺༰ !48 $ ڞ௨ϥΠϒϥϦ ςΩετฤूςΩετඳը σεΫτοϓͱϞόΠϧͰͷ ςΩετΤσΟλͷ6*ͷҧ͍ͷ࿩
  23. Ξ΢τϥΠϯ  ൃදλΠτϧʹ͍ͭͯ  ॎॻ͖ΤσΟλΛ࡞Δ  ςΩετΤσΟλ  ςΩετΛදࣔ͢Δʢʴॎॻ͖ʣ 

    ςΩετΛฤू͢Δ  σεΫτοϓͱϞόΠϧ  ·ͱΊ !49 JPTEDF࣭໰Ͱ ࣭໰πΠʔτͯ͠΋Β͑Δͱ ޙͰҾ༻πΠʔτͰճ౴͠·͢
  24. ॎॻ͖ΤσΟλ w ςΩετΤσΟλ 6*5FYU7JFXͷΑ͏ͳίϯϙʔωϯτ  w Ͳͷ04Ͱ΋ඪ४తʹ༻ҙ͞Ε͍ͯΔ !53 OS ඪ४࣮૷

    iOS UITextView Android android.widget.TextView UWP TextBox Windows MSFTEDIT_CLASS / Text box macOS NSTextView GTK+ GtkTextView
  25. ςΩετͷදࣔ w $PSF5FYU͸ඇৗʹྑ͍ϑϨʔϜϫʔΫͳͷͰ͕͢ʜʜ w 5"5&EJUPSͰ͸ҎԼͷཧ༝͔ΒςΩετͷදࣔΛಠ࣮ࣗ૷ w શͯͷϓϥοτϑΥʔϜͰಉ͡ඳը݁Ռ͕ཉ͍͠ w 1%'Λ8:4*8:(Ͱग़ྗ͍ͨ͠ w

    ϓϥοτϑΥʔϜͷจࣈඳը͸࣌ʑյΕΔ w ॎॻ͖Λશ͘αϙʔτ͠ͳ͍04΋͋Δʢ"OESPJEʣ w ࣮૷։࢝࣌ظ͕೥લ w झຯ͔ͩΒ !67
  26. 6OJDPEF w จࣈྻΛόΠτྻʹͯ͠ѻ͏ͨΊͷن֨ w 6OJDPEF͸ූ߸Խจࣈू߹ͷͻͱͭ w 6 d6 ''''ͷූ߸ΛจࣈʹରԠ͚ͮͨ΋ͷ w

    6 ͷޙΖ͸ਐ਺දه w 65'65'65'͸จࣈූ߸Խܗࣜ w 6 d6 ''''ͷCJUͷ৘ใΛͲͷΑ͏ʹό ΠτྻͰදݱ͢Δ͔ΛఆΊͨ΋ͷ !79
  27. άϦϑ w ϑΥϯτ಺ͷจࣈͷ࠷খ୯ҐΛάϦϑͱ͍͏ w ऩ࿥͞Ε͍ͯΔ֤จࣈʢܗঢ়ʣͷ͜ͱ w ӈͷਤΈ͍ͨͳΠϝʔδ w جຊతʹϕΫλʔը૾ w

    දࣔʹ͸ϥελϥΠζ͕ඞཁ !83 http://fontforge.github.io/en-US/documentation/interface/charview/
  28. 0QFO5ZQFϑΥϯτ w ϑΝΠϧߏ଄ʢৄ͘͠͸0QFO5ZQFͷ࢓༷ΛݟΔͱྑ͍ʣ w ϔομʔͱσʔλͰߏ੒͞ΕΔόΠφϦ w ϔομʔɿͲ͜ʹͲ͏͍͏ςʔϒϧ͕͋Δ͔ॻ͔Ε͍ͯΔ w ςʔϒϧɿ࢓༷Ͱఆٛ͞ΕͨσʔλʢҎԼ͸୅දతͳ΋ͷʣ w

    HMZG5SVF5ZQFͷάϦϑ৘ใ w $''㾐1PTU4DSJQUͷάϦϑ৘ใ w $''7BSJBCMF'POUͰ࢖ΘΕΔάϦϑ৘ใ w ͜ΕΛਖ਼͘͠ղऍ͢ΔͱจࣈΛදࣔͰ͖Δ !84
  29. 04ͱϑΥϯτ !87 OS ϑΥϯτͷऔಘ औಘͰ͖Δ΋ͷ iOS CGFontCopyTableForTag όΠφϦʢஅยʣ Android /system/etc/fonts.xml

    ϑΝΠϧύε UWP IDWriteLocalFontFileLoader ϑΝΠϧύε Windows IDWriteLocalFontFileLoader / GetFontData ϑΝΠϧύε / 
 όΠφϦ macOS CGFontCopyTableForTag όΠφϦʢஅยʣ GTK+ fontconfig ϑΝΠϧύε
  30. ςΩετͷදࣔ !89 ςΩετ ʢόΠτྻʣ ը ૾ ί ʔ υ ϙ

    Π ϯ τ ྻ ά Ϧ ϑ ྻ ϥ ε λ ϥ Π ζ 6OJDPEF ը ૾ ྻ
  31. ςΩετͷදࣔ !90 ςΩετ ʢόΠτྻʣ ը ૾ ί ʔ υ ϙ

    Π ϯ τ ྻ ά Ϧ ϑ ྻ ϥ ε λ ϥ Π ζ 6OJDPEF ը ૾ ྻ ʁ
  32. ςΩετͷදࣔ !93 ςΩετ ʢόΠτྻʣ ը ૾ ί ʔ υ ϙ

    Π ϯ τ ྻ ά Ϧ ϑ ử ϕ Ϋ λ ʔ ը ૾ ྻ ϥ ε λ ϥ Π ζ 6OJDPEF ը ૾ ྻ ϑ Ỽ ϯ τ ͷ DNBQ ʁ
  33. ςΩετͷදࣔ !95 ςΩετ ʢόΠτྻʣ ը ૾ ί ʔ υ ϙ

    Π ϯ τ ྻ ά Ϧ ϑ ྻ 6OJDPEF ը ૾ ྻ ϑ Ỽ ϯ τ ͷ DNBQ 'SFF5ZQF ͱ ͔ ഑ ஔ ʁ
  34. վߦจࣈ 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
  35. ςΩετͷදࣔʴॎॻ͖ w ԣॻ͖͔Βॎॻ͖ʹม͑Δ w จࣈΛਫฏํ޲Ͱ͸ͳ͘ɺਨ௚ํ޲ʹਐΊΔ w ߦΛਨ௚ํ޲Ͱ͸ͳ͘ɺਫฏํ޲ʹਐΊΔ w ϑΥϯτͷॎॻ͖༻ͷάϦϑΛ࢖༻͢Δ w

    ʮɻʯʮɺʯʮΐʯʮ₃ʯʮʢʯʮʣʯʮʔʯ w ΞϧϑΝϕοτ౳ͷจࣈΛ౓ճసͤ͞Δ w ൒֯ͩͱճస͢Δɺશ֯ͩͱճస͠ͳ͍ !108
  36. 6"96OJDPEF7FSUJDBM 5FYU-BZPVU w ͭʹ෼ྨͯ͠ఆٛ͞Ε͍ͯΔʢ656S5Sʣ w ೥ʹυϥϑτͷ࢓༷͕ࡦఆ͞Εͨ !109 ෼ྨ ಺༰ ର৅ίʔυϙΠϯτ

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

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

    U (Upright) ਖ਼ཱʢͦͷ··ʣͰදࣔ ׽ࣈ౳ R (Rotated) ࣌ܭճΓʹճసͯ͠දࣔ Alphabet etc... Tu (Transformed, upright) U͕ͩઐ༻άϦϑ͕ඞཁ ɺɻΐ₃ Tr (Transformed, rotated) R͕ͩઐ༻άϦϑ͕ඞཁ ʢʣʔ ͋ ʔ ൃදࢿྉΛ࡞͍ͬͯͯݟ͚ͭ ͯ͠·ͬͨͷͰ͕͢ɺ"QQMFͷ จࣈྻඳըܥͷόάͰ͢Ͷ ʢNBD04J04Ͱ֬ೝʣ ͋ʔ
  39. !112 w ରԠ͢Δ0QFO5ZQFͷ࢓༷ w (46# (MZQI4VCTUJUVUJPO  w άϦϑΛผͷάϦϑʹஔ׵͢Δػೳ w

    ॎॻ͖ͷ৔߹͸άϦϑ↦άϦϑ w WFSUWSUWSUSͱ͔ͷλάͷ΋ͷ w ଞͷ༻్ͩͱ/άϦϑ↦.άϦϑͷ৔߹΋͋Δ 6"96OJDPEF7FSUJDBM 5FYU-BZPVU
  40. ΧϥʔֆจࣈͱϑΥϯτ w 0QFO5ZQFͷ࢓༷ w Χϥʔֆจࣈͷ࢓༷͸େ͖͘छྨ !116 ܗࣜ ओͳϓϥοτϑΥʔϜ த਎ͷܗࣜ $#%5$#-$

    "OESPJE-JOVY 1/(ը૾ $0-3$1"- 8JOEPXT ී௨ͷάϦϑͱ৭৘ใ 47(㾐 $1"- "EPCF.P[JMMB 47(ը૾ʢͱ৭৘ใʣ TCJY "QQMF NBD041/(ը૾ J04FNKDը૾ʢಠࣗܗࣜʣ
  41. 6546OJDPEF&NPKJ w 6OJDPEFͷΧϥʔֆจࣈͷ࢓༷ w Χϥʔֆจࣈͷ෼ྨ w ࠃض w ғΈ਺ࣈ w

    ݁߹จࣈ ;8+  w 1SFTFOUBUJPO4FMFDUPS w &NPKJ.PEJpFS w 5BH4FRVFODF !117
  42. ςΩετͷදࣔͱΧϥʔֆจࣈ w ࢓༷͕ͨ͘͞Μ͋ͬͯେม w Χϥʔֆจࣈʹؔ͢Δ੹຿͕ࢄΒ͹͍ͬͯΔͷͰେม w 6OJDPEFͷྖҬ w ԿΛͲ͏දࣔ͢΂͖͔ͱ͍͏࢓༷ w

    ϑΥϯτͷྖҬ w දࣔ͢Δ͜ͱͷͰ͖Δจࣈͷఏڙ w จࣈྻඳըܥͷྖҬ w ΧϥʔֆจࣈΛ࢖͏͔നࠇจࣈΛ࢖͏͔ͷ൑அ !118
  43. ς Ω ε τ ͷ ද ࣔ 
 ɹ ɹ

    ɹ ɹ ʴ Χ ϥ ʔ ֆ จ ࣈ w ς Ω ε τ ͕ ॎ ॻ ͖ Ͱ ද ࣔ Ͱ ͖ · ͠ ͨ !119
  44. ςΩετͷදࣔʴͦͷଞ w ࠓճѻΘͳ͔ͬͨ΋ͷ w ίʔυϙΠϯτ㱠άϦϑ w *74ʢҟମࣈηϨΫλʣ w (46# w

    ೔ຊޠҎ֎ͷςΩετͷॲཧ w CJEJʢ૒ํ޲ςΩετɾΞϥϏΞޠʣ w (104 w ౳ʑ !120
  45. *.&"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 ॎॻ͖͕͋Ε͹ʜʜ
  46. *.&"1*ͷ֓؍ w *.&"1*͕7JFXʹཁٻ͢Δͷ͸ w ςΩετͷऔಘͱมߋ w બ୒ൣғͷऔಘͱมߋ w 7JFX্ͰͷจࣈͷҐஔ৘ใ w

    ະ֬ఆจࣈྻͷ؅ཧʢྫɿεΫγϣͷʮม׵ʯ͕ະ֬ ఆจࣈྻʣ w 7JFXʹΑΔςΩετɾબ୒ൣғɾϨΠΞ΢τมߋͷ௨ ஌ !134
  47. จࣈΛೖྗ͢Δ w ਓ͕ؒΩʔϘʔυ͔ΒจࣈΛೖྗ͢Δࡍͷϧʔϓ  ਓ͕ؒΩʔϘʔυΛୟ͘  *.&͕ΩʔίʔυΛड͚औΔ  *.&͕ΞϓϦʹςΩετPSະ֬ఆจࣈྻΛ౉͢ 

    ΞϓϦ͕*.&͔ΒจࣈྻΛड͚औΔ  ΞϓϦ΍*.&͕ݱࡏͷঢ়ଶΛσΟεϓϨΠʹදࣔ͢Δ  ਓ͕ؒσΟεϓϨΠΛݟΔ !135
  48. *.&"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 ͳ͍ͷͱಉ͡
  49. ॎ ॻ ͖ ೖ ྗ ͷ ׬ ੒ w *.&"1*

    Λ 7JFX ʹ ࣮ ૷ ͢ Ε ͹ ỏ 04 ඪ ४ ͷ ς Ω ε τ Τ σ ỹ λ Ҏ ֎ Ͱ ΋ จ ࣈ ೖ ྗ ͕ Ͱ ͖ Δ !137
  50. σεΫτοϓͱϞόΠϧ w σεΫτοϓͷςΩετΤσΟλͷ6* w ௕೥ͷ஝ੵͰ΄΅ڞ௨ͷܗ w ϞόΠϧͷςΩετΤσΟλͷ6* w ຖ೥ͷ04Ξοϓσʔτͱͱ΋ʹਐԽத w

    Ϣʔβʔ͸࢖͍ͬͯΔ04ݻ༗ͷςΩετೖྗମݧʹ׳ Ε͍ͯΔͷͰɺॎॻ͖ΤσΟλ΋ͦΕʹै͏Α͏ͳ6*Λ ఏڙ͢Δඞཁ͕͋Δ !142
  51. σεΫτοϓͱϞόΠϧ w ςΩετૠೖҐஔͷมߋ !144 ૢ࡞ ίϝϯτ σεΫτοϓ w ࠨΫϦοΫ ϐΫηϧ୯Ґͷૢ࡞ਫ਼౓

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

    J04 w λοϓ w ϩϯάλοϓʴҠಈ ิਖ਼खஈͱͯ͠ͷϩϯά λοϓ "OESPJE w λοϓ w ΩϟϨοτͷυϥοά ิਖ਼खஈͱͯ͠ͷυϥο ά
  53. σεΫτοϓͱϞόΠϧ w ςΩετͷฤूϝχϡʔͷදࣔ !146 ૢ࡞ ίϝϯτ σεΫτοϓ w ӈΫϦοΫ Ϣʔβʔ͕໌ࣔతʹ։͘

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

    J04 w จࣈྻબ୒࣌ʢૢ࡞தҎ֎ʣ w ϩϯάλοϓͰૠೖҐஔΛมߋޙ w ૠೖҐஔΛλοϓ Ϣʔβʔૢ࡞͔ΒࣗಈͰ දࣔ͞ΕΔ͜ͱ͕͋Δ "OESPJE w จࣈྻબ୒࣌ʢૢ࡞தҎ֎ʣ w ΩϟϨοτͷϋϯυϧΛλοϓ Ϣʔβʔૢ࡞͔ΒࣗಈͰ දࣔ͞ΕΔ͜ͱ͕͋Δ
  55. σεΫτοϓͱϞόΠϧ w ςΩετͷબ୒Ϟʔυ։࢝ !148 ૢ࡞ ίϝϯτ σεΫτοϓ w ΫϦοΫԡԼ Ϛ΢εΛҠಈͰൣғมߋ

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

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

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

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

    τϦϓϧΫϦοΫ w ճΫϦοΫ ͦΕͧΕ୯ޠɾจষɾஈ མ୯Ґͷબ୒ ͍ͣΕ΋ͳ͍͜ͱ͕͋Δ J04 w μϒϧλοϓ w %λον "OESPJE w μϒϧλοϓ
  60. σεΫτοϓͱϞόΠϧ w ςΩετͷબ୒ൣғͷमਖ਼ !154 ૢ࡞ ίϝϯτ σεΫτοϓ w 4IJGUΩʔʴΫϦοΫ ։࢝Ґஔͷมߋ͸Ͱ͖ͳ

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

    ͍ J04 w બ୒ൣғͷΧʔιϧΛυϥοά બ୒ൣғΛमਖ਼Ͱ͖Δ "OESPJE w બ୒ൣғͷΧʔιϧΛυϥοά બ୒ൣғΛमਖ਼Ͱ͖Δ
  62. ༨ஊJ04ͱςΩετ w TFU"UUSJCVUFE.BSLFE5FYUʹΑΔະ֬ఆจࣈྻͷ૷০ w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJU VJUFYUJOQVUTFUBUUSJCVUFENBSLFEUFYU w ະ֬ఆจࣈྻͷαʔυύʔςΟΩʔϘʔυ΁ͷ։์ w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJU

    VJUFYUEPDVNFOUQSPYZTFUNBSLFEUFYU w IUUQTXXXBQQMFDPNKQJPTJPTQSFWJFXGFBUVSFT w ຊࢦεϫΠϓͰͷऔΓফ͠ɾ΍Γ௚͠ w ຊࢦͰͷίϐʔɾΧοτˍϖʔετ w ճλοϓճλοϓͰจষஈམͷબ୒ !157
  63. σ ε Ϋ τ ỽ ϓ ͱ Ϟ ό Π

    ϧ w σ ε Ϋ τ ỽ ϓ  w ෺ ཧ Ω ʔ Ϙ ʔ υ  w Ϟ ό Π ϧ  w ι ϑ τ ΢ ỻ Ξ Ω ʔ Ϙ ʔ υ ɾ Ի ੠ ೖ ྗ  w ॎ ॻ ͖ Τ σ ỹ λ ಛ ༗ ͷ ໰ ୊  w ι ϑ τ Ω ʔ Ϙ ʔ υ WT Ϧ ϑ ϩ ʔ !158
  64. ·ͱΊ w ॎॻ͖ΤσΟλͷ࡞Γํ w QMBUGPSNJOEFQFOEFOUͳ࿩ w จࣈίʔυ w ϑΥϯτඳը w

    QMBUGPSNTQFDJpDͳ࿩ w *.&ͱͷΠϯλϑΣʔεʹ͍ͭͯ w ୺຤಺ͷϑΥϯτಡΈࠐΈํ๏ w ਐԽ͢ΔϞόΠϧͷςΩετΤσΟλͷ6* !164
  65. 8&#ʹ͍ͭͯิ଍ w 8&#ϒϥ΢βͰॎॻ͖ฤू͢Δ৔߹ w XSJUJOHNPEFWFSUJDBMSMWFSUJDBMMS w DPOUFOUFEJUBCMFUSVF !166 ϒϥ΢β දࣔ/ฤू

    Firefox Մೳ Enge Մೳ Safari Մೳ Google Chrome ෆՄೳͰ͸ͳ͍ ʢ্Լࠨӈʹਖ਼͘͠ಈ͚ͳ͍ʣ