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

Reactで学ぶ!いまどきのWeb開発

 Reactで学ぶ!いまどきのWeb開発

FRONTEND CONFERENCE 2017のハンズオン用資料です。
教科書はこちら https://github.com/fand/react-hands-on

fand/amagitakayosi

March 18, 2017
Tweet

More Decks by fand/amagitakayosi

Other Decks in Technology

Transcript

  1. BNBHJUBLBZPTJ
    3FBDUͰֶͿ
    ͍·Ͳ͖ͷ8FC։ൃ
    3FBDUͰֶͿ
    ͍·Ͳ͖ͷ8FC։ൃ
    BNBHJUBLBZPTJ
    BNBHJUBLBZPTJ

    View Slide

  2. ࢿྉ
    • ڭՊॻ

    https://github.com/fand/react-hands-on
    • ߨٛεϥΠυ

    https://speakerdeck.com/fand/reactdexue-
    bu-imadokifalsewebkai-fa

    View Slide

  3. ಥવͰ͕͢
    ͓ئ͍͕͋Γ·͢

    View Slide

  4. ͍·͙͢
    HJUDMPOF
    ͍ͯͩ͘͠͞ʂ

    View Slide

  5. ·ͣ͸Node.jsΠϯετʔϧ
    • https://nodejs.org/ja/ ͔Βμ΢ϯϩʔυ

    View Slide

  6. ϨϙδτϦΛ git clone
    $ git clone https://github.com/fand/react-hands-on
    • ·ͨ͸ zipͰμ΢ϯϩʔυ

    View Slide

  7. $ cd react-hands-on
    $ npm install
    ґଘϥΠϒϥϦ΋Πϯετʔϧ

    View Slide

  8. վΊ·ͯ͠amagiͰ͢

    View Slide

  9. IUUQEFWFMPQFSIBUFOBTUBDPNFOUSZ
    1PEDBTUװ׏גתׅ

    View Slide

  10. ͜ͷϋϯζΦϯͰ΍Δ͜ͱ
    • ReactͰWebαΠτΛ࡞Δ
    • ReactͱɺͦͷपลͰى͍ͬͯ͜Δ

    ։ൃ؀ڥͷมԽʹֶ͍ͭͯͿ

    View Slide

  11. ࠓ͔Β࡞ΔWebαΠτ

    View Slide

  12. ڭՊॻ: https://github.com/fand/react-hands-on
    • ௥Ճ/มߋ͢Δίʔυ͕εςοϓຖʹॻ͔Ε͍ͯΔ

    View Slide

  13. diffͷݟํ

    View Slide

  14. diffͷݟํ
    ʮςΫετʯΛ
    ʮςΩετʯʹมߋ

    View Slide

  15. diffͷݟํ
    ϑΝΠϧ຤ඌʹ
    ʮZPʯΛ௥Ճ

    View Slide

  16. ඪޠ: JS͕ Θ͔Βͳͯ͘΋ ؾʹ͠ͳ͍
    • ࠓ೔͸ReactΛֶͼ·͢

    (JSΛֶͼ͍ͨΘ͚Ͱ͸ͳ͍)
    • ΨϯΨϯίϐϖ͠Α͏ʂʂʂ
    • ٧·ͬͨΒ໛ൣղ౴Λར༻͠Α͏ ʂʂ

    View Slide

  17. develop
    developϒϥϯνʹ͓खຊ͋Γ·͢
    master

    View Slide

  18. develop
    master
    HJUͷλά

    View Slide

  19. developϒϥϯνͷ࢖͍ํ
    • օ͞Μ͸masterͰ࡞ۀ͠·͢
    • ʮͳΜ͔͓͔͍͠ʂಈ͔ͳ͍ʂʯͱ͔

    ʮ·ͩॻ͍ͯΔ్தͳͷʹʙʂʯͱͳͬͨΒ

    git checkout step-n ͠·͠ΐ͏
    • ྫ) Step 2 Ͱ٧·ͬͨΒ git checkout step-2

    View Slide

  20. ׁ׏׉ֻ
    כׄ׭ת׃׳ֲ

    View Slide

  21. Step 1: αʔόʔΛىಈ
    • $ npm run dev
    • http://localhost:3000/ ʹΞΫηε

    View Slide

  22. ىಈ੒ޭʂ
    • pages/ ʹϑΝΠϧ͕͋Δ
    • Reactίϯϙʔωϯτ

    View Slide

  23. ͜ͷϨϙδτϦͷߏ଄
    • pages/ ʹJSϑΝΠϧ͕͋Δ
    • pages/index.js ΛݟͯΈΑ͏

    View Slide

  24. index.jsͷΑ͏͢

    View Slide

  25. index.jsͷΑ͏͢
    U
    3FBDUίϯϙʔωϯτ

    View Slide

  26. index.jsͷΑ͏͢
    3FBDU&MFNFOUΛฦ͢
    ؔ਺ʹͳ͍ͬͯΔ
    U

    View Slide

  27. • ReactͰWebαΠτ࡞ΔͨΊͷϑϨʔϜϫʔΫ
    • ࣗಈͰ৭ʑ΍ͬͯ͘ΕΔ
    • Hot Module Reloading
    • Server-Side Rendering
    Next.js

    View Slide

  28. pages/index.js Λฤूͯ͠ΈΑ͏
    • Ϧϩʔυ͠ͳͯ͘΋൓ө͞ΕΔ͸ͣ

    View Slide

  29. Hot Module Reloading (HMR)
    • ϑΝΠϧΛฤूͨ͠Βɺฤूͨ͠෦෼͚ͩ

    Ϧϩʔυͯ͘͠ΕΔ
    • ຊདྷ͸Webpackͷػೳ
    • Next.js͕উखʹWebpackىಈͯ͘͠ΕͯΔ

    View Slide

  30. “Server-Side Rendering”
    ͱ͸ʁ

    View Slide

  31. ී௨ͷJS
    • αʔόʔଆͰϨϯμϦϯά

    View Slide

  32. ී௨ͷJS
    • αʔόʔଆͰϨϯμϦϯά
    • JSͰಈ͖Λ͚ͭΔ
    • αʔόʔଆͰϨϯμϦϯά

    View Slide

  33. Single Page Application (SPA)
    • JSͰશ෦ඳը͢Δ

    View Slide

  34. Single Page Application (SPA)
    • JSͰશ෦ඳը͢Δ

    View Slide

  35. "SPAͷϝϦοτ"
    • HTMLϦΫΤετ͕ݮΔ
    • AjaxͰσʔλΛऔಘ͠ɺJSͰඳը͢Δ
    • ϖʔδભҠ࣌΋ɺϖʔδ͕ਅͬനʹͳΒͳ͍
    • શ෦JSͰॻ͚Δ
    • αʔόʔͷॲཧ͕୯७ʹͳΔ

    View Slide

  36. #SPAͷ໰୊఺#
    • HTMLϑΝΠϧ͸നࢴ
    • ࠷ॳʹਅͬനͳը໘͕දࣔ͞Εͯ͠·͏
    • SEOʹऑ͍

    View Slide

  37. Server-Side Rendering
    • ReactͷϨϯμϦϯάΛαʔόʔଆͰߦͳ͏ʂ

    View Slide

  38. Server-Side Rendering
    • ReactͷϨϯμϦϯάΛαʔόʔଆͰߦͳ͏ʂ

    View Slide

  39. ։ൃऀπʔϧͰݟΔͱ
    • HTMLϑΝΠϧʹͪΌΜͱத਎͕͋Δ

    View Slide

  40. Step 2: AboutϖʔδΛ࡞Δ
    • pages/about.js Λ࡞੒
    • ΄΅ pages/index.js ͱಉ͡

    View Slide

  41. pages/about.jsΛ࡞੒

    View Slide

  42. http://localhost:3000/about Λ֬ೝ

    View Slide

  43. Step 3: ڞ௨ίϯϙʔωϯτΛ࡞Δ
    • ϨΠΞ΢τ౳ɺෳ਺ͷϖʔδͰ࢖͏ύʔπΛ

    ίϯϙʔωϯτʹ੾Γग़͢
    • component/ ϑΥϧμΛ࡞Γɺͦͷதʹ

    layout.js Λ࡞Δ
    • ͦͷޙɺ pages/ ಺ͷϑΝΠϧʹ

    ίϯϙʔωϯτΛૠೖ͢Δ

    View Slide

  44. components/layout.js

    View Slide

  45. components/layout.js
    IFBEཁૉ

    View Slide

  46. components/layout.js
    શϖʔδڞ௨ͷ
    ϔομʔ

    View Slide

  47. components/layout.js
    ϖʔδͷத਎Λ
    ಡΈࠐΜͰ͍Δ

    View Slide

  48. pages/index.js
    ϖʔδશମΛ
    -BZPVUͰғΉ

    View Slide

  49. pages/about.js
    JOEFYKTಉ༷

    View Slide

  50. ϒϥ΢βͰ֬ೝ͠Α͏

    View Slide

  51. Step 4: CSSΛಋೖ͢Δ
    • ReactͰCSSΛ࢖͏ํ๏
    • ී௨ʹॻ͍ͯ link λάͰಡΈࠐΉ
    • CSS in JS
    • ࠓճ͸ CSS in JS ͯ͠Έ·͢

    View Slide

  52. CSSͷ೉͍͠ॴ
    • ໊લۭ͕ؒάϩʔόϧ
    • ༏ઌ౓
    • ม਺΍ؔ਺͕࢖͑ͳ͍

    View Slide

  53. CSS։ൃͷਐԽ
    • Sass, Less౳ͷϓϦϓϩηοα
    • PostCSS
    • CSS in JS

    View Slide

  54. CSS in JS
    • ʮJSͰελΠϧΛఆٛͯ͠

    ίϯϙʔωϯτͷstyleଐੑʹͭͬ͜΋͏ͥʯ

    ͱ͍͏ൃ૝
    • Next.jsͰ͸σϑΥϧτͰ࢖͑Δ
    • ΍ͬͯΈΑ͏ʂ

    View Slide

  55. components/layout.jsΛमਖ਼
    $44JO+4༻
    ϥΠϒϥϦΛϩʔυ

    View Slide

  56. components/layout.jsΛमਖ਼
    CPEZཁૉͷ$44

    View Slide

  57. ελΠϧΛఆٛͯ͠
    ཁૉʹ౉͢

    View Slide

  58. ⚡ελΠϧ͕ద༻͞Εͨ⚡

    View Slide

  59. ͳΜͰίϨͰಈ͘ͷ……ʁ
    • next/css ͸֤ཁૉʹҰҙͳΫϥε໊Λੜ੒͠ɺ

    ͦͷΫϥεʹରͯ͠ελΠϧΛఆٛ͢Δ

    View Slide

  60. Step 5: ϋϯόʔΨʔϘλϯΛ௥Ճ͢Δ
    • ֎෦ͷCSSϥΠϒϥϦΛಡΈࠐΜͰ

    ϘλϯΛදࣔͯ͠ΈΑ͏
    • ࠓճ͸ jonsuh/hamburgers Λར༻͠·͢

    View Slide

  61. components/hamburger.jsΛ࡞੒

    View Slide

  62. components/hamburger.jsΛ࡞੒

    View Slide

  63. components/layout.jsΛमਖ਼

    View Slide

  64. components/layout.jsΛमਖ਼
    ֎෦$44Λϩʔυ

    View Slide

  65. දࣔ੒ޭ

    View Slide

  66. Step 6: ϋϯόʔΨʔϘλϯΛಈ͔͢
    • ͜͜·ͰͷReactίϯϙʔωϯτ͸

    ঢ়ଶΛ΋ͨͳ͔ͬͨ
    • ϋϯόʔΨʔϘλϯʹঢ়ଶΛ௥Ճ͠

    ಈ͔ͯ͠ΈΑ͏ʂ

    View Slide

  67. Reactίϯϙʔωϯτͷछྨ
    • ঢ়ଶͷͳ͍ίϯϙʔωϯτ:

    ReactElement Λฦؔ͢਺
    • ঢ়ଶͷ͋Δίϯϙʔωϯτ:

    React.Component Λܧঝ͢ΔΫϥε
    • render() ϝιουͰ ReactElement Λฦ͢

    View Slide

  68. ReactElement is Կ
    • JSXͰੜ੒͞ΕΔΦϒδΣΫτ
    ͍ͭ͜ͷ͜ͱ

    View Slide

  69. components/hamburger.jsΛमਖ਼

    View Slide

  70. components/hamburger.jsΛमਖ਼
    ঢ়ଶΛఆٛ

    View Slide

  71. components/hamburger.jsΛमਖ਼
    ঢ়ଶΛมߋ͢Δؔ਺

    View Slide

  72. components/hamburger.jsΛमਖ਼
    ΫϦοΫͨ͠Β
    UPHHMF
    ΛݺͿΑ͏ʹ

    View Slide

  73. ͏͍ͨ͝ʂ

    View Slide

  74. Step 7: αΠυόʔΛ௥Ճ
    • TopϖʔδɺAboutϖʔδͷϦϯΫΛද͍ࣔͨ͠
    • components/sidebar.jsͰαΠυόʔΛ࡞੒͠

    components/layout.jsʹૠೖ͢Δ

    View Slide

  75. components/sidebar.js

    View Slide

  76. OFYUMJOLΛར༻͠
    ϦϯΫΛ࡞੒

    View Slide

  77. components/layout.jsΛमਖ਼
    4JEFCBSΛϩʔυ
    4JEFCBSΛૠೖ
    (লུ)
    … …

    View Slide

  78. αΠυόʔ͕දࣔ͞Εͨ

    View Slide

  79. Step 8: αΠυόʔΛಈ͔͢
    • HamburgerͰ؅ཧ͍ͯ͠Δঢ়ଶΛ

    Sidebarʹ΋఻͍͑ͨ
    • LayoutͰঢ়ଶΛ؅ཧ͠

    HamburgerͱSidebarʹ౉͢Α͏ʹ͢Δ

    View Slide

  80. ϘλϯΛԡͨ͠ͱ͖ͷྲྀΕ
    -BZPVU
    4JEFCBS
    )BNCVSHFS
    JT4JEFCBS"DUJWFGBMTF

    View Slide

  81. -BZPVU
    4JEFCBS
    )BNCVSHFS
    ΫϦοΫ͞ΕͨΑʙ
    JT4JEFCBS"DUJWFGBMTF

    View Slide

  82. -BZPVU
    JT4JEFCBS"DUJWFGBMTF
    JT4JEFCBS"DUJWFUSVF
    JT4JEFCBS"DUJWFUSVF
    4JEFCBS
    )BNCVSHFS
    ঢ়ଶΛมߋ

    View Slide

  83. -BZPVU
    4JEFCBS
    )BNCVSHFS
    JT4JEFCBS"DUJWFUSVF
    JT4JEFCBS"DUJWFUSVF
    ঢ়ଶ͕఻ΘΔ

    View Slide

  84. -BZPVU
    4JEFCBS
    )BNCVSHFS
    JT4JEFCBS"DUJWFUSVF
    JT4JEFCBS"DUJWFUSVF
    දࣔΛ੾Γସ͑Δ

    View Slide

  85. components/layout.jsΛमਖ਼

    View Slide

  86. components/layout.jsΛमਖ਼
    U
    )BNCVSHFSʹ͋ͬͨ
    ঢ়ଶΛ؅ཧ͢Δॲཧ

    View Slide

  87. )BNCVSHFS 4JEFCBSʹ
    ঢ়ଶΛ౉͢

    View Slide

  88. components/hamburger.jsΛमਖ਼

    View Slide

  89. components/hamburger.jsΛमਖ਼
    QSPQTͰঢ়ଶΛड͚औΔ͚ͩ

    View Slide

  90. components/sidebar.jsΛमਖ਼

    View Slide

  91. components/sidebar.jsΛमਖ਼
    QSPQTΛड͚औͬͯ
    දࣔΛ੾Γସ͑Δ

    View Slide

  92. αΠυόʔ΋ಈ͍ͨʂ

    View Slide

  93. ·ͱΊ

    View Slide

  94. ࠓ೔ֶΜͩ͜ͱ
    • React ΞϓϦέʔγϣϯͷ࡞Γํ
    • Single Page Application (SPA)
    • Server-Side Rendering (SSR)
    • Hot Module Reloading (HMR)
    • CSS in JS

    View Slide

  95. ͓͔ͭΕ͞·Ͱͨ͠ʂ

    View Slide

  96. ؾܰʹ࣭໰͍ͯͩ͘͠͞
    w 5XJUUFSͰϝϯγϣϯͨ͠Γ

    IUUQTUXJUUFSDPNBNBHJUBLBZPTJ
    w (JU)VCͰJTTVFཱͯͨΓ

    IUUQTHJUIVCDPNGBOESFBDUIBOETPO
    ؾܰʹ࣭໰͍ͯͩ͘͠͞
    w 5XJUUFSͰϝϯγϣϯͨ͠Γ

    IUUQTUXJUUFSDPNBNBHJUBLBZPTJ
    w (JU)VCͰJTTVFཱͯͨΓ

    IUUQTHJUIVCDPNGBOESFBDUIBOETPO

    View Slide