Node.js Past,Present, FutureYAPC::ASIA 2015
View Slide
@yosuke_furukawaNode.jsϢʔβʔάϧʔϓද
@jovi0608Node/io.js ٕज़ҕһձ
index• Past• Node.js Γཱͪ• Joyent ͱ Node.js• BDFL Ϟσϧ• Present• Node.js։ൃఀ• io.jsͷ಄• TCϞσϧ• Future• The Future of Node• LTS• Nodeͷࠓޙ
The History of Node
2001 2008 2009 2010 2011 2012 2015ʙ
Past Node.js
Node.jsΓཱͪ
2001 2008 2009 2010 2011 2012 2015ʙ/PEFKTJTCPSO
2009 ʙ 2012 Node.jsͷഁյͱͷ࣌
3ZBO%BIM5IF'BUIFSPG/PEF
Ryan Dahl talks aboutNode.js in JSConf.eu 2009
Node.js in brief• Server-Side JavaScript• Evented, Non-Blocking I/O Similar toEventMachine• Built on Google’s V8
Node.js in brief• Server-Side JavaScript• Evented, Non-Blocking I/O Similar toEventMachine• Built on Google’s V8ͳΜͰ/PEFKT͜͏͍͏ߏΛબΜͩͷ͔
2001 2008 2009 2010 2011 2012 2015ʙ$,1SPCMFN
$,1SPCMFNJTw ͪΐʔͨ͘͞ΜͷΫϥΠΞϯτ ,͕Ұʹଓͨ͠Βαʔόʔࢮ͵ΑͶ͍ͬͯ͏w ࣌ͷϑϩϯτ"QBDIF͕ओྲྀw "QBDIFϓϩηεεϨουϞσϧw ΫϥΠΞϯτ͕ଓ͢ΔʹϓϩηεPSεϨου্͕͕ΔͱϝϞϦ͍·͘ΒΕͯɺɺɺ ޙ͔Δͳɻɻɻ
2001 2008 2009 2010 2011 2012 2015ʙ8FCd
ຊͰʮ8FCͷઌʹ͋Δ$,ʯͱ͔هࣄ͕͔͔ΕΔ
8FC࣌4/4࣌
Ϣʔβʔ͕αΠτʹࡏ͢Δ͕࣌ؒ૿͑Δ࣌ϝοηʔδ͕དྷ·͍͍ͨ͠Ͷ͞Ε·ͨ͠
࣌ͷ3ZBO%BIM
ϓϩάϨεόʔ
$POOFDUJPO͕ଟ͘ͳͬͯैདྷͷΞʔΩςΫνϟͰ·͔ͳ͖͑Εͳ͘ͳ͖ͬͯͨ
&WFOU-PPQ࣌ؒͷ͔͔Δ'JMF/FUXPSL*0ॲཧΛඇಉظʹͯ͠ɺෳͷଓΛҰͭͷεϨουͰ͏Ϟσϧ
3ZBO%BIM͕࠷ॳʹ࡞ͬͨ&WFOU-PPQϞσϧͷͻͳܗ$ݴޠͰ6OJYPOMZTVQQPSU
MJCFCCΛ࡞ͬͨܦݧΛݩʹ3ZBO%BIMޙʹ/PEFKTͰɺMJCFWMJCFJPΛ࠾༻ɺޙʹ8JOEPXTରԠΛࢦͯ͠ɺMJCVWΛ։ൃɺϚϧνϓϥοτϑΥʔϜͰߴͳඇಉظ*0͕࣮ݱ͞ΕΔ
/PEFQSPKFDU࢝ಈ 3ZBOͱ5JN
͜͏͍͏ײ͡Ͱಈ͔͍ͨ͠ͱ͢ΔͷϝʔϧͷΓऔΓ͕͍ͬͯΔɻ
࠷ॳOFUW͍ͬͯ͏໊લͩͬͨΒ͍͠
OFUW͔ΒOPEF͍ͬͯ͏໊લʹมΘΔɻ
͔ͯ͘͠/PEFKTੜ
Joyent ͱ Node
2001 2008 2009 2010 2011 2012 2015ʙ/PEFVOEFSUIF+PZFOU`TSPPG
/PEFKTͷ1BB4ίϯαϧମ੍Λ࡞Δ'VMMUJNFDPNNJUͷମ੍͕ඞཁɻ
+PZFOUͷैۀһͱͯ͠ϑϧλΠϜίϛοτମ੍͕Ͱ͖Δɻ
BDFL༏͍͠ऴͷಠࡋऀϞσϧ
#%'-جຊతʹҰਓͷϦʔμʔ͕ݖརΛ࣋ͬͯػೳࡦఆJTTVFཧΛ͢ΔϞσϧ1FSMͷ-BSSZ8BMMɺ3VCZͷ.BU[
ഁյͱ• API͕͔ͳΓਂࠁʹมΘΔ• ύονϨϕϧͷόʔδϣϯΞοϓͰಈ͔ͳ͘ͳΔ• Ϟδϡʔϧ໊҆ఆ͠ͳ͍(‘sys’ Ϟδϡʔϧ ‘util’ ϞδϡʔϧͳͲ)• ৽ػೳՃ༧ࠂ isolates• v0.7ͰεϨου͑ΔΑ͏ʹ͢ΔΑʔ• ͬͺΓΊʔʂ
_:(´ཀ`ʯ ∠):_ৼΓճ͞ΕΔ/PEFKT%FWFMPQFST
2001 2008 2009 2010 2011 2012 2015ʙ3ZBOTUFQTBXBZGSPN#%'-
3ZBO%BIM*TBBDT4DIMVFUFSʹϦʔμʔ͕มߋ
3ZBO%BIM*TBBDT4DIMVFUFSʹϦʔμʔ͕มߋ͏ݚڀϑΣʔζ ഁյͱϑΣʔεऴ͑ͨ͠ɺ͜Ε͔Β҆ఆͱ৴པΛٻΊͯϦʔμʔΛม͑Δ4USFBNपΓͱ͔ΤϥʔϋϯυϦϯάपΓͰΓ͍ͨࣄ͕·ͩ·ͩ͋ΔΜͰϦʔμʔΓ·͢ɻ
2001 2008 2009 2010 2011 2012 2014*TBBDTTUFQTBXBZGSPN#%'-
*TBBDT4DIMVFUFS5+'POUBJOFʹϦʔμʔ͕มߋ ࡾ
OQNձࣾʹ͢Δ͠ɺ/PEFͷϦʔμʔͰ͖ͳ͍Θɺɺɺ*TBBDT4DIMVFUFS5+'POUBJOFʹϦʔμʔ͕มߋ ࡾWΛग़͢ʂʂ
ઌൃதܧ͗͑
Present Node.js
2001 2008 2009 2010 2011 2012 2015ʙ/PEFKTීٴظ
2012 ʙ 2014 Node.jsීٴظ
socket.io ͷීٴʹΑΔϦΞϧλΠϜΞϓϦͷ૿Ճ
FrontEnd tools(Grunt Gulp Yeoman)
Desktop Application
AWS Lambda
Tessel(IoT)
ຊʹ৭ʑΘΕΔΑ͏ʹͳͬͨʢओʹΠϕϯτۦಈͰಈ࡞͢Δͷʣ
ͨͩ͠ɺ͜ͷลΓ͔Β։ൃऀؒͷߔ͕ੜ·Ε࢝ΊΔɻ
҆ఆΛٻΊΔ։ൃऀvscutting edge ΛٻΊΔ։ൃऀ
EnterpriseͰͷ׆༻
Node.js ίΞʹٻΊΔͷ͕૿͖͑ͯͨɻ4UBCJMJUZ&4&BTZ&SSPS)BOEMF4QFFEJTPNPSQIJD
2014͔ΒίΞͷ։ൃ͕ఀ͢Δɻ
ϦϦʔεεέδϡʔϧͷෆಁ໌issue/featureཧ͕Ͱ͖ͯͳ͍
͜ͷ··ͰͩΊͩ…
3Q2014/PEF'PSXBSE1SPKFDU͕ൃ4Q20141Q20152Q20153Q20152012
/PEFKTΛਪ͠ਐΊΔ͘ɺ/PEF'PSXBSEͱ͍͏ஂମ͕Ͱ͖Δɻ#%'-Node.js Node Forward
తఀ͔Βͷ٫
3Q2014/PEFKTͷGPSLͰ͋ΔJPKT͕ϦϦʔε͞ΕΔ4Q20141Q20152Q20153Q20152012
/PEF'PSXBSE͕/PEFKTΛGPSLͯ͠JPKTΛϦϦʔε#%'-Node.js io.js
io.js v1.0 release2015 1݄13※ݸਓతʹio.jsͷཚͱ໊͚͍ͮͨ
Node.jsͱͷҧ͍Կ͔
BDFLϞσϧ͔Βͷ٫
JPKTʹϦʔμʔډͳ͍ɻ#%'-Node.js io.js
ϦʔμʔෆࡏͰͲ͏ͬͯػೳissueΛཧ͢Δͷ͔
io.js rules5FDIOJDBM$PNNJUUFF8PSLJOH(SPVQ4FNBOUJD7FSTJPOJOH
Technical Committee
Technical CommitteeϦʔμʔډͳ͍͕ɺίΞϝϯόʔͰߏ͞Εٕͨज़ҕһձ͋Δɻ(16໊)
Technical Committee͜ͷҕһձͷதͰػೳissueΛϋϯυϦϯά͍ͯ͘͠ɻݴͬͯΈΕࠃձΈ͍ͨͳͷɻ
CollaboratorTSCͷϝϯόʔͱҰॹʹ࣮ࡍʹίʔυΛฤूमਖ਼ɺػೳ֦ு͍ͯ͘͠ਓୡ(40໊΄Ͳ)
Working Group
Working Groupio.jsʹ20ݸۙ͘Working Group͕͋ΔɻEvangelism, Website, benchmark, build, etc.website build Evangelism
Working Group͜ͷWorking Group͕֤ʑͷతʹ߹Θ࣮ͤͯࡍͷ࡞ۀΛ׆ಈ͍ͯ͘͠ɻݴΘֳɻwebsite build EvangelismNF
Semantic Versioning
Semantic Versioningmajor.minor.patch
Semantic Versioningmajor.minor.patchNBKPSόʔδϣϯ͕มΘΔ"1*ͷޓ่͕ΕΔɻNJOPSόʔδϣϯ͕มΘΔػೳ͕Ճ͞ΕΔɻQBUDIόʔδϣϯ͕มΘΔόά͕मਖ਼͞ΕΔɻ
Semantic Versioningmajor.minor.patchNBKPSόʔδϣϯ͕มΘΔ"1*ͷޓ่͕ΕΔɻNJOPSόʔδϣϯ͕มΘΔػೳ͕Ճ͞ΕΔɻQBUDIόʔδϣϯ͕มΘΔόά͕मਖ਼͞ΕΔɻ͜ͷSemantic Versioning ʹԊͬͯόʔδϣϯཧ͞ΕΔɻ
Semantic Versioningmajor.minor.patchNBKPSόʔδϣϯ͕มΘΔ"1*ͷޓ่͕ΕΔɻAPIޓ͕յΕΔͱmajor όʔδϣϯ͕มΘΔͨΊɺޓΛյ͍ͯ͠ͳ͍͔࠷৽ͷҙΛͬͯνΣοΫ͞ΕΔɻݴΘݑ๏ͷΑ͏ͳͷɻ
io.js rules5FDIOJDBM$PNNJUUFF8PSLJOH(SPVQ4FNBOUJD7FSTJPOJOHࠃձ๏JTTVFGFBUVSFΛϋϯυϦϯά͢Δֳɺ࣮ࡍͷ࡞ۀΛ࣮ࢪࠃձʹ๏ҊΛఏग़͢Δݑ๏˞ͨ·ʹ֦େղऍ͋ΔॴࣅͯΔɻ
io.js rules5FDIOJDBM$PNNJUUFF8PSLJOH(SPVQ4FNBOUJD7FSTJPOJOHࠃձ๏JTTVFGFBUVSFΛϋϯυϦϯά͢Δֳɺ࣮ࡍͷ࡞ۀΛ࣮ࢪࠃձʹ๏ҊΛఏग़͢Δݑ๏˞ͨ·ʹ֦େղऍ͋ΔॴࣅͯΔɻʊਓਓਓਓਓਓਓਓਓਓʊʼɹ·͞ʹΨόϝϯτɹʻʉY^Y^Y^Y^Y^Y^Y^Y^Yʉ
ΦʔϓϯΨόφϯεϞσϧ
ຖिϛʔςΟϯά͕։࠵͞Εɺݱࡏio.jsͰԿ͕ٞ͞ΕͯΔͷ͔ΦʔϓϯʹͳΔΈɻ
ٞࣄΛgithubͰཧͯ͠ެ։͢Δ͜ͱͰnon-nativeʹ͍͞͠
io.jsnode.jsͷforkɺͦͯ͠ΦʔϓϯΨόφϯεϞσϧΛ࠾༻͢Δ͜ͱͰಁ໌ੑͷ֬อͱίϯτϦϏϡʔτͷෑډΛԼ͛ΔޮՌɺBDFLͷΘΓΛૂ͍ͬͯΔɻ
1/13ʹv1.0ϦϦʔε͞Ε͔ͯΒطʹ7ϲ݄Ͱ ࠓv3.1.0͕ϦϦʔε͞ΕͯΔɻϦϦʔεස্͕͕Γྑ͍ʹɻNode.js io.js
৽͍͠ίϛολʔੜ·Ε͓ͯΓɺྑ͍ࡉ๔॥͕Ͱ͖͖͍ͯͯΔɻ
Future Node.js
The Future of Node = io.js
Node Foundation5FDIOJDBM$PNNJUUFF8PSLJOH(SPVQ4FNBOUJD7FSTJPOJOH/PEF'PVOEBUJPO֤छ8(5$ͷࡒݯΛ֬อ͢Δॴ$*ͷϗεςΟϯάͩͬͨΓɺ$PMMBCPSBUPSͷߤඅͩͬͨΓͱ͍͏ίϛολʔࢧԉɻ
Node Foundation5FDIOJDBM$PNNJUUFF8PSLJOH(SPVQ4FNBOUJD7FSTJPOJOH/PEF'PVOEBUJPO'VMMUJNFDPNNJUUFSͷඞཁ͕͋Ε͔͜͜Βڅྉ͕ग़ΔܗʹͳΔɻ
Long Term Support
Long Term Support)BDLFS͚Ұൠ͚
Long Term Support&OUFSQSJTF͚&OUFSQSJTF͚
Node.js v4.0 features&4DPNQBUVQ4JNQMF4USFBN4USPOH4DSJQUJNQSPWFQFSGJNQSPWFEFCVHHBCJMJUZ
Node.js v4.0 will be released inSeptember (or October)
·ͱΊ
·ͱΊ• Ͳ͏ͯ͜͠͏ͳͬͨʁ• NodeίΞͷཁٻͷଟ͞• BDFLϞσϧͷมԽ• ࠓޙͲ͏ͳΔʁ• Technical CommitteeʹΑΔཧ• Working GroupͰͷؔΘΓ• LTSͱnext/master ʹΑΔ҆ఆੑ
Free Talk
timemaster brunchv0.10v0.12v4.xnext brunchio.js v1.xio.js v3.x