$30 off During Our Annual Pro Sale. View Details »

転職早々Elixir + Phoenixに入門している話

ponday
June 20, 2018

転職早々Elixir + Phoenixに入門している話

ponday

June 20, 2018
Tweet

More Decks by ponday

Other Decks in Technology

Transcript

  1. 転職早々Elixir + Phoenixに入門している話 VEGA Tech Meetup #1 / Jun 20th,

    2018 ponday (@ponday_dev)
  2. 株式会社ベガコーポレーション R&Dグループ エンジニア Profile Honda, Yusuke (@ponday_dev) ng-fukuoka(Angular福岡ユーザグループ)オーガナイザ Like - TypeScript

    / RxJS / Angular - Elixir - Python 4月に中途入社したばかり 元々サーバサイドの趣味フロントエンドエンジニア 最近は仕事で画像処理とか機械学習とかElixirとか いよいよ何エンジニアと名乗れば良いのか迷子
  3. 最近、Elixir + Phoenix に入門しました

  4. None
  5. Elixir - 並列処理などを得意とするプログラミング言語 - Rubyライクな構文(とよく言われる) - 作者がRailsのコミッター - Erlang VM上で動作

    - Erlangも一つのプログラミング言語 - 99.9999999%を謳う安定性が魅力
  6. None
  7. Phoenix Framework - Elixir向けのWeb Application Framework - Railsライクな構成、エコシステム - 作者がRailsのコミッター(Elixirの作者とは別人)

  8. 採用の経緯 新プロダクトの技術選定 今回は非サーバレスで いつもならRails じゃあ今回もRails?

  9. 面白くなくない? 分かる

  10. 新天地へ

  11. Elixir Go言語 - Rubyに似ているらしい - 安定性が高いらしい - ちゃんと触ったことはない - 採用実績には劣る印象

    - 福岡に活発なコミュニティがある - シンプル - パフォーマンス良いらしい - 軽く触ったことはある - 採用実績は増えている印象 - fukuoka.goなどイベントもある 候補は2つ
  12. どうせなら新しい言語! せやな

  13. 検証してみた

  14. 負荷テスト - 実際にデモサイトを作成し、EC2にデプロイする - DBへの挿入/更新処理が発生するAPIに一斉にアクセス → どの程度のリクエストまで耐えれる? - 負荷ツールにはGoadを利用 -

    (参考)https://qiita.com/quickguard/items/995d8e28d53e569bab73
  15. 負荷テスト結果 多重度 リクエスト数 エラー数 10 100 0 20 100 0

    50 500 0 200 1000 0 200 5000 0 300 7000 0 耐えて欲しい 落としたい!
  16. そしてついに、300多重/8000reqで落ちた!

  17. Goad(負荷ツール)が

  18. 結論 落とせなかった

  19. 負荷テスト概観 - パフォーマンスもなかなか - 高負荷の状態でも100ms 〜 200ms程度でレスポンスが返っている - 高負荷状態でも処理自体に失敗することがなかった -

    高付加でエラーになった場合に、プロセスを立ち上げ直して処理を続行して いるのでは? - サーバスペックが弱くても動作できるのは良い - 今回のテストはEC2のt2.mediumで実施
  20. Elixir / Phoenixについての所感

  21. 所感① Rubyとはそれほど似てない - ぱっと見は確かにRubyっぽい - 書いてみると全然似てない - Elixir特有の構文をよく使う - そもそもクラスがない

    - クラスがないのでインスタンスメソッドなんてものもない - (個人的には)Rubyより読み書きしやすい
  22. 所感② 読みやすい - 柔軟な記法 - 文ではなく式 - パイプライン演算子 - 処理が簡潔に書ける

    - パターンマッチが超強力 - 最初は慣れが必要
  23. 所感③ 情報の少なさは否めない - 特にPhoenix周辺の情報 - 日本語情報の量には期待してはならない - 福岡はQiita含めて活発なコミュニティがあるのでまだ敷居は低いはず - エラーメッセージが直感的ではないことがまれにある

    - 経験によるカバーも必要になってくる?
  24. 所感③ 情報の少なさは否めない - 特にPhoenix周辺の情報 - 日本語情報の量には期待してはならない - 福岡はQiita含めて活発なコミュニティがあるのでまだ敷居は低いはず - エラーメッセージが直感的ではないことがまれにある

    - 経験によるカバーも必要になってくる?
  25. 所感④ ライブラリには困る場合も - 標準のライブラリは結構充実 - Erlangのライブラリも使えるので少なくはない - AWSなどのサービスのサポートはまだまだ - 反面、GraphQLサーバを実装するためのライブラリなどは既にあったりする

  26. Elixirコード例

  27. パイプライン演算子 - Elixirの特徴的な構文 - 関数呼び出しを “|>” でつなげて記述 - 処理の順序が分かりやすくなる

  28. パイプライン演算子 JavaScript Elixir

  29. パイプライン演算子 DB操作の例 ※ Phoenix標準のDBライブラリ『Ecto』の書き方

  30. パターンマッチ - いわゆる正規表現とは違う - 関数の処理だけでなく、関数呼び出しなどいろいろな場面で 利用される - 活用することで表現できる幅が一気に広がる

  31. パターンマッチ

  32. パターンマッチ 基本形(代入ではなくパターンマッチ)

  33. パターンマッチ foo属性を持つオブジェクトとマッチ

  34. パターンマッチ foo属性の値が1のオブジェクトとマッチ

  35. パターンマッチによる型制約もどき - 本来Elixirは動的型付け言語 - パターンマッチを活用すると、ゆるい型制約もどきが実現でき る - 「特定のプロパティを持つ型」みたいな書き方もできる

  36. パターンマッチによる型制約もどき => user: ponday, gender: male => エラー

  37. パターンマッチによる型制約もどき

  38. パターンマッチを利用した条件分岐 - 関数呼び出し時にもパターンマッチが適用される - 同名の関数が複数存在する場合、指定のパターンに初めに マッチしたものが実行される - 上手く使うとif文が不要に

  39. パターンマッチを利用した条件分岐 これが

  40. パターンマッチを利用した条件分岐 こうなる

  41. まとめ - Elixir、良い - 普通に書けばそこそこのパフォーマンスで、堅牢 - エコシステムも充実 - 表現力豊かな構文で書いてて楽しい -

    慣れは必要ながら簡潔で読みやすい - ライブラリなどはこれからな面も - とはいえ福岡はコミュニティが活発 情報交換もしやすい分ハードルは低い
  42. Elixir、一緒にやりませんか?

  43. Thank you !!