×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
A Tour of Elixir VEGA Tech Meetup #2 / Aug 17th, 2018 ponday (@ponday_dev)
Slide 2
Slide 2 text
Profile - ponday (Honda, Yusuke) - 株式会社ベガコーポレーション エンジニア - Like : TypeScript / Elixir / Python etc...
Slide 3
Slide 3 text
あらすじ Elixir採用に向けて技術検証中 新プロダクト作るぞ! Elixir試してみよう 負荷試験の成績がものすごい!! みんなもやろう! ← イマココ 前回Meetupより
Slide 4
Slide 4 text
今回は触ってみよう!編
Slide 5
Slide 5 text
・ 雰囲気を伝えるための超圧縮版です 詳しい内容は公式ドキュメントを参照願います ・ Elixirの機能を紹介するものでPhoenixの内容は 含みません ご注意
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
の前に
Slide 8
Slide 8 text
・ Prologライクな関数型言語 ・ 極めて高い信頼性(付属ライブラリ:99.9999999%) ・ 通信分野やゲームサーバでの採用実績 ・ Call of Duty ・ League of Legends ・ WhatsApp Erlang
Slide 9
Slide 9 text
・ 軽量プロセス ・ 極めて小さなメモリ消費(300ワード) ・ μ秒レベルのプロセス起動時間 ・ 2000万プロセスが実行できたというベンチマークもあるらしい ・ 優れた耐障害性 ・ エラーが起こればプロセスごとやり直す Erlang VM(BEAM)
Slide 10
Slide 10 text
・ 強い動的型付けの関数型言語 ・ Erlang VM上で動作(Erlangの利点がそのまま活かせる) ・ Rubyに影響を受けた柔軟な構文 ・ Railsに影響を受けたWAF(Phoenix)がある ・ 他の言語出身者でも馴染みやすい(※個人的な意見です) Elixir
Slide 11
Slide 11 text
実行環境
Slide 12
Slide 12 text
・ ローカルにインストールする ・ Wandbox(https://wandbox.org/)を使う ・ Dockerイメージを利用する 実行環境 オススメ
Slide 13
Slide 13 text
Elixirのイメージが提供されているのでそれを使う Dockerによる環境構築 ↑は容量が大きいので小さいほうが良ければ以下
Slide 14
Slide 14 text
Elixir + Phoenix用リポジトリ https://github.com/ponday-dev/elixir-on-docker ・ MariaDBとつなげるdocker-compose.ymlまで ・ 使い方はREADMEを参照
Slide 15
Slide 15 text
Hello, World
Slide 16
Slide 16 text
Hello, World シンプル版 ・ 標準出力はIO.puts関数 ・ 文字列はダブルクォートで囲む (シングルクォートは意味が異なる)
Slide 17
Slide 17 text
Hello, World シンプル版 関数版(無名関数) ・ fn (引数) -> endで無名関数が作れる ・ 無名関数の呼び出しは (関数名).(引数)
Slide 18
Slide 18 text
Hello, World モジュール版 ・ defmoduleでモジュールを定義 ・ クラスではない ・ モジュール内に関数を定義するときは fnではなくdef ・ モジュールに属する関数呼び出しは (関数名)(引数)の形式で可
Slide 19
Slide 19 text
データ構造
Slide 20
Slide 20 text
・ 整数 / 浮動少数 ・ 真偽値(true / false) ・ 文字列(バイナリ) ・ アトム(Rubyでいうシンボル) ・ nil(※データ型ではない) 基本データ型
Slide 21
Slide 21 text
・ リスト ・ タプル ・ キーワード付きリスト ・ マップ コレクション
Slide 22
Slide 22 text
・ 普通の配列 ・ 順序は保証されている リスト
Slide 23
Slide 23 text
・ メモリ上に連続して格納される ・ サイズ取得は高速、修正は低速 タプル
Slide 24
Slide 24 text
・ アトムと値のタプルで構成されたリスト ・ 順序は保証されている キーワード付きリスト
Slide 25
Slide 25 text
・ いわゆる連想配列 マップ
Slide 26
Slide 26 text
パターンマッチ
Slide 27
Slide 27 text
・ 値やデータ構造をマッチング(≠ 正規表現) ・ = は代入ではなくパターンマッチ演算子 ・ 制御構文、関数呼び出しなど色々な場面で使える パターンマッチ
Slide 28
Slide 28 text
・ 左辺に変数が来る場合は代入操作 ・ 再代入も可能 パターンマッチ(基本)
Slide 29
Slide 29 text
・ コレクションの構造に対してもマッチ可能 パターンマッチ(コレクション)
Slide 30
Slide 30 text
・ コレクションの構造に対してもマッチ可能 パターンマッチ(マップ)
Slide 31
Slide 31 text
制御構造
Slide 32
Slide 32 text
・ 条件が一つだけの条件分岐(else ifがない) ・ 三項演算子のような使い方も if
Slide 33
Slide 33 text
・ 複数の条件がある場合に利用 ・ いずれかの条件に一致しないとエラーになる cond
Slide 34
Slide 34 text
・ パターンマッチで条件分岐 ・ いずれかの条件に一致しないとエラーになる case
Slide 35
Slide 35 text
・ パターンマッチが成功する場合に実行 with
Slide 36
Slide 36 text
パイプライン演算子
Slide 37
Slide 37 text
・ Elixirのコードで頻出 ・ 連続した関数呼び出しを”|>”でつなげて記述 ・ 左辺のデータが右辺の関数の第一引数に適用 ・ コード上の記述と実際の処理の順序が同じになる パイプライン演算子
Slide 38
Slide 38 text
・ コードの記述と実際の処理順序が異なる ・ どこがどの関数の引数なのか分かりづらい 例:JavaScriptの場合 ※ 多くの言語で起こることでJSを貶める意図はありません
Slide 39
Slide 39 text
例:Elixirの場合 ・ コードの記述と実際の処理順序が同じ ・ 引数と関数の対応が明確 ・ ワンライナーも可
Slide 40
Slide 40 text
モジュール
Slide 41
Slide 41 text
・ 関数をまとめて名前空間を定義 ・ EnumやKeyword、Mapは標準提供のモジュール モジュール
Slide 42
Slide 42 text
・ モジュール内に定義される特殊なマップ ・ マップとパターンマッチが可能 構造体
Slide 43
Slide 43 text
・ モジュールは他言語で言うクラスではない ・ 構造体でデータ構造が定義できるものの、 これはインスタンスではない ・ インスタンスメソッドのような呼び出しはできない モジュール ≠ クラス
Slide 44
Slide 44 text
モジュール ≠ クラス
Slide 45
Slide 45 text
・ 関数呼び出し時、引数にもパターンマッチが適用 ・ パターンマッチの条件が異なれば、 同名の関数が複数定義できる 関数呼び出しとパターンマッチ
Slide 46
Slide 46 text
関数呼び出しとパターンマッチ ・ case do ~ endのマッチは関数呼び出し時点で可
Slide 47
Slide 47 text
関数呼び出しとパターンマッチ ・ 引数でパターンマッチ ・ 関数のワンライナー向け記法で行数を圧縮
Slide 48
Slide 48 text
サンプル
Slide 49
Slide 49 text
FizzBuzz
Slide 50
Slide 50 text
まとめ
Slide 51
Slide 51 text
・ ElixirはErlang VM上で動作する関数型言語 ・ 耐障害性がすごい ・ Dockerで簡単に試せる ・ パターンマッチとパイプラインが特徴的 まとめ
Slide 52
Slide 52 text
Elixirは良いぞ
Slide 53
Slide 53 text
Thank you !!