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
14
極限環境で最終ビルドを絞るためのフロントエンド設計
mizchi
15
5k
Server Side JavaScript のためのバンドル最適化
mizchi
5
6.8k
V8 as a container on CDN Edge worker
mizchi
6
2k
Edge Side Frontend という新領域
mizchi
34
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
AWSマルチアカウント統制環境のすゝめ / 20250115 Mitsutoshi Matsuo
shift_evolve
0
120
Copilotの力を実感!3ヶ月間の生成AI研修の試行錯誤&成功事例をご紹介。果たして得たものとは・・?
ktc_shiori
0
350
2025年の挑戦 コーポレートエンジニアの技術広報/techpr5
nishiuma
0
140
PaaSの歴史と、 アプリケーションプラットフォームのこれから
jacopen
7
1.5k
RubyでKubernetesプログラミング
sat
PRO
4
160
完全自律型AIエージェントとAgentic Workflow〜ワークフロー構築という現実解
pharma_x_tech
0
350
Kotlin Multiplatformのポテンシャル
recruitengineers
PRO
2
150
dbtを中心にして組織のアジリティとガバナンスのトレードオンを考えてみた
gappy50
0
270
デジタルアイデンティティ技術 認可・ID連携・認証 応用 / 20250114-OIDF-J-EduWG-TechSWG
oidfj
2
680
【JAWS-UG大阪 reInvent reCap LT大会 サンバが始まったら強制終了】“1分”で初めてのソロ参戦reInventを数字で振り返りながら反省する
ttelltte
0
140
コロプラのオンボーディングを採用から語りたい
colopl
5
1.3k
[IBM TechXchange Dojo]Watson Discoveryとwatsonx.aiでRAGを実現!座学①
siyuanzh09
0
110
Featured
See All Featured
Become a Pro
speakerdeck
PRO
26
5.1k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
GitHub's CSS Performance
jonrohan
1030
460k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Agile that works and the tools we love
rasmusluckow
328
21k
It's Worth the Effort
3n
183
28k
Designing for humans not robots
tammielis
250
25k
A Philosophy of Restraint
colly
203
16k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
570
Optimizing for Happiness
mojombo
376
70k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
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
͓ΘΓ