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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ponday
August 17, 2018
Programming
540
1
Share
A Tour of Elixir
VEGA Tech Meetup #2(2018/08/17)発表資料です。
ponday
August 17, 2018
More Decks by ponday
See All by ponday
関数型でGoFのデザインパターンやってみる
honda
1
1.6k
TypeScriptの型表現
honda
10
3.1k
Web Componentsの今
honda
1
470
これまでのReact、これからのReact
honda
0
340
Gatsbyお試し
honda
0
130
styled-components or emotion?
honda
0
720
Web ComponentsとAngular
honda
0
150
Atomic Design周りについての私見
honda
1
790
え、まだWeb Componentsを未来の技術だと思ってるの?
honda
2
880
Other Decks in Programming
See All in Programming
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
1.4k
20260315 AWSなんもわからん🥲
chiilog
2
190
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
310
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
160
AI駆動開発がもたらすパラダイムシフト
ryosuke0911
0
120
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
830
飯MCP
yusukebe
0
480
Kubernetes上でAgentを動かすための最新動向と押さえるべき概念まとめ
sotamaki0421
2
430
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
150
10年分の技術的負債、完済へ ― Claude Code主導のAI駆動開発でスポーツブルを丸ごとリプレイスした話
takuya_houshima
0
1.6k
モダンOBSプラグイン開発
umireon
0
200
ネイティブアプリとWebフロントエンドのAPI通信ラッパーにおける共通化の勘所
suguruooki
0
250
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Claude Code のすすめ
schroneko
67
220k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
430
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
210
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
110
A Tale of Four Properties
chriscoyier
163
24k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Skip the Path - Find Your Career Trail
mkilby
1
100
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Practical Orchestrator
shlominoach
191
11k
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 !!