Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elixir ご紹介
Search
Naoya Ito
August 25, 2015
Technology
42
11k
Elixir ご紹介
Shibuya.ex #1 での発表資料です
Naoya Ito
August 25, 2015
Tweet
Share
More Decks by Naoya Ito
See All by Naoya Ito
Functional TypeScript
naoya
14
5.8k
TypeScript 関数型スタイルでバックエンド開発のリアル
naoya
65
30k
シェルの履歴とイクンリメンタル検索を使う
naoya
8
3.1k
20230227-engineer-type-talk.pdf
naoya
89
72k
関数型プログラミングと型システムのメンタルモデル
naoya
62
94k
TypeScript による GraphQL バックエンド開発
naoya
28
31k
フロントエンドのパラダイムを参考にバックエンド開発を再考する / TypeScript による GraphQL バックエンド開発
naoya
67
24k
「問題から目を背けず取り組む」 一休の開発チームが6年間で学んだこと
naoya
144
58k
一休の現在と、ここまでの道のり
naoya
90
41k
Other Decks in Technology
See All in Technology
クラウドサービス事業者におけるOSS
tagomoris
3
960
依存パッケージの更新はコツコツが勝つコツ! / phpcon_nagoya2025
blue_goheimochi
3
180
転生CISOサバイバル・ガイド / CISO Career Transition Survival Guide
kanny
3
1.1k
Iceberg Meetup Japan #1 : Iceberg and Databricks
databricksjapan
0
200
次世代KYC活動報告 / 20250219-BizDay17-KYC-nextgen
oidfj
0
410
30分でわかる『アジャイルデータモデリング』
hanon52_
10
2.9k
表現を育てる
kiyou77
1
230
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready Name Tag Data with PHP
tomzoh
0
150
一度 Expo の採用を断念したけど、 再度 Expo の導入を検討している話
ichiki1023
1
240
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
2
370
開発組織のための セキュアコーディング研修の始め方
flatt_security
3
2.7k
Building Products in the LLM Era
ymatsuwitter
10
6.2k
Featured
See All Featured
For a Future-Friendly Web
brad_frost
176
9.5k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.4k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
Designing Experiences People Love
moore
140
23k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Bash Introduction
62gerente
611
210k
Adopting Sorbet at Scale
ufuk
74
9.2k
The Invisible Side of Design
smashingmag
299
50k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Optimizing for Happiness
mojombo
376
70k
Transcript
&MJYJS͝հ /BPZB*UP ,BJ[FO1MBUGPSN *OD 4IJCVZBFY
͜Μʹͪɺ೦ͳ ຊͷ8FCٕज़ऀͰ͢
ΞδΣϯμ • ͢͜ͱ – &MJYJSͷͬ͘͟Γಛ – ݴޠతͳػೳ – 051पΓͷ֓ཁ • ͞ͳ͍͜ͱ – ࡉ͔͍γϯλοΫεŋŋŋࢀߟࢿྉΛͲ͏ͧ
&MJYJSɺͬ͘͟Γಛ
&MJYJS • &SMBOH7.ͷ্Ͱಈ͘ • ಈతܕ͚ͳؔܕݴޠ • ͜ͳΕͨύοέʔδཧγεςϜ.JY • ܰྔϓϩηεɺΞΫλʔʹΑΔฒߦॲཧ •
051
None
3VCZ • Ұݟ͢Δͱ3VCZͬΆ͍ • ࣮ࡍͦΕ΄Ͳ3VCZͬΆ͘ͳ͍ • Ή͠Ζ&SMBOH051 – γϯλοΫε͕ೃછΈ͍͢&SMBOH051 ͱଊ͑ͨ΄͏͕ྑ͍
ͳͥ&MJYJS • ϥϯλΠϜ͕ڧྗ – ΞΫλʔϞσϧʹΑΔฒߦॲཧج൫Λݴޠ ϥϯλΠϜͰඪ४ࡌ ͱ͍͏Θ͚Ͱɺॏཁͳͷ 3VCZΈ͍ͨdͰͳ͘ɺ &SMBOH051ͷ্ʹͬͯ
Δͬͯͱ͜
ؔܕݴޠͱͯ͠ͷ&MJYJS
ಈతܕ͚ͷؔܕݴޠ
None
ؔܕݴޠͱͯ͠ͷ&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 <-‐ xs, x <
p] • &MJYJSͰ – for x <-‐ xs, x < p, do: 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 – ඞͣίϐʔ͞ΕΔ ڞ༗͞Εͳ͍ • σʔλΛڞ༗͠ͳ͍㱺ϩοΫ͕͍Βͳ͍
ΞΫλʔϞσϧ
None
051 • ϓϩηεपΓͷඪ४ϥΠϒϥϦϑϨʔϜ ϫʔΫ܈ • &SMBOHͷ࠷େͷࢿ࢈ – ΞΫλʔϞσϧ &SMBOH051ͳͲଞݴ ޠେ͖ͳӨڹΛ༩͍͑ͯΔ •
ྫ4DBMBͷ"LLB
051ϏϔΠϏΞ (FO4FSWFS ܰྔϓϩηεʹύλʔϯ ϏϔΠϏΞ ʹ͔ͬΔ ͚ͩͰαʔόΛ࡞ΕΔɻ ཁϑϨʔϜϫʔΫ
BTZODBXBJUͷཪͰΞ Ϋλʔ͕ॲཧΛฒྻԽ͢ Δ 051ϏϔΠϏΞ 5BTL
4VQFSWJTPS Supervisor use GenServer ࢹ ʮಥવͷࢮʂʯ ϓϩηεࢮΜͩ͠ɺઓུ ʹ߹Θͤͯ࠶ىಈ͠ͱ͘
Θ crash
-FUJUDSBTI • ࣦഊʹඋ͑ͳ͍ɻྫ֎Λั·͑ͳ͍ • 4VQFSWJTPSͰࢹ͓͍ͯͯ͠ɺͦͷ· ·ى͜͢ͳΓύϥϝʔλม͑ͯϦτϥΠ͞ ͤΔͳΓŋŋŋ
4VQFSWJTJPO5SFF h"p://qiita.com/naoya@github/items/ad18b49e9ed56a72cab6
ޠΓ͔͕ͨͬͨଟ͕࣌ؒͳ͍ʂ • ܰྔϓϩηεγεςϜͷ৭ΜͳσβΠϯ ͱ૬ޮՌΛಇ͔͍ͤͯΔΑ – ύλʔϯϚονͰએݴతʹؔΛબ͢Δ͜ ͱͱ-FUJUDSBTI૬ੑ͕ྑ͍Α – ϓϩηεͷΞυϨεಁաੑ͕͋ͬͯɺଞͷ ϊʔυͷϝοηʔδύογϯάҰॹͩΑ ˠ؆୯ʹεέʔϧ͢ΔΑ – ܰྔϓϩηε୯ҐͰ($͢Δ͔ΒϝϞϦ͍Β
ͳ͘ͳͬͨΒϓϩηε͝ͱࣺͯΕྑ͍Α
3FBDUJWF 3FBDUJWF.BOJGFTUP ϦΞΫςΟϒએݴ h"p://www.reacUvemanifesto.org/ja
ΞΫλʔʹΑΔ ϝοηʔδύογϯά
4VQFSWJTJPO5SFF -FUJUDSBTI
ܰྔϓϩηεͷ ΞυϨεಁաੑ
&SMBOHͱͷ૬ޓޓੑ • &SMBOHͱ&MJYJS૬ޓޓ – &SMBOHͷϥΠϒϥϦΛ&MJYJSͰ͑Δ – &MJYJSͷΛ&SMBOHͰ͑Δ
΄͔
.JY )FY • Ϗϧυπʔϧύοέʔδཧ – 3VCZͷ#VOEMFS SVCZHFNT – /PEFKTͷOQN
IDDBXFTPNFFMJYJS • ϥΠϒϥϦͷϦϯΫू
%JBMZ[FS ιʔεʹܕใΛΞϊςʔ γϣϯ͠ͱ͘ͱ ੩తܕνΣοΫͰ͖Δ
ϚΫϩ
&MJYJSೖιʔε ຊޠ • 8FC %#13&44WPM – IUUQHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM •
+PF@OPI͞ΜͷεϥΠυू – IUUQXXXTMJEFTIBSFOFU+PF@OPIQSFTFOUBUJPOT • (FUUJOH4UBSUFEͷ༁ – IUUQFMJYJSKBTFOBOFUXPSLTHFUUJOH@TUBSUFEIUNM • 2JJUBr&MJYJS – IUUQTRJJUBDPNUBHTFMJYJS
&MJYJSຊ͓͢͢Ί
·ͱΊ • &MJYJS&SMBOH051ͱζο༑ • ಈతܕ͚ͷؔܕݴޠ – ͱɺݴͬͯා͘ͳ͍ – ύλʔϯϚονɺύΠϓϥΠϯԋࢉࢠɺ &OVN4USFBN • 051ͰΞΫλʔͳฒߦॲཧ
• -FUJUDSBTI