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
転職早々Elixir + Phoenixに入門している話
Search
ponday
June 20, 2018
Technology
2
1.6k
転職早々Elixir + Phoenixに入門している話
ponday
June 20, 2018
Tweet
Share
More Decks by ponday
See All by ponday
関数型でGoFのデザインパターンやってみる
honda
1
1.2k
TypeScriptの型表現
honda
10
3.1k
Web Componentsの今
honda
1
430
これまでのReact、これからのReact
honda
0
310
Gatsbyお試し
honda
0
120
styled-components or emotion?
honda
0
680
Web ComponentsとAngular
honda
0
130
Atomic Design周りについての私見
honda
1
700
え、まだWeb Componentsを未来の技術だと思ってるの?
honda
2
820
Other Decks in Technology
See All in Technology
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
27k
ビズリーチが挑む メトリクスを活用した技術的負債の解消 / dev-productivity-con2025
visional_engineering_and_design
3
7.7k
OPENLOGI Company Profile for engineer
hr01
1
34k
開発生産性を測る前にやるべきこと - 組織改善の実践 / Before Measuring Dev Productivity
kaonavi
10
4.6k
AI時代の開発生産性を加速させるアーキテクチャ設計
plaidtech
PRO
3
160
生成AI活用の組織格差を解消する 〜ビジネス職のCursor導入が開発効率に与えた好循環〜 / Closing the Organizational Gap in AI Adoption
upamune
7
5.3k
United Airlines Customer Service– Call 1-833-341-3142 Now!
airhelp
0
170
マネジメントって難しい、けどおもしろい / Management is tough, but fun! #em_findy
ar_tama
7
1.1k
American airlines ®️ USA Contact Numbers: Complete 2025 Support Guide
airhelpsupport
0
390
自律的なスケーリング手法FASTにおけるVPoEとしてのアカウンタビリティ / dev-productivity-con-2025
yoshikiiida
1
17k
開発生産性を組織全体の「生産性」へ! 部門間連携の壁を越える実践的ステップ
sudo5in5k
2
7.2k
How Do I Contact HP Printer Support? [Full 2025 Guide for U.S. Businesses]
harrry1211
0
120
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Balancing Empowerment & Direction
lara
1
430
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
How to Think Like a Performance Engineer
csswizardry
25
1.7k
Docker and Python
trallard
44
3.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Facilitating Awesome Meetings
lara
54
6.4k
For a Future-Friendly Web
brad_frost
179
9.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Raft: Consensus for Rubyists
vanstee
140
7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Transcript
転職早々Elixir + Phoenixに入門している話 VEGA Tech Meetup #1 / Jun 20th,
2018 ponday (@ponday_dev)
株式会社ベガコーポレーション R&Dグループ エンジニア Profile Honda, Yusuke (@ponday_dev) ng-fukuoka(Angular福岡ユーザグループ)オーガナイザ Like - TypeScript
/ RxJS / Angular - Elixir - Python 4月に中途入社したばかり 元々サーバサイドの趣味フロントエンドエンジニア 最近は仕事で画像処理とか機械学習とかElixirとか いよいよ何エンジニアと名乗れば良いのか迷子
最近、Elixir + Phoenix に入門しました
None
Elixir - 並列処理などを得意とするプログラミング言語 - Rubyライクな構文(とよく言われる) - 作者がRailsのコミッター - Erlang VM上で動作
- Erlangも一つのプログラミング言語 - 99.9999999%を謳う安定性が魅力
None
Phoenix Framework - Elixir向けのWeb Application Framework - Railsライクな構成、エコシステム - 作者がRailsのコミッター(Elixirの作者とは別人)
採用の経緯 新プロダクトの技術選定 今回は非サーバレスで いつもならRails じゃあ今回もRails?
面白くなくない? 分かる
新天地へ
Elixir Go言語 - Rubyに似ているらしい - 安定性が高いらしい - ちゃんと触ったことはない - 採用実績には劣る印象
- 福岡に活発なコミュニティがある - シンプル - パフォーマンス良いらしい - 軽く触ったことはある - 採用実績は増えている印象 - fukuoka.goなどイベントもある 候補は2つ
どうせなら新しい言語! せやな
検証してみた
負荷テスト - 実際にデモサイトを作成し、EC2にデプロイする - DBへの挿入/更新処理が発生するAPIに一斉にアクセス → どの程度のリクエストまで耐えれる? - 負荷ツールにはGoadを利用 -
(参考)https://qiita.com/quickguard/items/995d8e28d53e569bab73
負荷テスト結果 多重度 リクエスト数 エラー数 10 100 0 20 100 0
50 500 0 200 1000 0 200 5000 0 300 7000 0 耐えて欲しい 落としたい!
そしてついに、300多重/8000reqで落ちた!
Goad(負荷ツール)が
結論 落とせなかった
負荷テスト概観 - パフォーマンスもなかなか - 高負荷の状態でも100ms 〜 200ms程度でレスポンスが返っている - 高負荷状態でも処理自体に失敗することがなかった -
高付加でエラーになった場合に、プロセスを立ち上げ直して処理を続行して いるのでは? - サーバスペックが弱くても動作できるのは良い - 今回のテストはEC2のt2.mediumで実施
Elixir / Phoenixについての所感
所感① Rubyとはそれほど似てない - ぱっと見は確かにRubyっぽい - 書いてみると全然似てない - Elixir特有の構文をよく使う - そもそもクラスがない
- クラスがないのでインスタンスメソッドなんてものもない - (個人的には)Rubyより読み書きしやすい
所感② 読みやすい - 柔軟な記法 - 文ではなく式 - パイプライン演算子 - 処理が簡潔に書ける
- パターンマッチが超強力 - 最初は慣れが必要
所感③ 情報の少なさは否めない - 特にPhoenix周辺の情報 - 日本語情報の量には期待してはならない - 福岡はQiita含めて活発なコミュニティがあるのでまだ敷居は低いはず - エラーメッセージが直感的ではないことがまれにある
- 経験によるカバーも必要になってくる?
所感③ 情報の少なさは否めない - 特にPhoenix周辺の情報 - 日本語情報の量には期待してはならない - 福岡はQiita含めて活発なコミュニティがあるのでまだ敷居は低いはず - エラーメッセージが直感的ではないことがまれにある
- 経験によるカバーも必要になってくる?
所感④ ライブラリには困る場合も - 標準のライブラリは結構充実 - Erlangのライブラリも使えるので少なくはない - AWSなどのサービスのサポートはまだまだ - 反面、GraphQLサーバを実装するためのライブラリなどは既にあったりする
Elixirコード例
パイプライン演算子 - Elixirの特徴的な構文 - 関数呼び出しを “|>” でつなげて記述 - 処理の順序が分かりやすくなる
パイプライン演算子 JavaScript Elixir
パイプライン演算子 DB操作の例 ※ Phoenix標準のDBライブラリ『Ecto』の書き方
パターンマッチ - いわゆる正規表現とは違う - 関数の処理だけでなく、関数呼び出しなどいろいろな場面で 利用される - 活用することで表現できる幅が一気に広がる
パターンマッチ
パターンマッチ 基本形(代入ではなくパターンマッチ)
パターンマッチ foo属性を持つオブジェクトとマッチ
パターンマッチ foo属性の値が1のオブジェクトとマッチ
パターンマッチによる型制約もどき - 本来Elixirは動的型付け言語 - パターンマッチを活用すると、ゆるい型制約もどきが実現でき る - 「特定のプロパティを持つ型」みたいな書き方もできる
パターンマッチによる型制約もどき => user: ponday, gender: male => エラー
パターンマッチによる型制約もどき
パターンマッチを利用した条件分岐 - 関数呼び出し時にもパターンマッチが適用される - 同名の関数が複数存在する場合、指定のパターンに初めに マッチしたものが実行される - 上手く使うとif文が不要に
パターンマッチを利用した条件分岐 これが
パターンマッチを利用した条件分岐 こうなる
まとめ - Elixir、良い - 普通に書けばそこそこのパフォーマンスで、堅牢 - エコシステムも充実 - 表現力豊かな構文で書いてて楽しい -
慣れは必要ながら簡潔で読みやすい - ライブラリなどはこれからな面も - とはいえ福岡はコミュニティが活発 情報交換もしやすい分ハードルは低い
Elixir、一緒にやりませんか?
Thank you !!