Elixir ご紹介

B4afc7d853d7f1cb6a253d3c7183c05a?s=47 Naoya Ito
August 25, 2015

Elixir ご紹介

Shibuya.ex #1 での発表資料です

B4afc7d853d7f1cb6a253d3c7183c05a?s=128

Naoya Ito

August 25, 2015
Tweet

Transcript

  1. &MJYJS͝঺հ /BPZB*UP ,BJ[FO1MBUGPSN *OD  4IJCVZBFY

  2. ͜Μʹͪ͸ɺ࢒೦ͳ ೔ຊͷ8FCٕज़ऀͰ͢

  3. ΞδΣϯμ •  ࿩͢͜ͱ – &MJYJSͷͬ͘͟Γಛ௃ – ݴޠతͳػೳ – 051पΓͷ֓ཁ •  ࿩͞ͳ͍͜ͱ – ࡉ͔͍γϯλοΫεŋŋŋࢀߟࢿྉΛͲ͏ͧ

  4. &MJYJSɺͬ͘͟Γಛ௃

  5. &MJYJS •  &SMBOH7.ͷ্Ͱಈ͘ •  ಈతܕ෇͚ͳؔ਺ܕݴޠ •  ͜ͳΕͨύοέʔδ؅ཧγεςϜ.JY •  ܰྔϓϩηεɺΞΫλʔʹΑΔฒߦॲཧ • 

    051
  6. None
  7. 3VCZ  •  Ұݟ͢Δͱ3VCZͬΆ͍ •  ࣮ࡍͦΕ΄Ͳ3VCZͬΆ͘ͳ͍ •  Ή͠Ζ&SMBOH051 – γϯλοΫε͕ೃછΈ΍͍͢&SMBOH051 ͱଊ͑ͨ΄͏͕ྑ͍

  8. ͳͥ&MJYJS  •  ϥϯλΠϜ͕ڧྗ – ΞΫλʔϞσϧʹΑΔฒߦॲཧج൫Λݴޠ  ϥϯλΠϜͰඪ४౥ࡌ ͱ͍͏Θ͚Ͱɺॏཁͳͷ͸ 3VCZΈ͍ͨdͰ͸ͳ͘ɺ &SMBOH051ͷ্ʹ৐ͬͯ

    Δͬͯͱ͜
  9. ؔ਺ܕݴޠͱͯ͠ͷ&MJYJS

  10. ಈతܕ෇͚ͷؔ਺ܕݴޠ

  11. None
  12. ؔ਺ܕݴޠͱͯ͠ͷ&MJYJS •  ୈҰڃؔ਺ɺߴ֊ؔ਺ •  ύλʔϯϚον •  ෆมͳσʔλܕ •  ࠶ؼ ຤ඌݺͼग़͠࠷దԽ͋Γ

    
  13. ͳ͍΋ͷ •  Ͱ͸ ͳ͍ – ੩తܕ෇͚ – ७ਮؔ਺ܕ ෭࡞༻͋Γ  – ෦෼ద༻ΧϦʔԽ – 0QUJPOܕ

    .BZCF  •  ͋ΔΑ – Ϧετ಺แදه – ஗ԆධՁɺແݶϦετ ˞ݴޠશମͰ͸ͳ͍ 
  14. ύλʔϯϚον •  &MJYJSͷจ๏ͷجૅʹͳͬͯΔػೳ – ؔ਺ܕݴޠͰ͸݁ߏΈΔŋŋŋ)BTLFMMͱ͔ – JGจͳͲΛ࢖Θͳ͍એݴతͳهड़ʹߩݙ •  ஋ͷύλʔϯΛهड़͠ɺ஋ͱর߹͢Δ – ύλʔϯͱ஋͕Ϛονͨ͠ΒɺԿ͕͔͕͠ߦ ΘΕΔ – ͸࣮͸ύλʔϯϚονԋࢉࢠ

  15. ύλʔϯϚον h"p://www.slideshare.net/Joe_noh/elixir-­‐01

  16. ύλʔϯϚον εςʔλείʔυͷ ͱ͖͚ͩؔ਺͕ݺ͹ΕΔ ஋͕͜ͷߏ଄ΛؚΉͱ͖͚ͩ ݺ͹ΕΔɻ·ͨɺߏ଄಺ͷ஋ ͕XFBUIFSม਺Λଋറ

  17. ύλʔϯϚον ࠶ؼ Ϧετ͕ۭͷͱ͖ ఀࢭ৚݅  Ϧετͷઌ಄ཁૉ͕@IFBE Λଋറɺ࢒Γ͕UBJMΛଋറ

  18. ύλʔϯϚονͷϢʔεέʔε •  ม਺ଋറ •  σʔλߏ଄ͷ෼ղ •  Ϧετॲཧ X࠶ؼ  • 

    DBTFจ •  ύλʔϯຖͷؔ਺ఆٛ – ஋ʹΑΔؔ਺ͷબ୒
  19. cŋŋŋύΠϓϥΠϯԋࢉࢠ ؔ਺ͷ໭Γ஋Λɺ࣍ͷୈҰҾ਺ʹ౉͢ɻ 'ΠϯεύΠΞΒ͍͠  ؔ਺Λܨ͛ͯॻ͚ͯ ؾ͍͍࣋ͪ

  20. খ͞ͳؔ਺ΛύΠϓϥΠϯ Ͱܨ͍͛ͯ͘ͷ͕&MJYJSྲྀ ͏ʔΉɺ.BZCFཉ͍͠ŋŋŋ 

  21. ෆมͳσʔλܕ •  σʔλܕ͸ෆม – 4USJOH -JTU 5VQMF .BQ )BTI%JDU  )BTI4FU

    •  ཁ͢Δʹഁյతૢ࡞͕ෆՄೳ͚ͬͯͩ •  dict2  =  Dict.put(dict,  :foo,  3)   – dict  ͸ෆมɺߋ৽͞Εͨ  dict2
  22. GPS XIJMF͕ͳ͍ •  ࠶ؼΛ࢖͏͔ ຤ඌݺͼग़͠࠷దԽ  •  ͞΋ͳ͘͹ϧʔΫɺ&OVNΛ࢖͑ iex>  [1,2,3]

     |>  Enum.each  fn(x)  -­‐>  IO.puts(x)  end   1   2   3   :ok     iex>  [1,2,3]  |>  Enum.reduce(0,  fn(x,  acc)  -­‐>  x  +  acc  end)   6
  23. Ϧετ಺แදه •  )BTLFMM౳Ͱ͓ͳ͡Έͷ – [x  |  x  <-­‐  xs,  x  <

     p]     •  &MJYJSͰ͸ – for  x  <-­‐  xs,  x  <  p,  do:  x   ਖ਼௚͜Εʹؔͯ͠͸ &SMBOHͦͷ··Ͱྑ͔ͬ ͨͷͰ͸ŋŋŋ ݸਓͷײ૝ 
  24. ϐλΰϥε਺Λ୳͢ " #$ Λຬͨ͢" # $ͷ੔਺ͷ ૊Λݟ͚ͭΔ

  25. 4USFBN •  ߹੒ՄೳͰ஗ԆධՁͳ&OVNFSBCMFT – &OVN͸(SFFEZ – 4USFBN͸-B[Z •  ແݶϦετ΍஗ԆධՁ͕ཉ͍͠ͱ͖͸͜ Ε

  26. 3BOHFΛ4USFBNʹม׵ɺ ύΠϓϥΠϯԋࢉࢠͰ pMUFSͱNBQΛ߹੒ UBLF  ͨ͠ͱ͜ΖͰॳΊͯ ධՁˠ݅ͷΈܭࢉ ஗ԆධՁ 

  27. ϑΟϘφονετϦʔϜ 4USFBNVOGPME͸ΞΩϡϜ Ϩʔλʹܭࢉ݁ՌΛੵΜͰ࠶ ؼతʹؔ਺Λద༻ &OVNUBLF  ͨ͠ͱ͜Ζ ͰॳΊͯܭࢉ

  28. ϙϦϞʔϑΟζϜ •  ϙϦϞʔϑΟζϜͷ࣮ݱ – +BWBŋŋŋΠϯλϑΣʔεͳͲͷ্ҐͷܕͰ – 3VCZŋŋŋμοΫλϐϯάͰ – )BTLFMMŋŋŋଟ૬ܕͰ – &MJYJSŋŋŋϓϩτίϧͰ

  29. ϓϩτίϧ ҟͳΔσʔλܕʹಉ໊͡લ ͷؔ਺Λద༻ɻܕʹԠͯ͡ ৼΔ෣͍͕มΘΔ

  30. ϓϩτίϧͷྑ͍ར༻ྫ h"p://blog.drewolson.org/building-­‐an-­‐elixir-­‐web-­‐app/

  31. &MJYJSΒ͍͠ίʔυ •  ύλʔϯϚονΛੵۃతʹ࢖͏ •  ෭࡞༻͸ՄೳͳΒආ͚Δ෼཭ •  &OVN౳ͷؔ਺Λ૊Έ߹Θͤͯએݴతʹ ॻ͘ •  ύΠϓϥΠϯԋࢉࢠ|>

     ࢖͍୯Ұͷ໾ׂ ͷখ͞ͳؔ਺Λܨ͛Δ  
  32. &SMBOH051ͱ&MJYJS

  33. &SMBOH7.ͷ্Ͱಈ͘ BEAM  (Erlang  VM) OTP Elixir

  34. ܰྔϓϩηε •  &SMBOH7.಺ͷ࣮ߦίϯςΩετͷ୯Ґ – 04ͷϓϩηεͰ͸ͳ͍ •  ϓϩηεϫʔυఔ౓ɻ௒ܰྔ – ϊʔυ಺Ͱ਺ඦʙ਺ઍϓϩηεͱ͔ฏؾͰ ࢖͍·͘Δ –  

    ϓϩηεͰʙͱ͔ͦ͏͍͏࿩΋ฉ ͘
  35. ܰྔϓϩηεͱฒߦ •  ܰྔϓϩηε͸7.ͰεέδϡʔϦϯά ͞Ε࣮ͯߦ͞ΕΔ •  7.͸εϨουϓʔϧ ͔֬ Ͱ࣮૷͞Ε ͍ͯΔ – ܰྔϓϩηεͰͷฒߦॲཧ͸ϚϧνίΞͰΛ

    ࢖͑Δ
  36. ΞΫλʔϞσϧ •  ϓϩηεؒ௨৴͸ϝοηʔδύογϯά – ϓϩηεͷதʹʮϝʔϧϘοΫεʯ •  ͦ͜ʹϝοηʔδΛૹΔ TFOE  •  ϝοηʔδʹ͸೚ҙͷ஋Λఴ෇Մ

    – ϓϩηε͸ͦΕΛड৴଴ͪ SFDFJWF  – ஋͸ඞͣίϐʔ͞ΕΔ ڞ༗͞Εͳ͍  •  σʔλΛڞ༗͠ͳ͍㱺ϩοΫ͕͍Βͳ͍
  37. ΞΫλʔϞσϧ

  38. None
  39. 051 •  ϓϩηεपΓͷඪ४ϥΠϒϥϦϑϨʔϜ ϫʔΫ܈ •  &SMBOHͷ࠷େͷࢿ࢈ – ΞΫλʔϞσϧ &SMBOH051͸ͳͲଞݴ ޠ΁େ͖ͳӨڹΛ༩͍͑ͯΔ • 

    ྫ4DBMBͷ"LLB
  40. 051ϏϔΠϏΞ (FO4FSWFS  ܰྔϓϩηεʹύλʔϯ ϏϔΠϏΞ ʹ৐͔ͬΔ ͚ͩͰαʔόΛ࡞ΕΔɻ ཁ͸ϑϨʔϜϫʔΫ 

  41. BTZODBXBJUͷཪͰ͸Ξ Ϋλʔ͕ॲཧΛฒྻԽ͢ Δ 051ϏϔΠϏΞ 5BTL 

  42. 4VQFSWJTPS Supervisor use   GenServer   ؂ࢹ ʮಥવͷࢮʂʯ ϓϩηεࢮΜͩ͠ɺઓུ ʹ߹Θͤͯ࠶ىಈ͠ͱ͘

    Θ crash
  43. -FUJUDSBTI •  ࣦഊʹඋ͑ͳ͍ɻྫ֎Λั·͑ͳ͍ •  4VQFSWJTPSͰ؂ࢹ͓͍ͯͯ͠ɺͦͷ· ·ى͜͢ͳΓύϥϝʔλม͑ͯϦτϥΠ͞ ͤΔͳΓŋŋŋ

  44. 4VQFSWJTJPO5SFF h"p://qiita.com/naoya@github/items/ad18b49e9ed56a72cab6

  45. ޠΓ͔͕ͨͬͨଟ෼͕࣌ؒͳ͍ʂ •  ܰྔϓϩηε͸γεςϜͷ৭ΜͳσβΠϯ ͱ૬৐ޮՌΛಇ͔͍ͤͯΔΑ – ύλʔϯϚονͰએݴతʹؔ਺Λબ୒͢Δ͜ ͱͱ-FUJUDSBTI͸૬ੑ͕ྑ͍Α – ϓϩηεͷΞυϨε͸ಁաੑ͕͋ͬͯɺଞͷ ϊʔυ΁ͷϝοηʔδύογϯά΋ҰॹͩΑ ˠ؆୯ʹεέʔϧ͢ΔΑ – ܰྔϓϩηε୯ҐͰ($͢Δ͔ΒϝϞϦ͍Β

    ͳ͘ͳͬͨΒϓϩηε͝ͱࣺͯΕ͹ྑ͍Α
  46. 3FBDUJWF 3FBDUJWF.BOJGFTUP ϦΞΫςΟϒએݴ  h"p://www.reacUvemanifesto.org/ja

  47. ΞΫλʔʹΑΔ ϝοηʔδύογϯά

  48. 4VQFSWJTJPO5SFF -FUJUDSBTI

  49. ܰྔϓϩηεͷ ΞυϨεಁաੑ

  50. &SMBOHͱͷ૬ޓޓ׵ੑ •  &SMBOHͱ&MJYJS͸૬ޓޓ׵ – &SMBOHͷϥΠϒϥϦΛ&MJYJSͰ࢖͑Δ – &MJYJSͷΛ&SMBOHͰ΋࢖͑Δ

  51. ΄͔

  52. .JY )FY •  Ϗϧυπʔϧύοέʔδ؅ཧ – 3VCZͷ#VOEMFS SVCZHFNT – /PEFKTͷOQN

  53. IDDBXFTPNFFMJYJS •  ϥΠϒϥϦͷϦϯΫू

  54. %JBMZ[FS ιʔεʹܕ৘ใΛΞϊςʔ γϣϯ͠ͱ͘ͱ ੩తܕνΣοΫ͸Ͱ͖Δ

  55. ϚΫϩ

  56. &MJYJSೖ໳ιʔε ೔ຊޠ  •  8FC %#13&44WPM –  IUUQHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM  • 

    +PF@OPI͞ΜͷεϥΠυू –  IUUQXXXTMJEFTIBSFOFU+PF@OPIQSFTFOUBUJPOT •  (FUUJOH4UBSUFEͷ຋༁ –  IUUQFMJYJSKBTFOBOFUXPSLTHFUUJOH@TUBSUFEIUNM •  2JJUBr&MJYJS –  IUUQTRJJUBDPNUBHTFMJYJS
  57. &MJYJSຊ͓͢͢Ί

  58. ·ͱΊ •  &MJYJS͸&SMBOH051ͱζο༑ •  ಈతܕ෇͚ͷؔ਺ܕݴޠ – ͱɺݴͬͯ΋ා͘ͳ͍ – ύλʔϯϚονɺύΠϓϥΠϯԋࢉࢠɺ &OVN4USFBN •  051ͰΞΫλʔͳฒߦॲཧ

    •  -FUJUDSBTI