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

Vue.jsとその未来 2.0 #wbkyoto

Vue.jsとその未来 2.0 #wbkyoto

#wbkyoto x #ng_kyoto 共催 WordBench京都10月 JS-FWでのスライドです。

Potato4d(Hanatani Takuma)

October 09, 2016
Tweet

More Decks by Potato4d(Hanatani Takuma)

Other Decks in Programming

Transcript

  1. Vue.jsͱͦͷະདྷ 2.0
    #wbkyoto 2016/10 @ TAKUMA Hanatani

    View Slide

  2. https://speakerdeck.com/potato4d

    View Slide

  3. Ұ൪ࠨ্

    View Slide

  4. ಥવͰ͕͢ʂ

    View Slide

  5. JSϑϨʔϜϫʔΫܦݧ͸͋Γ·͔͢ʁ

    View Slide

  6. Vue.jsΛ৮ͬͨ͜ͱ͸͋Γ·͔͢ʁ

    View Slide

  7. SPA։ൃΛͨ͜͠ͱ͸͋Γ·͔͢ʁ

    View Slide

  8. ࠓճ͸ͳͯ͘΋͋Δఔ౓͸େৎ෉Ͱ͢ʂ
    ʢલ൒·Ͱ͸جຊతͳઆ໌Λ͠·͢ʣ

    View Slide

  9. ࣗݾ঺հ
    • Ֆ୩୓ຏ a.k.a. Potato4d
    • य़͔ΒࣾձਓʹͳΓͦ͏
    • JSϝΠϯͰɺσβΠϯ΍ཪ΋΍ͬͨΓ
    • ࠓճ͸WordPressͷ࿩͸෧ҹͯ͠·͢

    View Slide

  10. Vue 2.0ͷυΩϡϝϯτͷ຋༁
    ͸͡Ί·ͨ͠

    View Slide

  11. ࠓճ࿩͢͜ͱ
    • Vue.jsͷ͍͍ͱ͜Ζ
    • Vue.jsʹ΋ؚ·Ε࠷ۙͷϑϨʔϜϫʔΫͰසൟ
    ʹར༻͞ΕΔػೳʹ͍ͭͯ
    • Vue 2.0ʹ͍ͭͯ

    View Slide

  12. What’s Vue.js?

    View Slide

  13. Vue.jsͱ͸Կ͔ʁ
    • JavaScriptͷϑϨʔϜϫʔΫͷͻͱͭ
    • γϯϓϧͰܰྔͰ͋Δ͜ͱ͕΢Ϧ
    • ϋʔυϧ͕௿͘ɺ༷ʑͳ৔ʹಋೖ͠΍͍͢
    • ࠷ۙ2.0͕Ͱͯɺ৭ʑਐԽͨ͠

    View Slide

  14. Vue.jsͷັྗ
    1. γϯϓϧͰܰྔͳAPI
    2. शख़౓ʹԠͯ͡ߏ੒ΛมԽͰ͖Δॊೈ͞
    3. தن໛Ͱ΋ར༻͠΍͍֦͢ு܈

    View Slide

  15. 1. γϯϓϧͰܰྔͳAPI

    View Slide

  16. Vue.jsͷAPI
    • ૒ํ޲όΠϯσΟϯά
    • ΧελϜίϯϙʔωϯτ
    • ΧελϜσΟϨΫςΟϒ
    • etc...

    View Slide

  17. ͬ͘͟Γݴ͏ͱ
    • Mustacheه๏΍಺ଁͷϑοΫʹΑͬͯJSͱ
    HTMLؒͰσʔλΛڞ༗͢Δػೳ
    • HTMLλάΛࣗ࡞͢Δػೳ
    • HTMLλάʹϑοΫΛ͚ͭΒΕΔػೳ

    View Slide

  18. Vue.jsͷAPI
    • ૒ํ޲όΠϯσΟϯά
    • ΧελϜίϯϙʔωϯτ
    • ΧελϜσΟϨΫςΟϒ
    • etc...

    View Slide

  19. ૒ํ޲όΠϯσΟϯά

    View Slide

  20. ૒ํ޲όΠϯσΟϯά
    • Mustacheه๏({{hoge}})Λ༻͍Δ͜ͱͰJS͔
    ΒHTML΁σʔλΛྲྀ͠ࠐΉ͜ͱ͕ग़དྷΔ
    • v-modelΛར༻͢Δ͜ͱͰɺϑΥʔϜͷೖྗ஋
    ͱJS্ͷม਺ͷ஋ͷยํ͕มΘΔͱ͖ɺ΋͏
    ยํ΋ࣗಈͰมΘΔΑ͏ʹͳΔ

    View Slide

  21. ૒ํ޲όΠϯσΟϯά

    {{message}}


    HTML Code
    https://jp.vuejs.org

    View Slide

  22. ૒ํ޲όΠϯσΟϯά
    var demo = new Vue({
    el: “#demo”
    data:{
    message: “Hello Vue.js!”
    }
    });
    JavaScript Code
    https://jp.vuejs.org

    View Slide

  23. ૒ํ޲όΠϯσΟϯά
    Result
    https://jp.vuejs.org

    View Slide

  24. ૒ํ޲όΠϯσΟϯά
    Result
    https://jp.vuejs.org

    View Slide

  25. ΧελϜίϯϙʔωϯτ

    View Slide

  26. ΧελϜίϯϙʔωϯτ
    • ͬ͘͟Γ͍͏ͱɺʮಠࣗͷHTMLλάΛఆٛͰ
    ͖Δػೳʯ
    • Ͱ͸͋Δ͕ɺJSͷൣғͱͳΔ౎߹্ɺείʔϓ
    Λด͡ࠐΊΒΕΔ༷ʹͳΔͳͲͷར఺͕͋Δ
    • Vue.jsΛ࢖༻͢Δ৔߹͸ɺίϯϙʔωϯτ͕୯
    Ґͷج४ͱͳΔ

    View Slide

  27. ΧελϜίϯϙʔωϯτ




    <br/>var Greeting = new Vue.extend({<br/>props: “name”,<br/>template: “<p>Hello, {{name}}.</p>”<br/>);<br/>Vue.component(“greeting”, Greeting);<br/>new Vue({el: “#app”});<br/>
    index.html

    View Slide

  28. ΧελϜίϯϙʔωϯτ
    Result

    View Slide

  29. ΧελϜίϯϙʔωϯτ





    <br/>var Greeting = new Vue.extend({<br/>props: “name”,<br/>template: “<p>Hello, {{name}}.</p>”<br/>);<br/>Vue.component(“greeting”, Greeting);<br/>new Vue({el: “#app”});<br/>
    index.html

    View Slide

  30. ΧελϜίϯϙʔωϯτ
    Result

    View Slide

  31. ͜Ε·Ͱͷίʔυ

    View Slide

  32. ͜Ε·Ͱͷίʔυ
    (function(){
    var data = “hoge”;
    $(“input”).val(data);
    $(“p”).val(data);
    $(“input”).on(“keyup”, function(){
    $(“p”).text($(this).val());
    });
    }());
    jQuery Code

    View Slide

  33. ॻ͔ͳ͍͍ͯ͘

    View Slide

  34. 2. Vue.js͕΋ͭॊೈ͞

    View Slide

  35. ͸͡Ίͯ࢖͏ͱ͖

    View Slide

  36. ͸͡Ίͯ࢖͏ͱ͖

    Hello, {{name}}


    <br/>.<br/>.<br/>.<br/>new Vue({<br/>el: “#app”,<br/>data: {
<br/>name : “John”<br/>}<br/>});<br/>index.html<br/>

    View Slide

  37. ͋Δఔ౓׳Ε͖ͯͨͱ͖

    View Slide

  38. ͋Δఔ౓׳Ε͖ͯͨͱ͖






    index.html

    View Slide

  39. ͋Δఔ౓׳Ε͖ͯͨͱ͖
    var ComponentA = Vue.extend({
    props: [“name”],
    template: “Hello, {{name}}”
    });
    Vue.extend(“comp-a”, ComponentA);
    comp-a.js

    View Slide

  40. ͋Δఔ౓׳Ε͖ͯͨͱ͖
    new Vue({
    el: “#app”
    });
    main.js

    View Slide

  41. جຊ͕ͻͱͱ͓Γ෼͔Δ৔߹

    View Slide

  42. جຊ͕ͻͱͱ͓Γ෼͔Δ৔߹
    $ npm install -D vue webpack vue-loader etc…
    const Vue = require(“vue”);
    const App = require(“./app.vue”);
    Vue.component(“comp-a”, require(“./components/comp-a.vue”);
    Vue.component(“comp-b”, require(“./components/comp-b.vue”);
    new Vue(App);
    On the terminal
    index.js

    View Slide

  43. جຊ͕ͻͱͱ͓Γ෼͔Δ৔߹

    Hello, {{name}}!

    <br/>module.exports = {<br/>props: [“name”]<br/>};<br/>
    comp-a.js

    View Slide

  44. Vue.jsͷར༻ํ๏
    • scriptλά͔Β௚ͷར༻OK
    • ΋ͪΖΜɺnpm͔Βͷಋೖ΋OK
    • webpack, browserify྆ํ͔ΒͷϏϧυ΋Մೳ

    View Slide

  45. தن໛Ͱ΋
    ར༻͠΍͍֦͢ு܈

    View Slide

  46. ͔ͬ͠ΓSPAͱͯ͠ͷମࡋͷ੔ͬͨΞϓϦέʔγϣϯΛ࡞Γ͍ͨ
    Vue.jsʹ࠷దԽ͞ΕͨFlux࣮૷͸ͳ͍ͷʁ
    ग़ͯ͘Δཁ๬
    JavaScriptͷϑϨʔϜϫʔΫ࢖͏ͱSEOͷ໘͕ͳ͊……

    View Slide

  47. ΑΓਂ͘࢖͏৔߹
    • ʮͪΌΜͱʯSPA͍ͨ͠ɹˠɹ

    View Slide

  48. ΑΓਂ͘࢖͏৔߹
    • ʮͪΌΜͱʯSPA͍ͨ͠ɹˠɹVueRouter

    View Slide

  49. ΑΓਂ͘࢖͏৔߹
    • ʮͪΌΜͱʯSPA͍ͨ͠ɹˠɹVueRouter
    • FluxύλʔϯΛ࢖͍͍ͨɹˠɹ

    View Slide

  50. ΑΓਂ͘࢖͏৔߹
    • ʮͪΌΜͱʯSPA͍ͨ͠ɹˠɹVueRouter
    • FluxύλʔϯΛ࢖͍͍ͨɹˠɹVuex

    View Slide

  51. ΑΓਂ͘࢖͏৔߹
    • ʮͪΌΜͱʯSPA͍ͨ͠ɹˠɹVueRouter
    • FluxύλʔϯΛ࢖͍͍ͨɹˠɹVuex
    • SSRΛ͍ͨ͠ɹɹɹɹɹɹˠɹ

    View Slide

  52. ΑΓਂ͘࢖͏৔߹
    • ʮͪΌΜͱʯSPA͍ͨ͠ɹˠɹVueRouter
    • FluxύλʔϯΛ࢖͍͍ͨɹˠɹVuex
    • SSRΛ͍ͨ͠ɹɹɹɹɹɹˠɹVue 2.0

    View Slide

  53. VueRouter(with 1.x)
    router.map({
    "/": {
    component: require(“./pages/index.vue”)
    },
    “users/“ :{
    component: require(“./pages/users/index.vue”)
    },
    “/users/:id”: {
    component: require(“./pages/users/detail.vue”)
    }
    });

    View Slide

  54. Vuex
    https://github.com/vuejs/vuex

    View Slide

  55. and…

    View Slide

  56. Vue 2.0
    2

    View Slide

  57. େ෯ͳεϐʔυΞοϓ
    1.0ͱൺֱͯ͠໿1.7ഒͷ଎౓վળ
    Vanilla JS Vue 2.0 Vue 1.0
    https://medium.com/the-vue-point/vue-2-0-is-here-ef1f26acf4b8#.xqevlvkak
    1.0x
    1.37x
    2.16x

    View Slide

  58. αʔόʔαΠυϨϯμϦϯά
     
    +

    View Slide

  59. Server-Side Rendering(with 2.0)
    const Vue = require('vue');
    const app = new Vue({
    render: function (h) {
    return h('p', 'hello world');
    };
    });
    const renderer = require('vue-server-renderer').createRenderer();
    renderer.renderToString(app, (error, html) => {
    if (error) throw error;
    console.log(html);
    });
    http://vuejs.org/guide/ssr.html

    View Slide

  60. ߴ͍ޓ׵ੑ
    શͯͷAPIͷ͏ͪɺ90%͕มߋͳ͠(Router͸มߋ͋Γ)
    http://vuejs.org/guide/migration.html

    View Slide

  61. Vue 2.0

    View Slide

  62. Vue 2.0 is

    View Slide

  63. Vue 2.0 is here!

    View Slide

  64. ·ͱΊ
    • Vue.js͸؆ܿͰΘ͔Γ΍͍͢
    • ॳֶऀ͔Βख़࿅ऀ·Ͱɺ෯޿͍Ϣʔβʔ͕ѻ
    ͍΍͍ͭ͘͢Γʹͳ͍ͬͯΔ
    • ΦϑΟγϟϧͷ֦ு͕๛෋Ͱɺجຊతʹେମ
    ͳΜͰ΋Ͱ͖Δ

    View Slide

  65. Thank you!

    View Slide