Shibuya.ex #1 での発表資料です
&MJYJS͝հ/BPZB*UP,BJ[FO1MBUGPSN *OD4IJCVZBFY
View Slide
͜Μʹͪɺ೦ͳຊͷ8FCٕज़ऀͰ͢
ΞδΣϯμ• ͢͜ͱ– &MJYJSͷͬ͘͟Γಛ– ݴޠతͳػೳ– 051पΓͷ֓ཁ• ͞ͳ͍͜ͱ– ࡉ͔͍γϯλοΫεŋŋŋࢀߟࢿྉΛͲ͏ͧ
&MJYJSɺͬ͘͟Γಛ
&MJYJS• &SMBOH7.ͷ্Ͱಈ͘• ಈతܕ͚ͳؔܕݴޠ• ͜ͳΕͨύοέʔδཧγεςϜ.JY• ܰྔϓϩηεɺΞΫλʔʹΑΔฒߦॲཧ• 051
3VCZ • Ұݟ͢Δͱ3VCZͬΆ͍• ࣮ࡍͦΕ΄Ͳ3VCZͬΆ͘ͳ͍• Ή͠Ζ&SMBOH051– γϯλοΫε͕ೃછΈ͍͢&SMBOH051ͱଊ͑ͨ΄͏͕ྑ͍
ͳͥ&MJYJS • ϥϯλΠϜ͕ڧྗ– ΞΫλʔϞσϧʹΑΔฒߦॲཧج൫ΛݴޠϥϯλΠϜͰඪ४ࡌͱ͍͏Θ͚Ͱɺॏཁͳͷ3VCZΈ͍ͨdͰͳ͘ɺ&SMBOH051ͷ্ʹͬͯΔͬͯͱ͜
ؔܕݴޠͱͯ͠ͷ&MJYJS
ಈతܕ͚ͷؔܕݴޠ
ؔܕݴޠͱͯ͠ͷ&MJYJS• ୈҰڃؔɺߴ֊ؔ• ύλʔϯϚον• ෆมͳσʔλܕ• ࠶ؼ ඌݺͼग़͠࠷దԽ͋Γ
ͳ͍ͷ• Ͱͳ͍– ੩తܕ͚– ७ਮؔܕ ෭࡞༻͋Γ– ෦ద༻ΧϦʔԽ– 0QUJPOܕ .BZCF• ͋ΔΑ– Ϧετแදه– ԆධՁɺແݶϦετ ˞ݴޠશମͰͳ͍
ύλʔϯϚον• &MJYJSͷจ๏ͷجૅʹͳͬͯΔػೳ– ؔܕݴޠͰ݁ߏΈΔŋŋŋ)BTLFMMͱ͔– JGจͳͲΛΘͳ͍એݴతͳهड़ʹߩݙ• ͷύλʔϯΛهड़͠ɺͱর߹͢Δ– ύλʔϯͱ͕Ϛονͨ͠ΒɺԿ͕͔͕͠ߦΘΕΔ– ࣮ύλʔϯϚονԋࢉࢠ
ύλʔϯϚονh"p://www.slideshare.net/Joe_noh/elixir-‐01
ύλʔϯϚονεςʔλείʔυͷͱ͖͚͕ͩؔݺΕΔ͕͜ͷߏΛؚΉͱ͖͚ͩݺΕΔɻ·ͨɺߏͷ͕XFBUIFSมΛଋറ
ύλʔϯϚον࠶ؼϦετ͕ۭͷͱ͖ఀࢭ݅Ϧετͷઌ಄ཁૉ͕@IFBEΛଋറɺΓ͕UBJMΛଋറ
ύλʔϯϚονͷϢʔεέʔε• มଋറ• σʔλߏͷղ• Ϧετॲཧ X࠶ؼ• DBTFจ• ύλʔϯຖͷؔఆٛ– ʹΑΔؔͷબ
cŋŋŋύΠϓϥΠϯԋࢉࢠؔͷΓΛɺ࣍ͷୈҰҾʹ͢ɻ'ΠϯεύΠΞΒ͍ؔ͠Λܨ͛ͯॻ͚ͯؾ͍͍࣋ͪ
খ͞ͳؔΛύΠϓϥΠϯͰܨ͍͛ͯ͘ͷ͕&MJYJSྲྀ͏ʔΉɺ.BZCFཉ͍͠ŋŋŋ
ෆมͳσʔλܕ• σʔλܕෆม– 4USJOH -JTU 5VQMF .BQ )BTI%JDU )BTI4FU• ཁ͢Δʹഁյతૢ࡞͕ෆՄೳ͚ͬͯͩ• dict2 = Dict.put(dict, :foo, 3) – dict ෆมɺߋ৽͞Εͨ dict2
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
Ϧετแදه• )BTLFMMͰ͓ͳ͡Έͷ– [x | x • &MJYJSͰ– for x ਖ਼͜Εʹؔͯ͠&SMBOHͦͷ··Ͱྑ͔ͬͨͷͰŋŋŋ ݸਓͷײ
ϐλΰϥεΛ୳͢"#$Λຬͨ͢" # $ͷͷΛݟ͚ͭΔ
4USFBN• ߹ՄೳͰԆධՁͳ&OVNFSBCMFT– &OVN(SFFEZ– 4USFBN-B[Z• ແݶϦετԆධՁ͕ཉ͍͠ͱ͖͜Ε
3BOHFΛ4USFBNʹมɺύΠϓϥΠϯԋࢉࢠͰpMUFSͱNBQΛ߹UBLF ͨ͠ͱ͜ΖͰॳΊͯධՁˠ݅ͷΈܭࢉԆධՁ
ϑΟϘφονετϦʔϜ4USFBNVOGPMEΞΩϡϜϨʔλʹܭࢉ݁ՌΛੵΜͰ࠶ؼతʹؔΛద༻&OVNUBLF ͨ͠ͱ͜ΖͰॳΊͯܭࢉ
ϙϦϞʔϑΟζϜ• ϙϦϞʔϑΟζϜͷ࣮ݱ– +BWBŋŋŋΠϯλϑΣʔεͳͲͷ্ҐͷܕͰ– 3VCZŋŋŋμοΫλϐϯάͰ– )BTLFMMŋŋŋଟ૬ܕͰ– &MJYJSŋŋŋϓϩτίϧͰ
ϓϩτίϧҟͳΔσʔλܕʹಉ໊͡લͷؔΛద༻ɻܕʹԠͯ͡ৼΔ͍͕มΘΔ
ϓϩτίϧͷྑ͍ར༻ྫh"p://blog.drewolson.org/building-‐an-‐elixir-‐web-‐app/
&MJYJSΒ͍͠ίʔυ• ύλʔϯϚονΛੵۃతʹ͏• ෭࡞༻ՄೳͳΒආ͚Δ• &OVNͷؔΛΈ߹Θͤͯએݴతʹॻ͘• ύΠϓϥΠϯԋࢉࢠ|> ͍୯Ұͷׂͷখ͞ͳؔΛܨ͛Δ
&SMBOH051ͱ&MJYJS
&SMBOH7.ͷ্Ͱಈ͘BEAM (Erlang VM) OTP Elixir
ܰྔϓϩηε• &SMBOH7.ͷ࣮ߦίϯςΩετͷ୯Ґ– 04ͷϓϩηεͰͳ͍• ϓϩηεϫʔυఔɻܰྔ– ϊʔυͰඦʙઍϓϩηεͱ͔ฏؾͰ͍·͘Δ– ϓϩηεͰʙͱ͔ͦ͏͍͏ฉ͘
ܰྔϓϩηεͱฒߦ• ܰྔϓϩηε7.ͰεέδϡʔϦϯά͞Ε࣮ͯߦ͞ΕΔ• 7.εϨουϓʔϧ ͔֬Ͱ࣮͞Ε͍ͯΔ– ܰྔϓϩηεͰͷฒߦॲཧϚϧνίΞͰΛ͑Δ
ΞΫλʔϞσϧ• ϓϩηεؒ௨৴ϝοηʔδύογϯά– ϓϩηεͷதʹʮϝʔϧϘοΫεʯ• ͦ͜ʹϝοηʔδΛૹΔ TFOE• ϝοηʔδʹҙͷΛఴՄ– ϓϩηεͦΕΛड৴ͪ SFDFJWF– ඞͣίϐʔ͞ΕΔ ڞ༗͞Εͳ͍• σʔλΛڞ༗͠ͳ͍㱺ϩοΫ͕͍Βͳ͍
ΞΫλʔϞσϧ
051• ϓϩηεपΓͷඪ४ϥΠϒϥϦϑϨʔϜϫʔΫ܈• &SMBOHͷ࠷େͷࢿ࢈– ΞΫλʔϞσϧ&SMBOH051ͳͲଞݴޠେ͖ͳӨڹΛ༩͍͑ͯΔ• ྫ4DBMBͷ"LLB
051ϏϔΠϏΞ (FO4FSWFSܰྔϓϩηεʹύλʔϯϏϔΠϏΞʹ͔ͬΔ͚ͩͰαʔόΛ࡞ΕΔɻཁϑϨʔϜϫʔΫ
BTZODBXBJUͷཪͰΞΫλʔ͕ॲཧΛฒྻԽ͢Δ051ϏϔΠϏΞ 5BTL
4VQFSWJTPSSupervisor use GenServer ࢹʮಥવͷࢮʂʯϓϩηεࢮΜͩ͠ɺઓུʹ߹Θͤͯ࠶ىಈ͠ͱ͘Θcrash
-FUJUDSBTI• ࣦഊʹඋ͑ͳ͍ɻྫ֎Λั·͑ͳ͍• 4VQFSWJTPSͰࢹ͓͍ͯͯ͠ɺͦͷ··ى͜͢ͳΓύϥϝʔλม͑ͯϦτϥΠͤ͞ΔͳΓŋŋŋ
4VQFSWJTJPO5SFFh"p://qiita.com/[email protected]/items/ad18b49e9ed56a72cab6
ޠΓ͔͕ͨͬͨଟ͕࣌ؒͳ͍ʂ• ܰྔϓϩηεγεςϜͷ৭ΜͳσβΠϯͱ૬ޮՌΛಇ͔͍ͤͯΔΑ– ύλʔϯϚονͰએݴతʹؔΛબ͢Δ͜ͱͱ-FUJUDSBTI૬ੑ͕ྑ͍Α– ϓϩηεͷΞυϨεಁաੑ͕͋ͬͯɺଞͷϊʔυͷϝοηʔδύογϯάҰॹͩΑˠ؆୯ʹεέʔϧ͢ΔΑ– ܰྔϓϩηε୯ҐͰ($͢Δ͔ΒϝϞϦ͍Βͳ͘ͳͬͨΒϓϩηε͝ͱࣺͯΕྑ͍Α
3FBDUJWF3FBDUJWF.BOJGFTUP ϦΞΫςΟϒએݴh"p://www.reacUvemanifesto.org/ja
ΞΫλʔʹΑΔϝοηʔδύογϯά
4VQFSWJTJPO5SFF-FUJUDSBTI
ܰྔϓϩηεͷΞυϨεಁաੑ
&SMBOHͱͷ૬ޓޓੑ• &SMBOHͱ&MJYJS૬ޓޓ– &SMBOHͷϥΠϒϥϦΛ&MJYJSͰ͑Δ– &MJYJSͷΛ&SMBOHͰ͑Δ
΄͔
.JY)FY• Ϗϧυπʔϧύοέʔδཧ– 3VCZͷ#VOEMFSSVCZHFNT– /PEFKTͷOQN
IDDBXFTPNFFMJYJS• ϥΠϒϥϦͷϦϯΫू
%JBMZ[FSιʔεʹܕใΛΞϊςʔγϣϯ͠ͱ͘ͱ੩తܕνΣοΫͰ͖Δ
ϚΫϩ
&MJYJSೖιʔε ຊޠ• 8FC%#13&44WPM– IUUQHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM• [email protected]͞ΜͷεϥΠυू– [email protected]• (FUUJOH4UBSUFEͷ༁– [email protected]• 2JJUBr&MJYJS– IUUQTRJJUBDPNUBHTFMJYJS
&MJYJSຊ͓͢͢Ί
·ͱΊ• &MJYJS&SMBOH051ͱζο༑• ಈతܕ͚ͷؔܕݴޠ– ͱɺݴͬͯා͘ͳ͍– ύλʔϯϚονɺύΠϓϥΠϯԋࢉࢠɺ&OVN4USFBN• 051ͰΞΫλʔͳฒߦॲཧ• -FUJUDSBTI