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
次の10年のためにElixirをハックする
Search
Koutarou Chikuba
August 25, 2015
Technology
9
6k
次の10年のためにElixirをハックする
shibuya.ex#1での資料
Koutarou Chikuba
August 25, 2015
Tweet
Share
More Decks by Koutarou Chikuba
See All by Koutarou Chikuba
CI/CD 改善の勘所
mizchi
0
160
極限環境で最終ビルドを絞るためのフロントエンド設計
mizchi
16
5.9k
Server Side JavaScript のためのバンドル最適化
mizchi
5
7.6k
V8 as a container on CDN Edge worker
mizchi
6
2.4k
Edge Side Frontend という新領域
mizchi
35
14k
バンドル最適化マニアクス at tfconf
mizchi
8
4.6k
「たかがJavaScript」のその先 #TECHPLAY
mizchi
47
20k
Deno Node 両刀
mizchi
7
2.6k
「フロントエンド領域」を再定義する
mizchi
50
37k
Other Decks in Technology
See All in Technology
「静的解析」だけで終わらせない。 SonarQube の最新機能 × AIで エンジニアの開発生産性を本気で上げる方法
xibuka
2
270
Interop Tokyo 2025 ShowNet Team Memberで学んだSRv6を基礎から丁寧に
miyukichi_ospf
0
180
React 19時代のコンポーネント設計ベストプラクティス
uhyo
17
6.8k
Claude Codeで実践するスペック駆動開発入門 / sdd-with-claude_code
yoshidashingo
3
4.4k
AIに視覚を与えモバイルアプリケーション開発をより円滑に行う
lycorptech_jp
PRO
1
510
Scrum Fest Morioka 2026
kawaguti
PRO
2
600
「OSアップデート:年に一度の「大仕事」を乗り切るQA戦略」_Mobile Tech Flex 〜4社合同!私たちのモバイル開発自慢大会〜
gu3
0
220
1 年間の育休から時短勤務で復帰した私が、 AI を駆使して立ち上がりを早めた話
lycorptech_jp
PRO
0
150
AWS CDK の目玉新機能「Mixins」とは / cdk-mixins
gotok365
2
250
俺の失敗を乗り越えろ!メーカーの開発現場での失敗談と乗り越え方 ~ゆるゆるチームリーダー編~
spiddle
0
300
【Developers Summit 2026】Memory Is All You Need:コンテキストの「最適化」から「継続性」へ ~RAGを進化させるメモリエンジニアリングの最前線~
shisyu_gaku
5
700
歴史に敬意を! パラシュートVPoEが組織と共同で立ち上がる信頼醸成オンボーディング
go0517go
PRO
0
190
Featured
See All Featured
The Language of Interfaces
destraynor
162
26k
Docker and Python
trallard
47
3.7k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Navigating Team Friction
lara
192
16k
Balancing Empowerment & Direction
lara
5
920
Being A Developer After 40
akosma
91
590k
Facilitating Awesome Meetings
lara
57
6.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
A better future with KSS
kneath
240
18k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.7k
Into the Great Unknown - MozCon
thekraken
40
2.3k
Transcript
࣍ͷ10ͷҝʹElixirΛϋοΫ͢ Δ mizchi @Shibuya.ex #1
About ☞ ήʔϜձࣾ → ڭҭܥϕϯνϟʔ → Increments Inc(Qiita) ☞ JavaScript(Frontend/Node.js)
/ ͪΐͬͱRuby ☞ Kobito for Windows ϝΠϯ։ൃऀ ☞ ֶੜ࣌ʹҰਓͰMMOΈ͍ͨͳͷ࡞ͬͯͨ
@mizchiͷڵຯ ☞ WebSocketͷϦΞϧλΠϜॲཧʹڵຯ ☞ Erlang/Elixir͋Μ·ΓษڧͰ͖ͯͳ͍ ☞ ٕज़తʹத͕͋Δ͠ͳ͍(Ͱ͖ͳ͍)
ElixirͰҰൃ͍ͯͨ
ElixirͲ͏͍͏ݴޠ͔ ☞ จ๏RubyͰதErlang ☞ ৄ͘͠@naoya͞Μ͕ޠͬͯ͘ΕΔ(ͨ)Ͱ͠ΐ͏
͡Ίʹ
ੜଘઓུ ☞ ڈɺͲ͏ʹ͔ͯ͠ࣄͰReact.jsΛ͍͔ͨͬͨ ☞ ReactհهࣄΛॻ͖·ͬͨ͘ ☞ ΈΜͳགྷΕʙʙʙ
ޭͨ͠
ࠓ ☞ Elixir? ☞ ϦΞϧλΠϜΣϒͳ؍͔ΒElixir / Phoenix ʹ͍ͭͯ - Qiita
Λॻ͍ͨ ☞ ʮnaoya͞Μ, elixir·͍͍͢͡ΑʂΓ·͠ΐ͏Αʂʯͬͯݴ͍ ·ͬͨ͘ΒWeb+DbͰ࿈ࡌ࢝·ͬͨ
Ͱ·ͩϙςϯγϟϧʹ֬ূ͕ ͳ͍
ࠓԶʹ֬ূΛ͘Ε!!
ࣗͱElixirͷग़ձ͍ ☞ ࣌ͷಉ྅ͷ@udzura ͞Μʹ༠ΘΕͯୈҰճshinjuku.ex ʹࢀ Ճ ☞ http://d.hatena.ne.jp/mizchi/20120312/1331566107 ☞ StrangeLoop2014(ήςϞϊݴޠͷࡇయ)ͰଘࡏΛࢥ͍ग़͢
☞ "Elixir and the Internet of Things" by Doug Rohrer - YouTube ☞ ͳΜ͔1.0ग़ͯͨ ☞ Elixir v1.0 released - Elixir
Γ্͕ͬͯΔʁ ☞ HackerNewsํ໘Ͱݴٴ͕͍͢͝૿͑ͨ ☞ Ұൃͯͦ͏ͳؾ
ٱ͠ͿΓʹ৮ͬͯΈΔ ☞ γϯλοΫε(ද໘తʹ)͋Μ·ΓมΘͬͯͳ͍ ☞ ৽ଔ࣌Θ͔Βͳ͔ͬͨErlangͷϝϞϦϞσϧͷੌ͕͞ɺࠓ Θ͔ΔΑ͏ʹͳͬͨ ☞ ੲͳ͔ͬͨmix͍͢͝ศར ☞ mix࠷ߴͰ
͜͜ͰϞμϯͳݴޠΛৼΓฦΔ ☞ ruby / rubygems ☞ node / npm ☞
rust / cargo
Package Manager Is First Priority? ☞ ྲྀߦͬͯΔLL = ඞͣྑ͍ϑΝʔετͷύοέʔδϚωʔδϟ͕ ͋Δ
☞ ElixirύοέʔδϚωʔδϟ݉ϏϧυπʔϧͷͰάϯͱ ෑډԼ͖͛ͯͨ ☞ (ࠓ͔Βݴޠ࡞ͬͯҰൃ͍ͯͨਓύοέʔδϚωʔδϟ͔Β ࡞Δͱྑͦ͞͏)
ϦΞϧλΠϜΣϒ ☞ HTTP2 ☞ WebSocket ☞ WebRTC
WebSocketΛͱΓ·͘ݱঢ়: Ұੲલ ☞ Socket.IOҰ ☞ Socket.IOͷӢߦ͖͕ո͍͕࣌͋ͬͨ͠ ☞ 1͙Β͍ϝϯς͞Εͳ͔ͬͨ ☞ nodeͷӡ༻໘
☞ γϯάϧϧʔϓͷnodeͷରোੑׂͱ࠷ѱͷ෦ྨ
WebSocketΛͱΓ·͘ݱঢ়: ࠷ۙ ☞ WebSocketରԠϒϥβ͕૿͑ͨ ☞ ϑΥʔϧόοΫͷॏཁͷݮগ ☞ PaaSʹΑΔఏڙ ☞ Pusher
☞ Firebase
PaaSΛͬͨݱ࣮ ՝ۚϓϥϯͰ༻్੍͕ݶ͞ΕΔ
ୡ͍ͨ͠ ☞ ࣗલͰϨΠςϯγͰରোੑ͕ߴ͍(Web)Socket αʔόʔͷ ߏங͕؆୯ʹͳͬͯ΄͍͠ ☞ ͍ͭͰʹ Rails ͱ͔͍ͨ͠
ະདྷ? ☞ Ruby: rails/activecable ☞ Elixir: Phoenix/Channel
ϞμϯͳWAFʹٻΊΒΕΔͷ
ϞμϯͳHTML/SPAͷ෩ை ☞ ͏ೝূͱJSON API͚ͩͰΑ͘Ͷʁ ☞ Ή͠Ζଞͷػೳअຐ ☞ Google ͕ΫϩʔϧؤுΔ or
ΤϯδχΞ͕SSRؤுΕΫϥΠΞ ϯτ/αʔόʔͰςϯϓϨʔτ୯ҰԽՄೳ ☞ ςϯϓϨʔτʹ͍ͭͯγʔϜϨεͳ౷߹Λ͛͠Ε ͘͢͝ ͔͍͍ͬ͜ ؾ͕͢Δ
react-phoenix ☞ Λͭ͘Ζ͏ͱͨ͠ ☞ react-railsͷίʔυಡΜͰଞͷڥͰ࣮ݱͰ͖ͦ͏ͱ͍͏͜ͱ ͕Θ͔ͬͨ ☞ WIP
ʮ͋ͱͭ͘Δ͚ͩʂʯ {:ok, vm} = :erlang_v8.start_vm(file:"node_modules/react/dist/react.min.js") {:ok, ret}:erlang_v8.eval vm, "React.renderToString(React.createElement('div', {}))
# "<div data-reactid=\".3y56pmq0ow\" data-react-checksum=\"-75887465\"></div>"}
Elixirͷෆຬ ☞ 2015ʹ͍·͞Βܕ͕ͳ͍ݴޠΛֶͿͳΜͯײ ☞ ύλʔϯϚονͰ͋ΔఔϨίʔυΛ໌ࣔͰ͖Δ ☞ dialyzer Λ͏ / ref.
੩తܕνΣοΫπʔϧDialyzerΛElixir ͔Β͏ - Qiita ☞ Ҿ͕ҧ͏ɺͷ͋Δఔࣗ໌ͳͷ࣮ߦલʹ͍ͯΔ
dializerͷྫ defmodule Simple do @type atom_list :: list(atom) @spec count_atoms(atom_list)
:: non_neg_integer def count_atoms(list) do # ... end end
Elixirʹղܾͯ͠ཉ͍͠ ☞ ϦΞϧλΠϜΣϒ௨৴ස͕ߴ͍ ☞ σουϙΠϯτΛ౿ΉՄೳੑ͕ߴ͍ => Let it crash ͨ͠͞
☞ খ͞ͳύέοτɾϓϩηε͕େྔʹඈͼަ͏ ☞ GCηϯγςΟϒ => ErlangVMͰղܾ͍ͨ͠
ຊԻ ☞ ͭ·Βͳ͍ݴޠͰফͨ͘͠ͳ͍ ☞ ElixirΈ͍ͨͳ໘നػೳੵΜͩݴޠྲྀߦͬͯ͘Ε
ׂΓΓ ☞ Erlang ݁ہ Network DSL ݴޠͱׂͯ͠Γͬͨํ͕ྑ͍(by @volutans) ☞
ಘҙͳ͜ͱѹతʹಘҙ͕ͩͦΕҎ֎ผʹ… ☞ CPUϔϰΟͳϓϩάϥϜ͕ૣ͘ͳΔΘ͚Ͱͳ͍
(͕)ษڧʹͳͬͨࢿྉ node.js vs Erlang (ωλ) - kuenishi's blog
͓ΘΓ