SlideShare a Scribd company logo
Elixir言語紹介
Learn Languages 2017 in ODC
おーはら@ohrdev
Agenda
• 自己紹介
• Elixir概要
• 他言語との比較
• Elixirウォークスルー
• 関数型言語としてのElixir
• アクターモデル
• Elixirの計算モデル
• Elixirのアーキテクチャ
• 何故Elixirを使うのか?
自己紹介
• おーはら
• Twitter: @ohrdev
• 所属: ドリコム
• Community: JapanElixirAssociation理事/tokyo.ex主催
• Work: ゲーム・サービス基盤、広告系サービス
• Like: 自社仏閣,仏像鑑賞,仏像制作,VR,FF14(白70),ダイエット
• LikeLang: Lisp,Erlang,Elixir,Ruby
• etc
• エンジニアHUB: Elixir入門記事
• https://employment.en-japan.com/engineerhub/entry/2017/06/12/110000
• https://employment.en-japan.com/engineerhub/entry/2017/06/19/110000
Elixir概要
• Elixirとは
• Erlang VM上で動作し、
• 耐障害性、ソフトリアルタイム、分散処理が得意な、
• メタプログラミング(マクロ)可能な、
• 軽量プロセスによるアクターモデルのパラダイムを持つ、
• 動的型付けの、
• ネットワークサーバー構築に特化した、
• 非純粋な関数型言語
• のプログラミグ言語です。
他言語との比較
言語 型付け
(安全性保証)
型付け
(型検査タイミング)
純粋
(参照透過)
型推論
Haskell 強い 静的 ○ ○
Scala 強い 静的 × △
Elixir 強い 動的 × -
Clojure 強い 動的 × -
Ruby 強い 動的 - -
JavaScript 弱い 動的 - -
Elixirウォークスルー(1)
• Hello, world モジュール
関数 iex = REPL
Elixirウォークスルー(2)
• フィボナッチ数
関数の引数のパターンマッチ
Elixirウォークスルー(3)
• ドキュメント
Elixirウォークスルー(4)
• ドキュメント例
• Phoenix Framework
Elixirウォークスルー(5)
• ドキュメントテスト
ドキュメント内のコードをテスト
mix = task runner
Elixirウォークスルー(N)
• その他、紹介しきれなかった特徴・機能
• メタプログラミング
• マクロ(Lispの様なAST操作、ただしS式ではなくタプルで表現)
• パターンマッチ
• 型システムは(まだ)ない
• 将来的に導入される予定
• コンパイルするとErlangVMの実行バイナリ(beam)が吐かれる
• Erlangのモジュールをシームレスに利用可能
• OTP(open telecom platform)
• Elixir/Erlangで並行プログラムを書く際に利用できるパターン・フレームワーク
• etc
関数型言語としてのElixir
• 関数型言語
• 関数型プログラミングを推奨する(行いやすい)プログラミング言語
• 関数型プログラミング
• 式や関数を主として計算(処理)を表現するプログラミングスタイル
• Elixirのプログラミングスタイル
• プロセス(アクター)を主として計算(処理)を表現する
• 関数を実行するプロセス同士が協調して処理を組み立てる
• Elixirプログラミング = 関数型プログラミング + アクターモデル
• ex) 状態の表現はどうするの? -> 状態を保持するプロセスを生成し、そ
こから状態を取得する
アクターモデル
アクター1
(Elixirではプロセス)
アクター2
アクター3
アクターはアクターを生成できる
メッセージを保持するキュー(メールボックス)
メッセージ
アクターは別のアクターにメッセージを送信できる
受信したメッセージはメールボックスに保持
アクターはメールボックス内の
メッセージを処理できる
アクターはそれぞれ
独立・並行に動作する
Elixirの計算モデル
• 全てがErlangVM上のプロセスで表現される
• ex) iex, mix, elixir自身もErlangVM上のプロセスの集合体でしかない
• プロセスの集合=アプリ
• main関数はない、代わりにアプリ毎にマスタープロセスがある
• マスタープロセスを根とするプロセスツリーが、実際の処理を行う
Application
Master Process
Supervisor
Process
Worker
Process
子プロセスを監視
し、クラッシュし
たら再起動する
関数を引数にとり
生成され、引数の
関数処理を行う
Elixirアプリ
ケーション
Elixirのアーキテクチャ
hardware
OS
ErlangVM
scheduler scheduler scheduler
CPUコア数だけ
スケジューラーを生成
プロセス
ノード
hardware
OS
ErlangVM
scheduler scheduler scheduler
network
スケジューラ間でプロセス
は最適にマイグレーション
クラスタリング
して通信可能
プロセス=超軽量
起動速度: 1プロセス数マイクロ秒
使用メモリ:約300word
透過的にメッ
セージを送信可
何故Elixirを使うのか?
• 解決したいリアルの課題
• 自分のバックグラウンドはウェブ屋さん
• 大量のトラフィックを「安定して」「低コストで」「メンテナブル
に」捌きたい
• サービスを止める事なくプログラムをアップグレードしたい
• Ex)
• 数千万のクライアントからのコネクションを同時に維持してpubsubする
• WebSocketのコネクションを維持したままプログラムをバージョンアップ
• 平時のトラフィックの数百倍のスパイクがきたとしても、クラッシュする事なく
レスポンスを返す
• その他たくさん
何故Elixirを使うのか?
• ネットワークサーバーを書く為に使っている
• 耐障害性(VMが安定)
• OTPを使って並行処理が簡単に書ける
• 1TCPコネクションを1プロセスに割り当てる事が可能
• プロセスは超軽量なので大量のTCPコネクションを保持できる(ex: websocket)
• 1台のサーバーでwsで200万同時接続してpubsubした事例
• http://phoenixframework.org/blog/the-road-to-2-million-websocket-connections
• GCはプロセス毎に走るのでstop the worldが無い
• プログラミング言語というよりサーバー記述用DSLという感覚
まとめ
• リアルの問題をいかに解決できるかが大事
• 言語は道具
• まずは使ってみましょう

