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

これからのNode.jsの話をしよう

 これからのNode.jsの話をしよう

Yosuke Furukawa
PRO

February 26, 2014
Tweet

More Decks by Yosuke Furukawa

Other Decks in Programming

Transcript

  1. ͜Ε͔Βͷ/PEFKTͷ࿩
    Λ͠Α͏
    !ZPTVLF@GVSVLBXB

    View Slide

  2. !ZPTVLF@GVSVLBXB
    ೔ຊ/PEFKTϢʔβʔάϧʔϓ৽୅ද

    View Slide

  3. !ZPTVLF@GVSVLBXB
    $VSSFOU.Z803,4
    4VQQPSU%FWFMPQFST
    $SFBUJOH(BNFT
    $SFBUJOH'SBNFXPSLT

    View Slide

  4. !ZPTVLF@GVSVLBXB
    $VSSFOUNZJOUFSFTUT
    1FSGPSNBODF*NQSPWFNFOU
    3FBMUJNF
    "OZPUIFSOFXUFDIT
    MJLF(P %PDLFS $MJFOUTJEF.7$ FUD

    View Slide

  5. !ZPTVLF@GVSVLBXB
    $VSSFOU.ZGBWT
    1FSGPSNBODF*NQSPWFNFOU
    3FBMUJNF
    "OZPUIFSOFXUFDIT
    MJLF(P %PDLFS $MJFOUTJEF.7$ FUD
    'PMMPXNF

    View Slide

  6. ຊ୊

    View Slide

  7. ຊ୊
    /PEFKTOFXT
    ؾʹͳΔ/PEFKTϥΠϒϥϦ
    ౦ژ/PEFֶԂͷࠓޙ

    View Slide

  8. /PEFKTOFXT

    View Slide

  9. /PEFKTOFXT

    View Slide

  10. /PEFKTOFXT

    Ϧʔμʔ͕*[BBDT͔Β
    5+'POUBJOFʹ

    View Slide

  11. 5+'POUBJOF͸͜Μͳਓɹ
    ʹDPSFUFBNʹKPJO
    $*΍UFTUϝΠϯʹ୲౰
    8BMNBSUͷϝϞϦϦʔΫΛൃݟ
    ͨ͠Γͱ௿ϨΠϠʔʹ΋ڧ͍

    View Slide

  12. 5+'POUBJOF͸͜Μͳਓɹ
    ʹDPSFUFBNʹKPJO
    $*΍UFTUϝΠϯʹ୲౰
    8BMNBSUͷϝϞϦϦʔΫΛൃݟ
    ͨ͠Γͱ௿ϨΠϠʔʹ΋ڧ͍
    ౦ژ/PEFֶԂࡇ
    ʹݺͼ͍ͨ

    View Slide

  13. /PEFKTOFXT

    View Slide

  14. /PEFKTOFXT

    W΋͏͙͢Ͱ͢Ͷ

    View Slide

  15. WͰ৽͘͠ͳΔ͜ͱ
    4USFBN
    DMVTUFSSPVOESPCJO
    NVMUJQMFDPOUFYUJOWN
    TZODDIJME@QSPDFTT
    USBDJOHBQJ
    QFSGPSNBODFJNQSPWFNFOU FUD

    View Slide

  16. WͰ৽͘͠ͳΔ͜ͱ
    4USFBN
    DMVTUFSSPVOESPCJO
    NVMUJQMFDPOUFYUJOWN
    TZODDIJME@QSPDFTT
    USBDJOHBQJ
    QFSGPSNBODFJNQSPWFNFOU FUD
    ࢒೦ͳ͕ΒWͰ͸&4σϑΥϧτʹ͸ͳΒͳ͍

    View Slide

  17. WͰ৽͘͠ͳΔ͜ͱ
    ٞ࿦ͷྲྀΕΛϒϩάʹ঺հͯ͠ΔͷͰ͕࣌ؒ͋Ε͹ݟ
    ͍ͯͩ͘͞ɻ

    View Slide

  18. WͰ৽͘͠ͳΔ͜ͱ
    4USFBN
    DMVTUFSSPVOESPCJO
    NVMUJQMFDPOUFYUJOWN
    TZODDIJME@QSPDFTT
    USBDJOHBQJ
    QFSGPSNBODFJNQSPWFNFOU FUD

    View Slide

  19. TZODDIJME@QSPDFTT
    DIJME@QSPDFTTʹҎԼͷ"1*͕௥Ճ͞ΕΔɻ
    FYFD4ZOD
    FYFD'JMF4ZOD
    TQBXO4ZOD

    View Slide

  20. TZODDIJME@QSPDFTT
    DIJME@QSPDFTTʹҎԼͷ"1*͕௥Ճ͞ΕΔɻ
    FYFD4ZOD
    FYFD'JMF4ZOD
    TQBXO4ZOD HSVOUͱ͔ͷλεΫϥϯφʔͰ
    خ͍͠ػೳ

    View Slide

  21. TZODDIJME@QSPDFTT
    %&.0

    View Slide

  22. USBDJOH"1*
    QSPpMJOH༻ͷ"1*
    IFBQNFNPSZͷঢ়گΛϞχλͨ͠Γ
    UJDLຖʹVTFSͷ೚ҙͷΦϒδΣΫτΛUSBDFͰ͖
    Δ

    View Slide

  23. USBDJOH"1*
    %&.0

    View Slide

  24. Wͷશػೳ͸঺հ͠
    ͖Εͳ͍

    View Slide

  25. Wͷશػೳ͸঺հ͠
    ͖Εͳ͍
    4USPOH-PPQ͕͔ͳΓ
    ঺հͯ͠ΔͷͰݟΑ͏
    /PEFֶԂࡇʹ4USPOH-PPQͷਓ
    ݺΜͰ΋͍͍͔΋

    View Slide

  26. ؾʹͳΔϥΠϒϥϦ

    View Slide

  27. ؾʹͳΔϥΠϒϥϦ

    View Slide

  28. ؾʹͳΔϥΠϒϥϦ
    8"'ฤ

    View Slide

  29. ؾʹͳΔϥΠϒϥϦ
    8"'ฤ

    // Express!
    !
    // response time!
    !
    app.use(function(req, res, next){!
    var start = new Date;!
    res.on('header', function(){!
    var ms = new Date - start;!
    res.setHeader('X-Response-Time', ms +
    'ms');!
    });!
    next();!
    }); !
    !
    // response!
    !
    app.use(function(req, res, next){!
    res.send(200, "Hello World");!
    });
    // koa!
    !
    // response time!
    !
    app.use(function *(next){!
    var start = new Date;!
    yield next;!
    var ms = new Date - start;!
    this.set('X-Response-Time', ms + 'ms');!
    });!
    !
    // response!
    !
    app.use(function *(){!
    this.body = 'Hello World';!
    });

    View Slide

  30. ؾʹͳΔϥΠϒϥϦ
    8"'ฤ

    // Express!
    !
    // response time!
    !
    app.use(function(req, res, next){!
    var start = new Date;!
    res.on('header', function(){!
    var ms = new Date - start;!
    res.setHeader('X-Response-Time', ms +
    'ms');!
    });!
    next();!
    }); !
    !
    // response!
    !
    app.use(function(req, res, next){!
    res.send(200, "Hello World");!
    });
    // koa!
    !
    // response time!
    !
    app.use(function *(next){!
    var start = new Date;!
    yield next;!
    var ms = new Date - start;!
    this.set('X-Response-Time', ms + 'ms');!
    });!
    !
    // response!
    !
    app.use(function *(){!
    this.body = 'Hello World';!
    });
    HFOFSBUPSZJFME
    Ͱͷະདྷ

    View Slide

  31. ؾʹͳΔϥΠϒϥϦ
    8"'ฤ

    // handle error!
    app.use(function *(next) {!
    // try-catchͰΤϥʔϋϯυϦϯάͰ͖Δ!
    try {!
    yield next;!
    } catch (err) {!
    this.status = 500;!
    this.body = err.message;!
    }!
    });!
    !
    // error thrower!
    app.use(function *(next) {!
    if (this.url === "/_err") {!
    throw new Error("Send Error");!
    }!
    yield next;!
    });!

    View Slide

  32. ؾʹͳΔϥΠϒϥϦ
    8"'ฤ

    // handle error!
    app.use(function *(next) {!
    // try-catchͰΤϥʔϋϯυϦϯάͰ͖Δ!
    try {!
    yield next;!
    } catch (err) {!
    this.status = 500;!
    this.body = err.message;!
    // errorΠϕϯτΛൃߦ!
    this.app.emit("error", err, this);!
    }!
    });!
    !
    // error thrower!
    app.use(function *(next) {!
    if (this.url === "/_err") {!
    throw new Error("Send Error");!
    }!
    yield next;!
    });!
    ΤϥʔϋϯυϦϯά௚ײత

    View Slide

  33. ৄ͘͠͸

    View Slide

  34. ৄ͘͠͸
    ๻ͷॻ͍ͨLPBೖ໳هࣄΛ͝ҰಡԼ͍͞ɻ

    View Slide

  35. ؾʹͳΔϥΠϒϥϦ
    SFBMUJNFฤ

    View Slide

  36. ؾʹͳΔϥΠϒϥϦ
    SFBMUJNFฤ

    4PDLFU*0
    ͸৽͍͠1FSMͰ͋Δɻ

    View Slide

  37. SFBMUJNFϥΠϒϥϦ͸
    ࣮͸ͨ͘͞Μ͋Δ

    View Slide

  38. SFBMUJNFϥΠϒϥϦ͸
    ࣮͸ͨ͘͞Μ͋Δ
    TPDLFUJPʹ͚ͩ
    नΘΕΔඞཁͳ͍ɻ

    View Slide

  39. Ͱ΋ͲΕ࢖͏ͷ

    View Slide

  40. 1SJNVT

    View Slide

  41. 1SJNVT
    ͦ͜Ͱɺ1SJNVTɻ
    USBOTGFS૚ͰFOHJOFJP GBZF TPDLKT CSPXTFSDIBOOFM XT͕
    ࢖͑Δɺͦͷ্ͰTPDLFUJPͰαϙʔτ͍ͯ͠ΔΑ͏ͳ
    SPPNͱ͔ͷΞϓϦέʔγϣϯ૚Λߏங͢Δ

    View Slide

  42. 1SJNVT
    ͦ͜Ͱɺ1SJNVTɻ
    USBOTGFS૚ͰFOHJOFJP GBZF TPDLKT CSPXTFSDIBOOFM͕
    ࢖͑Δɺͦͷ্ͰTPDLFUJPͰαϙʔτ͍ͯ͠ΔΑ͏ͳ
    SPPNͱ͔ͷΞϓϦέʔγϣϯ૚Λߏங͢Δ
    ೰ΜͰͳ͍Ͱ1SJNVT࢖͓͏ɺ
    ޙͰUSBOTGFS૚͸ม͑ΒΕΔɻ

    View Slide

  43. ؾʹͳΔϥΠϒϥϦ
    ϑϩϯτΤϯυπʔϧฤ

    View Slide

  44. ؾʹͳΔϥΠϒϥϦ
    ϑϩϯτΤϯυฤ

    ඦՖ៶ཚ͗ͯ͢ɺઆ໌͸ׂѪɻ

    View Slide

  45. ؾʹͳΔϥΠϒϥϦ
    ϑϩϯτΤϯυπʔϧฤ

    ݸਓతʹ͸HVMQ CSPXTFSJGZ DPNQPOFOUJP

    View Slide

  46. ͜ͷޙCSPXTFSJGZͷ࿩
    ͋Γ·͢ʂʂɹ

    View Slide

  47. ౦ژ/PEFֶԂͷࠓޙ

    View Slide

  48. جຊํ਑
    ೋ݄ʹҰ౓͸/PEFֶԂΛ։࠵ͯ͠ɺΈΜͳͷ
    ஌ݟΛूΊ͍ͨ
    ೥ʹҰ౓ɺ౦ژ/PEFֶԂࡇ͸։࠵͍ͨ͠
    /PEFKTͷ࿩͹͔Γ͡Όͳͯ͘ผͳݴޠ͔Βֶ
    ΜͩΓɺ৽͍͠ࣄ͸ͲΜͲΜٵऩ͍ͨ͠

    View Slide

  49. جຊํ਑
    ೋ݄ʹҰ౓͸/PEFֶԂΛ։࠵ͯ͠ɺΈΜͳͷ
    ஌ݟΛूΊ͍ͨ
    ೥ʹҰ౓ɺ౦ژ/PEFֶԂࡇ͸։࠵͍ͨ͠
    /PEFKTͷ࿩͹͔Γ͡Όͳͯ͘ผͳݴޠ͔Βֶ
    ΜͩΓɺ৽͍͠ࣄ͸ͲΜͲΜٵऩ͍ͨ͠
    ͭ·Γ͜Ε·Ͱ௨Γ
    /PEFֶԂΛ΍Γ͍ͨ

    View Slide

  50. ม͍͑ͨ͜ͱ
    ΋ͬͱελοϑҎ֎͔Βͷਓͷҙݟ΋ฉ͖͍ͨɻ
    ΈΜͳ͕ͲΜͳͷʹڵຯ͕༗Δͷ͔ืू͍ͨ͠ɻ
    HJUUFSͱHJUIVCϦϙδτϦ࡞Γ·ͨ͠ɻ

    IUUQTHJUUFSJNZPTVLFGVSVLBXB5PLZP/PEF'FTUJWBM

    IUUQTHJUIVCDPNZPTVLFGVSVLBXB5PLZP/PEF'FTUJWBM

    View Slide

  51. ม͍͑ͨ͜ͱ
    ΋ͬͱελοϑҎ֎͔Βͷਓͷҙݟ΋ฉ͖͍ͨɻ
    ΈΜͳ͕ͲΜͳͷʹڵຯ͕༗Δͷ͔ืू͍ͨ͠ɻ
    HJUUFSͱHJUIVCϦϙδτϦ࡞Γ·ͨ͠ɻ

    IUUQTHJUUFSJNZPTVLFGVSVLBXB5PLZP/PEF'FTUJWBM

    IUUQTHJUIVCDPNZPTVLFGVSVLBXB5PLZP/PEF'FTUJWBM
    Θ͍Θ͍΍Γ͍ͨ

    View Slide

  52. ·ͱΊ

    View Slide

  53. ·ͱΊ
    /PEFKTOFXT
    Ϧʔμʔมߋ J[T5+'POUBJOF

    /PEFKTWͰมΘΔ͜ͱ
    ؾʹͳΔ/PEFKTϥΠϒϥϦ
    ,PB
    1SJNVT
    ϑϩϯτΤϯυπʔϧ͋Γա͗
    ౦ژ/PEFֶԂͷࠓޙ
    جຊ͸ม͑ͳ͍
    ҙݟΛऩू͠΍͘͢ɺ൓ө͠΍͘͢͢Δ
    Θ͍Θ͍Θʔ͍

    View Slide

  54. ೋ୅໨ऻ໊൸࿐ޱ্

    View Slide

  55. ͍ͭ·Ͱ΋มΘΒ͵NodeֶԂ΁ͷޚް৘ɺ͝᩾ርΛ
    ۱͔Β۱·Ͱ ͣͣͣʔ͍ͱ
    ޤ͍ئ͍ ͋͛ͨͯ·ͭΓ·͢Δʂʂʂ

    View Slide

  56. ͍ͭ·Ͱ΋มΘΒ͵NodeֶԂ΁ͷޚް৘ɺ͝᩾ርΛ
    ۱͔Β۱·Ͱ ͣͣͣʔ͍ͱ
    ޤ͍ئ͍ ͋͛ͨͯ·ͭΓ·͢Δʂʂʂ
    ΑΖ͓͘͠ئ͍͠·͢

    View Slide