Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
A Tour of Elixir
Search
ponday
August 17, 2018
Programming
1
520
A Tour of Elixir
VEGA Tech Meetup #2(2018/08/17)発表資料です。
ponday
August 17, 2018
Tweet
Share
More Decks by ponday
See All by ponday
関数型でGoFのデザインパターンやってみる
honda
1
1.4k
TypeScriptの型表現
honda
10
3.1k
Web Componentsの今
honda
1
440
これまでのReact、これからのReact
honda
0
320
Gatsbyお試し
honda
0
120
styled-components or emotion?
honda
0
700
Web ComponentsとAngular
honda
0
140
Atomic Design周りについての私見
honda
1
750
え、まだWeb Componentsを未来の技術だと思ってるの?
honda
2
850
Other Decks in Programming
See All in Programming
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
120
sbt 2
xuwei_k
0
300
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
160
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
230
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
210
JETLS.jl ─ A New Language Server for Julia
abap34
1
420
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
120
AIコーディングエージェント(skywork)
kondai24
0
180
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
130
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
2.7k
これならできる!個人開発のすゝめ
tinykitten
PRO
0
110
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
100
Featured
See All Featured
Making Projects Easy
brettharned
120
6.5k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Mobile First: as difficult as doing things right
swwweet
225
10k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
The Pragmatic Product Professional
lauravandoore
37
7.1k
Done Done
chrislema
186
16k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Transcript
A Tour of Elixir VEGA Tech Meetup #2 / Aug
17th, 2018 ponday (@ponday_dev)
Profile - ponday (Honda, Yusuke) - 株式会社ベガコーポレーション エンジニア - Like
: TypeScript / Elixir / Python etc...
あらすじ Elixir採用に向けて技術検証中 新プロダクト作るぞ! Elixir試してみよう 負荷試験の成績がものすごい!! みんなもやろう! ← イマココ 前回Meetupより
今回は触ってみよう!編
・ 雰囲気を伝えるための超圧縮版です 詳しい内容は公式ドキュメントを参照願います ・ Elixirの機能を紹介するものでPhoenixの内容は 含みません ご注意
None
の前に
・ Prologライクな関数型言語 ・ 極めて高い信頼性(付属ライブラリ:99.9999999%) ・ 通信分野やゲームサーバでの採用実績 ・ Call of
Duty ・ League of Legends ・ WhatsApp Erlang
・ 軽量プロセス ・ 極めて小さなメモリ消費(300ワード) ・ μ秒レベルのプロセス起動時間 ・
2000万プロセスが実行できたというベンチマークもあるらしい ・ 優れた耐障害性 ・ エラーが起こればプロセスごとやり直す Erlang VM(BEAM)
・ 強い動的型付けの関数型言語 ・ Erlang VM上で動作(Erlangの利点がそのまま活かせる) ・ Rubyに影響を受けた柔軟な構文 ・ Railsに影響を受けたWAF(Phoenix)がある ・
他の言語出身者でも馴染みやすい(※個人的な意見です) Elixir
実行環境
・ ローカルにインストールする ・ Wandbox(https://wandbox.org/)を使う ・ Dockerイメージを利用する 実行環境 オススメ
Elixirのイメージが提供されているのでそれを使う Dockerによる環境構築 ↑は容量が大きいので小さいほうが良ければ以下
Elixir + Phoenix用リポジトリ https://github.com/ponday-dev/elixir-on-docker ・ MariaDBとつなげるdocker-compose.ymlまで ・ 使い方はREADMEを参照
Hello, World
Hello, World シンプル版 ・ 標準出力はIO.puts関数 ・ 文字列はダブルクォートで囲む (シングルクォートは意味が異なる)
Hello, World シンプル版 関数版(無名関数) ・ fn (引数) -> endで無名関数が作れる ・
無名関数の呼び出しは (関数名).(引数)
Hello, World モジュール版 ・ defmoduleでモジュールを定義 ・ クラスではない ・ モジュール内に関数を定義するときは
fnではなくdef ・ モジュールに属する関数呼び出しは (関数名)(引数)の形式で可
データ構造
・ 整数 / 浮動少数 ・ 真偽値(true / false) ・ 文字列(バイナリ)
・ アトム(Rubyでいうシンボル) ・ nil(※データ型ではない) 基本データ型
・ リスト ・ タプル ・ キーワード付きリスト ・ マップ コレクション
・ 普通の配列 ・ 順序は保証されている リスト
・ メモリ上に連続して格納される ・ サイズ取得は高速、修正は低速 タプル
・ アトムと値のタプルで構成されたリスト ・ 順序は保証されている キーワード付きリスト
・ いわゆる連想配列 マップ
パターンマッチ
・ 値やデータ構造をマッチング(≠ 正規表現) ・ = は代入ではなくパターンマッチ演算子 ・ 制御構文、関数呼び出しなど色々な場面で使える パターンマッチ
・ 左辺に変数が来る場合は代入操作 ・ 再代入も可能 パターンマッチ(基本)
・ コレクションの構造に対してもマッチ可能 パターンマッチ(コレクション)
・ コレクションの構造に対してもマッチ可能 パターンマッチ(マップ)
制御構造
・ 条件が一つだけの条件分岐(else ifがない) ・ 三項演算子のような使い方も if
・ 複数の条件がある場合に利用 ・ いずれかの条件に一致しないとエラーになる cond
・ パターンマッチで条件分岐 ・ いずれかの条件に一致しないとエラーになる case
・ パターンマッチが成功する場合に実行 with
パイプライン演算子
・ Elixirのコードで頻出 ・ 連続した関数呼び出しを”|>”でつなげて記述 ・ 左辺のデータが右辺の関数の第一引数に適用 ・ コード上の記述と実際の処理の順序が同じになる パイプライン演算子
・ コードの記述と実際の処理順序が異なる ・ どこがどの関数の引数なのか分かりづらい 例:JavaScriptの場合 ※ 多くの言語で起こることでJSを貶める意図はありません
例:Elixirの場合 ・ コードの記述と実際の処理順序が同じ ・ 引数と関数の対応が明確 ・ ワンライナーも可
モジュール
・ 関数をまとめて名前空間を定義 ・ EnumやKeyword、Mapは標準提供のモジュール モジュール
・ モジュール内に定義される特殊なマップ ・ マップとパターンマッチが可能 構造体
・ モジュールは他言語で言うクラスではない ・ 構造体でデータ構造が定義できるものの、 これはインスタンスではない ・ インスタンスメソッドのような呼び出しはできない モジュール ≠
クラス
モジュール ≠ クラス
・ 関数呼び出し時、引数にもパターンマッチが適用 ・ パターンマッチの条件が異なれば、 同名の関数が複数定義できる 関数呼び出しとパターンマッチ
関数呼び出しとパターンマッチ ・ case do ~ endのマッチは関数呼び出し時点で可
関数呼び出しとパターンマッチ ・ 引数でパターンマッチ ・ 関数のワンライナー向け記法で行数を圧縮
サンプル
FizzBuzz
まとめ
・ ElixirはErlang VM上で動作する関数型言語 ・ 耐障害性がすごい ・ Dockerで簡単に試せる ・ パターンマッチとパイプラインが特徴的 まとめ
Elixirは良いぞ
Thank you !!