More Related Content

PPTX
Elixirと他言語の比較的紹介 ver.2
PPTX
Elixirについて私が知ってる二、三の事柄
PPTX
Elixirハンズオン-2017-03-11
PPTX
地獄のElixir(目黒スタートアップ勉強会)
PPTX
失敗という概念が存在しない退屈なweb開発
PPTX
running web app on elixir
PPTX
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
PDF
Clojureに入門してみた、2017年秋
Elixirと他言語の比較的紹介 ver.2
Elixirについて私が知ってる二、三の事柄
Elixirハンズオン-2017-03-11
地獄のElixir(目黒スタートアップ勉強会)
失敗という概念が存在しない退屈なweb開発
running web app on elixir
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Clojureに入門してみた、2017年秋

Similar to Elixir言語紹介 (20)

PDF
パーフェクト"Elixir情報収集"
PPTX
how-to-learn-elixir
PPTX
Erlang and Elixir
PDF
160911 handson elixir_phoenix
PPTX
やや関数型を意識した風Elixir/Phoenixご紹介
PPTX
Tokyoex#5 Questions
PPTX
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
PPTX
Elixir-Conf-Japan-2017-session-ohr486
PPTX
Elixirで関数型言語の設計を学ぶ - daimon.ex 2024-09-20
PDF
Elixirを利用した繊細なwebチャットの開発
PDF
Elixir とか組込みとか (On Elixir and embedded systems)
PPTX
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
PPTX
Elixirハンズオン2
PDF
Elixirだ 第1回 - 基礎だ -
PDF
Exineris Project by kochi.ex
PDF
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
KEY
Elixir macro-in-action-1
PPTX
ElixirでIoT!?ナウでヤングでcoolなNervesフレームワーク
PPTX
Rubyのenum系高階関数を elixirでも使いたい
PPTX
E言語スタック
パーフェクト"Elixir情報収集"
how-to-learn-elixir
Erlang and Elixir
160911 handson elixir_phoenix
やや関数型を意識した風Elixir/Phoenixご紹介
Tokyoex#5 Questions
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir-Conf-Japan-2017-session-ohr486
Elixirで関数型言語の設計を学ぶ - daimon.ex 2024-09-20
Elixirを利用した繊細なwebチャットの開発
Elixir とか組込みとか (On Elixir and embedded systems)
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
Elixirハンズオン2
Elixirだ 第1回 - 基礎だ -
Exineris Project by kochi.ex
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Elixir macro-in-action-1
ElixirでIoT!?ナウでヤングでcoolなNervesフレームワーク
Rubyのenum系高階関数を elixirでも使いたい
E言語スタック
Ad

More from Tsunenori Oohara (11)

PPTX
meguro.rb LT
PPTX
Elixir解答
PDF
パンチラに関する考察
PPTX
Re:デブ デブナイト vol.2 LT
PPTX
Tokyoex6 EEx
PPTX
running-elixir-in-production
PPTX
hello waf, hello phoenix
PPTX
tokyo.ex3 LT
PPTX
Elixir lang bootstrap
PPTX
elixir in production
PDF
地獄Spec
meguro.rb LT
Elixir解答
パンチラに関する考察
Re:デブ デブナイト vol.2 LT
Tokyoex6 EEx
running-elixir-in-production
hello waf, hello phoenix
tokyo.ex3 LT
Elixir lang bootstrap
elixir in production
地獄Spec
Ad

Elixir言語紹介