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
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
17
5.6k
Functional TypeScript
naoya
15
6.2k
TypeScript 関数型スタイルでバックエンド開発のリアル
naoya
71
34k
シェルの履歴とイクンリメンタル検索を使う
naoya
8
3.2k
20230227-engineer-type-talk.pdf
naoya
89
76k
関数型プログラミングと型システムのメンタルモデル
naoya
62
100k
TypeScript による GraphQL バックエンド開発
naoya
28
35k
フロントエンドのパラダイムを参考にバックエンド開発を再考する / TypeScript による GraphQL バックエンド開発
naoya
67
24k
「問題から目を背けず取り組む」 一休の開発チームが6年間で学んだこと
naoya
144
60k
Other Decks in Technology
See All in Technology
クラウド開発の舞台裏とSRE文化の醸成 / SRE NEXT 2025 Lunch Session
kazeburo
1
580
shake-upを科学する
rsakata
7
1k
対話型音声AIアプリケーションの信頼性向上の取り組み
ivry_presentationmaterials
3
1k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
820
サイバーエージェントグループのSRE10年の歩みとAI時代の生存戦略
shotatsuge
4
1k
PHPからはじめるコンピュータアーキテクチャ / From Scripts to Silicon: A Journey Through the Layers of Computing
tomzoh
2
120
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
39k
20250708オープンエンドな探索と知識発見
sakana_ai
PRO
4
1k
ソフトウェアテストのAI活用_ver1.25
fumisuke
1
610
american aa airlines®️ USA Contact Numbers: Complete 2025 Support Guide
aaguide
0
500
伴走から自律へ: 形式知へと導くSREイネーブリングによる プロダクトチームの信頼性オーナーシップ向上 / SRE NEXT 2025
visional_engineering_and_design
3
460
Amazon SNSサブスクリプションの誤解除を防ぐ
y_sakata
3
190
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Raft: Consensus for Rubyists
vanstee
140
7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
282
13k
How GitHub (no longer) Works
holman
314
140k
GitHub's CSS Performance
jonrohan
1031
460k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Designing for humans not robots
tammielis
253
25k
The Cult of Friendly URLs
andyhume
79
6.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Language of Interfaces
destraynor
158
25k
GraphQLとの向き合い方2022年版
quramy
49
14k
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