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
A Tour of Elixir
Search
ponday
August 17, 2018
Programming
1
490
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.2k
TypeScriptの型表現
honda
10
3k
Web Componentsの今
honda
1
410
これまでのReact、これからのReact
honda
0
300
Gatsbyお試し
honda
0
110
styled-components or emotion?
honda
0
660
Web ComponentsとAngular
honda
0
130
Atomic Design周りについての私見
honda
1
670
え、まだWeb Componentsを未来の技術だと思ってるの?
honda
2
780
Other Decks in Programming
See All in Programming
Devinのメモリ活用の学びを自社サービスにどう組み込むか?
itarutomy
0
1.7k
eBPF Updates (March 2025)
kentatada
0
130
プログラミング教育のコスパの話
superkinoko
0
120
いまさら聞けない生成AI入門: 「生成AIを高速キャッチアップ」
soh9834
12
3.8k
コンテナでLambdaをデプロイするときに知っておきたかったこと
_takahash
0
150
PHPでお金を扱う時、終わりのない 謎の1円調査の旅にでなくて済む方法
nakka
3
1.3k
ローコードサービスの進化のためのモノレポ移行
taro28
1
330
Denoでフロントエンド開発 2025年春版 / Frontend Development with Deno (Spring 2025)
petamoriken
1
1.3k
PHPのガベージコレクションを深掘りしよう
rinchoku
0
240
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
6
3k
JavaOne 2025: Advancing Java Profiling
jbachorik
1
320
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
130
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
28
1.6k
GitHub's CSS Performance
jonrohan
1030
460k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
12
610
Docker and Python
trallard
44
3.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
8
700
We Have a Design System, Now What?
morganepeng
51
7.5k
How STYLIGHT went responsive
nonsquared
99
5.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
25k
Optimising Largest Contentful Paint
csswizardry
35
3.2k
The Cost Of JavaScript in 2023
addyosmani
48
7.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.6k
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 !!