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
IBM Bobを使って、PostgreSQLのToDoアプリをDb2へ変換してみよう/202603_Dojo_Bob
mayumihirano
1
320
ランサムウエア対策してますか?やられた時の対策は本当にできてますか?AWSでのリスク分析と対応フローの泥臭いお話。
hootaki
0
110
類似画像検索モデルの開発ノウハウ
lycorptech_jp
PRO
5
1.1k
Kubernetesにおける推論基盤
ry
1
320
AWS DevOps Agent vs SRE俺 / AWS DevOps Agent vs me, the SRE
sms_tech
3
550
Abuse report だけじゃない。AWS から緊急連絡が来る状況とは?昨今の攻撃や被害の事例の紹介と備えておきたい考え方について
kazzpapa3
1
540
AIエージェント、 社内展開の前に知っておきたいこと
oracle4engineer
PRO
2
110
白金鉱業Meetup_Vol.22_Orbital Senseを支える衛星画像のマルチモーダルエンベディングと地理空間のあいまい検索技術
brainpadpr
2
290
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
8
7.2k
作りっぱなしで終わらせない! 価値を出し続ける AI エージェントのための「信頼性」設計 / Designing Reliability for AI Agents that Deliver Continuous Value
aoto
PRO
2
280
GitLab Duo Agent Platform + Local LLMサービングで幸せになりたい
jyoshise
0
290
Dr. Werner Vogelsの14年のキーノートから紐解くエンジニアリング組織への処方箋@JAWS DAYS 2026
p0n
1
130
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
170
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Facilitating Awesome Meetings
lara
57
6.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
470
The Art of Programming - Codeland 2020
erikaheidi
57
14k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.4k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
120
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
450
The Curse of the Amulet
leimatthew05
1
9.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
140
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
͓ΘΓ