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

プログラマがコードを書きながら考えること / #ginzarails

プログラマがコードを書きながら考えること / #ginzarails

銀座Rails #12の発表で使用したスライドです。

コードはこちら。
https://github.com/JunichiIto/disney-hotel-crawler

当日使用した動画はBOOTHで販売中です。
https://jnito.booth.pm/items/1551521

無料のお試し版もあります。
https://youtu.be/-iTiW5eQMBk

銀座Rails #12
https://ginza-rails.connpass.com/event/139740/

Junichi Ito

August 29, 2019
Tweet

More Decks by Junichi Ito

Other Decks in Technology

Transcript

  1. ϓϩάϥϚ͕ίʔυΛ
    ॻ͖ͳ͕Βߟ͑Δ͜ͱ
    גࣜձࣾιχοΫΨʔσϯ ҏ౻३Ұ / @jnchito
    2019.8.29 ۜ࠲Rails #12
    ʙ෼Ͱ࡞Δʁ8FCΫϩʔϥʔ։ൃʙ

    View full-size slide

  2. ಥવͰ͕͢ɺΈͳ͞Μɻ
    ؾʹͳΓ·ͤΜ͔ʁ

    View full-size slide

  3. ͜Μͳ͜ͱɺؾʹͳΓ·ͤΜ͔ʁ
    • ʮ˓˓͞Μ͕ॻ͍ͨίʔυʯ͸GitHubͰݟΔ͜ͱ͕Ͱ͖Δ
    • Ͱ΋ɺʮ˓˓͞Μ͕ίʔυΛॻ͘աఔʯΛ໨ʹ͢Δ͜ͱ͸໓ଟʹͳ͍
    • ͲΜͳεϐʔυͰίʔυΛॻ͍ͯΔΜͩΖ͏ʁ
    • ͲΜͳπʔϧ΍ςΫχοΫΛ࢖ͬͯίʔυΛॻ͍ͯΔΜͩΖ͏ʁ
    • ͦ΋ͦ΋ɺ಄ͷதͰ͸ͲΜͳ͜ͱΛߟ͑ͯΔΜͩΖ͏ʁ
    • ͡Ό͋ɺ˓˓͞Μͷྡͷ੮Ͱݟͤͯ΋Β͏ʁ͍΍͍΍ϜϦʂ

    View full-size slide

  4. ˓˓͞Μ͸͖ͬͱɺ͜͏ʢͱ͍͏զʑͷউखͳໝ૝ʣ
    ↑ߴ଎ͰλΠϐϯά͢ΔೣͷΞχϝgif ↑ߴ଎ͰλΠϐϯά͞Ε͍ͯ͘Ξχϝgif

    View full-size slide

  5. ͦ͜Ͱɾɾɾ

    View full-size slide

  6. ࠓ೔͸ʮ๻͕ίʔυΛॻ͘աఔʯΛ
    Ұྫͱ͓ͯ͠ݟͤ͠·͢ʂʂ
    ʢͪΐͬͱஏ͔͍͚ͣ͠Ͳɾɾɾʣ

    View full-size slide

  7. ͯ͞ɺ࿩͸มΘΓ·͕͢

    View full-size slide

  8. ࠓ೥ͷ݄ʹ͋ͬͨग़དྷࣄ
    • Ո଒ͰσΟζχʔϥϯυ΁ߦ͘͜ͱʹͳͬͨͷͰϗςϧΛ༧໿ͨ͠
    • ࣄ৘͕͋ͬͯ೔ఔΛมߋ͢Δඞཁ͕ग़͖ͯͨʢ॓ധ೔ͷ2िؒલʣ
    • ͕ɺ΋͏ϗςϧͷۭ͖෦԰͕ͳ͍ʂʢ೔ؼΓϓϥϯ͔͠ͳ͍ʣ
    • ຖ೔Կ౓΋ۭ͖෦԰ΛνΣοΫΛ͢Δͷ͸େม
    • ͦ͏ͩɺ͜Μͳ໘౗ͳ͜ͱ͸ίϯϐϡʔλʹ΍ΒͤΑ͏
    • ͱ͍͏͜ͱͰɺࣗ࡞ͷΫϩʔϥʔϓϩάϥϜΛ։ൃ

    View full-size slide

  9. ݕࡧͯ͠΋ग़ͯ͘Δͷ͸
    ೔ؼΓϓϥϯ͚ͩ
    ࢀߟɿ݄ͷঢ়گ͸͜ΜͳΠϝʔδ

    View full-size slide

  10. ͲΜͳϓϩάϥϜͩͬͨͷʁ
    • ఆظతʹϗςϧͷ༧໿ϖʔδʹΞΫηε͢Δʢݕࡧ৚݅͸ݻఆʣ
    • ৽͍͠ϓϥϯ͕ग़͖ͯͨΒϝʔϧͰ௨஌͢Δ
    ࢖༻͢ΔϑϨʔϜϫʔΫɺ࣮ߦ؀ڥͳͲ
    - Ruby on Railsʢ
    - Heroku + Heroku Schedulerʢ10෼͓͖ʹϓϩάϥϜΛىಈʣ
    - Mechanize gemͰεΫϨΠϐϯά
    • खͬऔΓૣ͞Λ༏ઌͯ͠ɺ࢖͍׳Εٕͨज़ʢRailsͱHerokuʣΛબ୒

    View full-size slide

  11. ࠓ͔Β͓࿩͢͠Δ͜ͱ
    • 6݄ʹ࡞ͬͨΫϩʔϥʔϓϩάϥϜΛ΋͏Ұ౓θϩ͔Β࡞Γ·͢
    • ͲΜͳ͜ͱΛߟ͑ͳ͕ΒίʔυΛॻ͍ͨͷ͔આ໌͠ͳ͕Β࡞Γ·͢
    • 6݄ʹॻ͍ͨίʔυ͸΄ͱΜͲهԱʹ࢒͍ͬͯ·ͤΜ
    • ϋϚͬͨΓϛεͬͨΓ͢Δͱ͜Ζ΋શ෦͓ݟͤ͠·͢
    • 30෼ͰϥΠϒίʔσΟϯάʂʂ͔ͨͬͨ͠ΜͰ͕͢ɺಈըʹ͠·ͨ͠

    View full-size slide

  12. ಈըΛݟͳ͕Βߟ͑ͯ΄͍͜͠ͱ
    • ʮࣗ෼ͱ͸͕͜͜ҧ͏ʯͱࢥͬͨ఺͸ʁ
    - ͦͷൃ૝͸ͳ͔ͬͨʂࣗ෼΋΍ͬͯΈΑ͏
    - ͍΍ɺͦ͜͸͜͏͍͏΍Γํͷํ͕͍͍ͷͰ͸ʁ
    • ٯʹʮࣗ෼ͱಉͩ͡ʯͱࢥͬͨ఺͸ʁ
    • Έͳ͞Μ͕ײͨ͜͡ͱΛΞϯέʔτ or ࠙਌ձͰڭ͍͑ͯͩ͘͞
    - ڵຯਂ͍ճ౴͸ޙ೔ϒϩάͰ࢖Θͤͯ΋Β͏͔΋͠Ε·ͤΜ

    View full-size slide

  13. ಈըʹؔ͢Δલ৘ใ
    • ಈըͷ௕͞͸໿30෼ɻഒ଎࠶ੜͳͷͰɺগ͠ૣޱͰ͢
    • ࡱӨ೔͸8݄4೔Ͱɺ6݄౰࣌ͱ͸ҎԼͷ఺Ͱঢ়گ͕ҟͳΓ·͢
    - 6݄ʹ๻͕ر๬͢Δ೔͸ɺ೔ؼΓϓϥϯ͔͠ͳ͔ͬͨ
    - 8݄ʹͲͷ೔΋ۭ͖෦԰͕͋ͬͨʢ׬શʹ͸࠶ݱͰ͖ͳ͔ͬͨʣ
    • ༧໿ϖʔδ͸GETύϥϝʔλͰݕࡧ৚݅ΛࢦఆͰ͖Δ͜ͱΛ֬ೝࡁΈ
    • ʮ৽ϓϥϯ͔Ͳ͏͔ʯΛԿͰ൑அ͢Δ͔ʁΛߟ͑Δͱ͜Ζ͔Β։࢝
    - ઃܭͷ్தͳͷͰɺίʔυ͸·ͩ1ߦ΋ॻ͍͍ͯ·ͤΜ

    View full-size slide

  14. ໔੹ࣄ߲
    • ΫϩʔϦϯά΍εΫϨΠϐϯά͸ܐࣄࣄ݅ʹൃల͢Δ͜ͱ͕͋Γ·͢
    • ͜ͷߨԋΛࢀߟʹͨ͠ϓϩάϥϜͰଛ֐͕ൃੜͯ͠΋ɺචऀ͸Ұ੾

    ੹೚Λෛ͍·ͤΜ
    ࢀߟʮԬ࡚ࢢཱதԝਤॻؗࣄ݅ - Wikipediaʯ
    Ԭ࡚ࢢཱதԝਤॻؗࣄ݅ʢ͓͔͖͟͠ΓͭͪΎ͏͓͏ͱ͠ΐ͔Μ͚͡Μʣ͸ɺ2010೥3݄ࠒʹԬ࡚
    ࢢཱਤॻؗͷଂॻݕࡧγεςϜʹΞΫηεো֐͕ൃੜ͠ɺར༻ऀͷҰਓ͕ୁั͞Εͨࣄ݅Ͱ͋Δɻ
    ར༻ऀʹ߈ܸͷҙਤ͸ͳ͘ɺ·ͨɺࠜຊతͳݪҼ͕ਤॻؗଆͷγεςϜͷෆ۩߹ʹ͋ͬͨ͜ͱ͔Β
    ࿦ٞΛݺΜͩɻୁั͞Εͨਓ෺͕औௐ΂ͷޙɺLibrahackͱ͍͏αΠτΛ্ཱͪ͛ͯղઆΛͨ͜͠ͱ
    ͔ΒɺLibrahackࣄ݅ͱ΋ݺ͹ΕΔɻ
    https://ja.wikipedia.org/wiki/Ԭ࡚ࢢཱதԝਤॻؗࣄ݅

    View full-size slide

  15. ͦΕͰ͸ಈըΛͲ͏ͧʂ

    View full-size slide

  16. ▶ಈըΛ࠶ੜதʜ
    ಈը͸#005)ͰൢചதͰ͢ˠIUUQTKOJUPCPPUIQNJUFNT
    ແྉͷ͓ࢼ͠൛΋͋Γ·͢ˠIUUQTZPVUVCFJ5J8F2.#L

    View full-size slide

  17. ಈը͸͜͜·ͰͰ͢

    View full-size slide

  18. ͜ͷ͋ͱɺӡ༻Λ࢝ΊΔ·Ͱʹ΍ͬͨ͜ͱ
    • ࠓճ࡞ͬͨϝιουΛىಈ͢ΔrakeλεΫΛ࡞੒
    • HerokuσϓϩΠʹ޲͚ͨίʔυͷमਖ਼ ˍ σϓϩΠ࣮ߦ
    • Heroku SchedulerΛઃఆ͠ɺ10෼͓͖ʹrakeλεΫΛىಈ
    • ॳճͷىಈͰʮ೔ؼΓϓϥϯʯ͕ϝʔϧ௨஌͞ΕΔ͜ͱΛ֬ೝ

    View full-size slide

  19. ίʔυ͸ͪ͜Β
    https://github.com/JunichiIto/disney-hotel-crawler

    View full-size slide

  20. Ͱɺ݁ہ༧໿Ͱ͖ͨͷʁ

    View full-size slide

  21. ͸͍ɺͰ͖·ͨ͠ʂʂ

    View full-size slide

  22. ࣮ࡍʹӡ༻ͯ͠ಘΒΕֶͨͼ
    • Ωϟϯηϧྉ͕ൃੜ͢Δ೔͕ۙͮ͘ͱɺٸʹۭ͖෦԰͕૿͑࢝ΊΔ
    • ͭ·ΓɺΈΜͳΩϟϯηϧྉΛڪΕͯΩϟϯηϧ࢝͠ΊΔ
    • ϗςϧଆ΋ಉ͡ϓϥϯΛͪΐͬͱͣͭ஋Լ͛ͨ͠Γ͢Δʢζϧ͍ʣ
    • ࠷ऴతʹ͸ʮ͜ΕͳΒຬ଍ʯͱ͍͏ϓϥϯͰ༧໿Ͱ͖·ͨ͠✌

    View full-size slide

  23. ͓ؾ͖͍͚ͮͨͩͨͩΖ͏͔ʁ

    View full-size slide

  24. ಈըΛ։࢝ͨ͠ͱ͖ͷ࣌ࠁ
    ಈը͕ऴྃͨ͠ͱ͖ͷ࣌ࠁ
    ɿʙɿ
    ʹ໿࣌ؒ൒ʂʂ

    View full-size slide

  25. ಈըΛࡱͬͯΈͯΘ͔ͬͨ͜ͱ
    ಈըΛࡱΔલͷ๻
    • Ұ౓࡞ͬͨϓϩάϥϜ΍͠ɺ30෼͔40෼͙Β͍Ͱ࡞ΕΔ΍Ζ
    • ౰೔ʹϥΠϒίʔσΟϯάͰ΋શવ͑͑Μ΍͚Ͳͳʔʢ༨༟ʣ
    ಈըΛࡱͬͨޙͷ๻
    • ͜Εɺ౰೔ϥΠϒίʔσΟϯάͯͨ͠ΒϠό͔ͬͨΘɾɾɾ
    ಋ͖ग़͞Εͨਅཧ
    ϓϩάϥϚͷݟੵ΋Γ͸ɺ͍ͭ΋͋ͯʹͳΒͳ͍

    View full-size slide

  26. ൚༻తʹ࢖͑ͦ͏ͳಈը಺ͷϙΠϯτ
    • ؆୯ͳίʔυͰಈ࡞֬ೝ͔ͯ͠Βɺ໨తͷίʔυΛॻ͘
    • ςετίʔυΛ࢖ͬͯ܁Γฦ͠ಈ࡞֬ೝ͢Δ
    • ެࣜͷ৘ใΛ༏ઌతʹࢀর͢ΔʢQiita౳ʹཔΔͷ͸ͦͷ࣍ʣ
    • σόοΨΛ࢖ͬͯσόοά͢ΔʢRubyMineΛ࢖͏ͱ͘͢͝ϥΫʣ
    • ίϛοτͷલʹdiffΛνΣοΫ͢Δʢࣗ෼ͰίʔυϨϏϡʔ͢Δʣ

    View full-size slide

  27. ؾʹͳΓ·ͤΜ͔ʁʢ๯಄ͷ࣭໰ʣ
    • ʮ˓˓͞Μ͕ॻ͍ͨίʔυʯ͸GitHubͰݟΔ͜ͱ͕Ͱ͖Δ
    • Ͱ΋ɺʮ˓˓͞Μ͕ίʔυΛॻ͘աఔʯΛ໨ʹ͢Δ͜ͱ͸໓ଟʹͳ͍
    • ͲΜͳεϐʔυͰίʔυΛॻ͍ͯΔΜͩΖ͏ʁ
    • ͲΜͳπʔϧ΍ςΫχοΫΛ࢖ͬͯίʔυΛॻ͍ͯΔΜͩΖ͏ʁ
    • ͦ΋ͦ΋ɺ಄ͷதͰ͸ͲΜͳ͜ͱΛߟ͑ͯΔΜͩΖ͏ʁ

    View full-size slide

  28. ಈըΛݟͯΘ͔ͬͨͱࢥ͍·͕͢ɺ

    View full-size slide

  29. ԿͰ΋஌͍ͬͯΔਓ΍
    ·ͬͨ͘ϛεΒͳ͍ਓ͸͍·ͤΜ

    View full-size slide

  30. ͜Μͳਓ΋ʢͨͿΜʣ͍ͳ͍
    ↑ߴ଎ͰλΠϐϯά͢ΔೣͷΞχϝgif ↑ߴ଎ͰλΠϐϯά͞Ε͍ͯ͘Ξχϝgif

    View full-size slide

  31. ࠓճͷൃදͰԿ͔৽͍͠ʮؾ͖ͮʯΛ
    ࣋ͪؼͬͯ΋Β͑ͨΒ޾͍Ͱ͢

    View full-size slide

  32. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠
    !KODIJUP
    CMPHKOJUPDPN
    Ξϯέʔτͷճ౴΋͓଴͍ͪͯ͠·͢ʂ

    View full-size slide