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
5.9k
次の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
140
極限環境で最終ビルドを絞るためのフロントエンド設計
mizchi
16
5.8k
Server Side JavaScript のためのバンドル最適化
mizchi
5
7.5k
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.5k
「フロントエンド領域」を再定義する
mizchi
50
37k
Other Decks in Technology
See All in Technology
First-Principles-of-Scrum
hiranabe
3
1.7k
Node vs Deno vs Bun 〜推しランタイムを見つけよう〜
kamekyame
1
390
「駆動」って言葉、なんかカッコイイ_Mitz
comucal
PRO
0
140
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
【Agentforce Hackathon Tokyo 2025 発表資料】みらいシフト:あなた働き方を、みらいへシフト。
kuratani
0
110
歴史から学ぶ、Goのメモリ管理基礎
logica0419
14
2.6k
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
410
Master Dataグループ紹介資料
sansan33
PRO
1
4.2k
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
3
320
AI に「学ばせ、調べさせ、作らせる」。Auth0 開発を加速させる7つの実践的アプローチ
scova0731
0
190
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
640
AWS re:Invent2025最新動向まとめ(NRIグループre:Cap 2025)
gamogamo
0
170
Featured
See All Featured
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
40
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
46
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
190
My Coaching Mixtape
mlcsv
0
23
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
74
Crafting Experiences
bethany
0
27
エンジニアに許された特別な時間の終わり
watany
106
220k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Producing Creativity
orderedlist
PRO
348
40k
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
͓ΘΓ