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.8k
次の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
54
極限環境で最終ビルドを絞るためのフロントエンド設計
mizchi
15
5.2k
Server Side JavaScript のためのバンドル最適化
mizchi
5
6.9k
V8 as a container on CDN Edge worker
mizchi
6
2.1k
Edge Side Frontend という新領域
mizchi
35
14k
バンドル最適化マニアクス at tfconf
mizchi
7
4.3k
「たかがJavaScript」のその先 #TECHPLAY
mizchi
47
20k
Deno Node 両刀
mizchi
6
2.4k
「フロントエンド領域」を再定義する
mizchi
50
36k
Other Decks in Technology
See All in Technology
ソフトウェア開発におけるインターフェイスという考え方 / PHPerKaigi 2025
k1low
9
3.9k
Keynote - KCD Brazil - Platform Engineering on K8s (portuguese)
salaboy
0
120
ClineにNext.jsのプロジェクト改善をお願いしてみた / 20250321_reacttokyo_LT
optim
1
1.3k
パスキーでのログインを 実装してみよう!
hibiki_cube
0
670
AIエージェント完全に理解した
segavvy
4
260
ウェブアクセシビリティとは
lycorptech_jp
PRO
0
260
Agile TPIを活用した品質改善事例
tomasagi
0
310
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
2
220
BCMathを高速化した一部始終をC言語でガチ目に解説する / BCMath performance improvement explanation
sakitakamachi
2
1.2k
チームビルディング「脅威モデリング」ワークショップ
koheiyoshikawa
0
140
17年のQA経験が導いたスクラムマスターへの道 / 17 Years in QA to Scrum Master
toma_sm
0
400
Engineering Managementのグローバルトレンド #emoasis / Engineering Management Global Trend
kyonmm
PRO
6
990
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
6
320
Into the Great Unknown - MozCon
thekraken
36
1.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Automating Front-end Workflow
addyosmani
1369
200k
Scaling GitHub
holman
459
140k
Embracing the Ebb and Flow
colly
85
4.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
7
620
GitHub's CSS Performance
jonrohan
1030
460k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.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
͓ΘΓ