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

モダンWebシステム開発

 モダンWebシステム開発

Qcon Tokyo2015 での発表スライド

Naoya Ito

April 21, 2015
Tweet

More Decks by Naoya Ito

Other Decks in Technology

Transcript

  1. Πϯϑϥ •  *OGSBTUSVDUVSFBT$PEF –  $IFG "OTJCMF •  *NNVUBCMF*OGSBTUSVDUVSF •  ίϯςφܕΫϥ΢υ

    –  %PDLFS •  એݴతͳγεςϜ؅ཧπʔϧ –  5FSSBGPSN 3PBEXPSLFS
  2. αʔόʔͷʮঢ়ଶʯ ґଘؔ܎  •  ͋Δ೔ೲ඼͞Εͨ3BJMTαʔόʔ –  9݄9೔ʹ%/4ΩϟογϡΛઃఆͨ͠ –  :݄:೔ʹϓϩηε਺Λνϡʔχϯάͨ͠ – 

    ;݄;೔ʹSVCZͷόʔδϣϯΛ্͛ͨ –  ŋŋŋ ͍Ζ͍Ζ܁Γฦ͠  •  ͜ͷαʔόʔʹ൒೥ৼΓʹΞϓϦΛσϓϩΠ –  Ռͨͯ͠σϓϩΠ͸ਖ਼͘͠ऴΘΔͷ͔
  3. 3PBEXPSLFS hosted_zone  "winebarrel.jp."  do      rrset  "winebarrel.jp.",  "A"  do

             ttl  300          resource_records(              "127.0.0.1",              "127.0.0.2"          )      end        rrset  "winebarrel.jp.",  "MX"  do          ttl  300          resource_records(              "10  mx.winebarrel.jp",              "10  mx2.winebarrel.jp"          )      end   end $  roadwork -­‐-­‐apply   %/4ϨίʔυΛએݴతʹ هड़
  4. 5FSSBGPSN resource  "aws_instance"  "dev001_foobar_net"  {          ami

                             =  "ami-­‐xxxxxxxx"          instance_type      =  "t2.micro"          key_name                =  "xxxxxxxxxxxxxxxx"          security_groups  =  ["sg-­‐xxxxxxxx"]          subnet_id              =  "subnet-­‐xxxxxxxx"          tags  {                  Name        =  "dev001.foobar.net"                  Role        =  "common"                  Service  =  "operator"                  Env          =  "dev"          }   } $  terraform apply   Πϯϑϥ Πϯελϯε΍ ωοτϫʔΫ ߏ੒Λએݴ తʹهड़
  5. ͳͥ.JDSPTFSWJDFT  •  ϞϊϦγοΫͰ௕͘΍ͬͯΔͱͭΒ͍ –  UZQP௚͢ͷʹશମϏϧυσϓϩΠ –  ͋ͦ͜มߋͨ͠Β༧૝֎ͷͱ͜Ζ͕յΕͨ –  "1*͚ͩεέʔϧ͍ͤͨ͞ͷʹશ෦ల։

    •  ಠཱͨ͠։ൃɾσϓϩΠαΠΫϧΛ֫ಘ͍ͨ͠ –  ૄ݁߹ –  ૊৫ͷಠཱੑΛߴΊΔ See  Also:  "Microservices"を読んだ   h:p://deeeet.com/wri6ng/2014/09/10/microservices/  
  6. એݴత  •  ໋ྩత –  $16ʹର͢Δ໋ྩͷखଓ͖Λॻ͘ –  ίϚϯυΛ༩͑Δ •  એݴత

    –  ࣮ݱ͍ͨ͜͠ͱͦͷ΋ͷΛهड़͢Δ –  ͋Δ΂͖ঢ়ଶΛఆٛɺؔ܎ੑͷهड़FUD see  also:  宣言的プログラミングの「宣言的」って?   h:p://d.hatena.ne.jp/sh-­‐2/20091006/1254847253 ΍΍ᐆດ͔ͭ૬ର తͳݴ༿Ͱ͸͋Δ ΋ͷͷ
  7. 3FBDU໋ྩతˠએݴత •  ໋ྩతͰ͋ͬͨ7JFXͷ૊Έཱͯ %0.ૢ࡞ Λɺ એݴతͳύϥμΠϜʹ •  ʮσʔλϞσϧʹมߋ͕͋ͬͨΒ%0.Λؙ͝ ͱߋ৽ʯ – 

    αʔόʔαΠυ೴ –  ඇޮ཰ͳ෦෼͸7JSUVBM%0.͕ղܾ ϑϩϯτΤϯυ6*։ൃΛɺ αʔόʔαΠυͱಉ͡෋ ߽తϓϩάϥϛϯάελ Πϧʹ໭͢
  8. 7JSUVBM%0. •  3FBDUͷόοΫΤϯυʹ͋Δ %0.ߏ଄Λந৅Խͨ͠σʔλ ߏ଄ •  σʔλϞσϧͷঢ়ଶมԽʹ߹Θ ͤͯ7JSUVBM%0.ͷલޙͷ EJ⒎Λࢉग़ • 

    ੜ%0.࠶ඳըΛࠩ෼ͷ͋ͬͨ Օॴ͚ͩߦ͏ source:  React’s  diff  algorithm   h:p://calendar.perfplanet.com/2013/diff/  
  9. 'MVY •  3FBDU͸7JFX͚ͩ •  'MVY͸Ϟσϧ 4UPSF ΛؚΊͨΞϓϦέʔ γϣϯશମͷΞʔΩςΫνϟ –  ॲཧͷهड़৔ॴΛఆΊΔ

    –  σʔλϑϩʔΛఆΊΔ •  Πϕϯτͷґଘؔ܎ͷෳࡶੑΛղফ –  Πϕϯτ΍σʔλϑϩʔͷํ޲ΛҰํ௨ߦʹ͢Δ
  10. ϦΞΫςΟϒϓϩάϥϛϯά •  ΋ͱ΋ͱ͸ҎԼͷΑ͏ͳ֓೦ –  σʔλͷྲྀΕΛ௨ͯ͡มߋΛ఻ൖ –  σʔλͷྲྀΕʹ൓Ԡ –  㱺ΠϕϯτۦಈɺΦϒβʔόʔɺ"DUPSɺ'VUVSF • 

    ޿ٛͷɺڱٛͷŋŋŋ͕͋Δ –  ֦େղऍ͠Α͏ͱ͢ΔͱͲ͜·Ͱ΋͍͚Δ ཁ஫ҙ  –  ݸਓతʹ͸'31ͷจ຺Ҏ֎Ͱ͸͋·Γݴٴ͠ͳ͍Α ͏ʹ͍ͯ͠Δ
  11. 1 1 1 1 -­‐1 -­‐1 1 1 1 1

    -­‐1 -­‐1 ;ͨͭͷΠϕϯτ͸ඇಉظʹࠞͬͯ͟ಧ͘΋ͷͰ͋Δ Ώ͑ʹೋͭͷετϦʔϜΛϚʔδ͢Δ
  12. 1 1 1 1 -­‐1 -­‐1 1 1 2 0

    1 2 Ϛʔδ͞ΕͨετϦʔϜΛɺҰͭલͷ஋ͱͷࢉज़݁Ռʹม׵
  13. 1 1 1 1 -­‐1 -­‐1 1 1 1 1

    -­‐1 -­‐1 plusStream.merge(minusStream)
  14. 1 1 1 1 -­‐1 -­‐1 1 1 2 0

    1 2 bothStream.scan(0,  (x  +  y)  =>  x  +  y)
  15. ࢥߟͷྲྀΕ •  ʮ࣌ؒͱڞʹมԽ͢Δ஋ͷσʔλܕ͕ཉ͍͠ʯ •  㱺ετϦʔϜΛಋೖ •  㱺Πϕϯτ΍ඇಉظॲཧ·ͰετϦʔϜʹ –  ʮ͋Εɺશ෦ετϦʔϜͰѻ͑Δ͡Όͳ͍ ʯ

    •  㱺શͯΛ౷Ұ͞ΕͨετϦʔϜͱ͍͏ΠϯλϑΣʔεͰ •  㱺ϦετΏ͑ʹؔ਺ܕͷΠσΟΦϜɺύϥμΠϜ –  ʮϦετૢ࡞Ͱ͢ΔͳΒؔ਺ܕ͕Ԡ༻Ͱ͖Δ͡Όͳ͍ʯ •  㱺෭࡞༻Λආ͚ͨએݴతͳهड़ •  㱺ࢀরಁ໌ঢ়ଶ؅ཧ͔Βͷղ์
  16. εέʔϥϒϧŋŋŋঢ়ଶΛͲ͏ѻ͏͔ •  എܠ –  ࣌୅ͷཁ੥ •  Ϋϥ΢υωΠςΟϒ •  ඇಉظͳΞϓϦέʔγϣϯ • 

    ࣌ؒͱڞʹԿ͔ͱෳࡶԽ͠΍͍͢8FCγεςϜ •  ࢧ഑తͳϑΝΫλʔঢ়ଶͷѻ͍ –  Ӆṭ –  એݴతʹهड़ –  *NNVUBCMF େن໛τϥϑΟοΫ ͔ͩΒɺͱ͍͏࿩ͩ ͚Ͱͳ͘ͳ͖ͬͯͯ Δ
  17. ·ͱΊ •  ۙ೥ݸਓతʹண໨ͨ͠τϨϯυΛΈͨ –  *OGSBTUSVDUVSFBT$PEF –  *NNVUBCMF*OGSBTUSVDUVSF –  .JDSPTFSWJDFT – 

    3FBDU –  3FBDUJWF1SPHSBNNJOH •  ෳࡶੑ΁ͷରࡦͱͯ͠ͷঢ়ଶ؅ཧख๏ʹύλʔ ϯ͕ݟ͍ͩͤΔ