SlideShare a Scribd company logo
1 of 36
Copyright Drecom Co., Ltd. All Rights Reserved. 1
Rubyist |>(^o^)|>
Alchemist
〜Elixirの採用からサービス稼働までの記録〜
ElixirConfJapan 2017
株式会社Drecom 大原常徳
Copyright Drecom Co., Ltd. All Rights Reserved. 2
Agenda
AboutMe
|> 発表の趣旨
|> 導入事例紹介
|> 開発チーミング
|> サービスのスケール
|> サービスの運用
|> 教育とトレーニング
|> 組織/コミュニティ/MeetUp
|> まとめ
Copyright Drecom Co., Ltd. All Rights Reserved. 3
AboutMe
⁃ Tsunenori Oohara(おーはら,ohr486)
⁃ Twitter: @ohrdev
⁃ tokyo.ex: 主催・運営
⁃ ElixirConfJapan: 幹事チーム・運営
⁃ JapanElixirAssociation: 理事
⁃ 株式会社ドリコム
⁃ 基盤技術部
⁃ 全社基盤システム、広告系サービス全般
⁃ Elixir/Phoenixアプリを本番で開発・運用(約2
年
⁃ SoftwareDesign2016/11,12
⁃ [関数型言語]Elixirの始め方(前後)
Copyright Drecom Co., Ltd. All Rights Reserved. 4
発表の趣旨
⁃ ターゲット
⁃ Elixirの導入を検討している
⁃ プロダクションでElixirを使いたい
⁃ 中規模以上のElixirアプリを書いた事が
ない
⁃ Elixirを使いたくなった
⁃ ゴール
⁃ 導入の為に、導入後に、どういう事をす
るべきかをざっくりと把握する
⁃ 習得の為に何をすれば良いか把握する
Copyright Drecom Co., Ltd. All Rights Reserved. 5
発表の趣旨
⁃ 話すこと
⁃ 導入事例
⁃ 導入の為にしたこと
⁃ 失敗、知見
⁃ 日本のElixirコミュニティ事情
⁃ 話さないこと
⁃ 前後のセッションで話した・話すテー
マ
⁃ Elixirの採用理由(何故Elixirなのか
⁃ ErlangVM
Copyright Drecom Co., Ltd. All Rights Reserved. 6
導入事例紹介
⁃ 組織/チーム
⁃ 社内にRubyエンジニア多数(90%Rails製
⁃ 開発チームは5人(自分以外はElixir未経験
⁃ プロダクト
⁃ 広告サービス基盤
⁃ Railsアプリのリプレースプロジェクト
⁃ 期間
⁃ 開発: 6ヶ月
⁃ 運用: 1年半(うち1年、新旧サービスを並
行稼働)
Copyright Drecom Co., Ltd. All Rights Reserved. 7
導入事例紹介
⁃ リプレースにあたっての要件
⁃ サービスを絶対に停止してはいけない
⁃ 導入戦略
⁃ マイクロサービス化する
⁃ 一部の(API)マイクロサービスから徐々
に適用
⁃ AWSに乗る(スケールアップ/アウト機構
Copyright Drecom Co., Ltd. All Rights Reserved. 8
App(Rails)
App(Rails)
アーキテクチャ
⁃ before
cache
App(Rails)
DB(MySQL)
queue(Redis) Batch(sidekiq)
止めてはいけないが!
site req api req
Copyright Drecom Co., Ltd. All Rights Reserved. 9
API(Elixir)
API(Elixir)
アーキテクチャ
⁃ after
cache(Varnish)
Manage(Rails)
DB(MySQL)
queue(Redis) Batch(sidekiq)
API(Elixir)
Front(Rails/js)
DB(Redis)
安定
部分的にreplace
徐々にreplace
site req api req
Copyright Drecom Co., Ltd. All Rights Reserved. 10
アーキテクチャ
⁃ バッチ/非同期処理
⁃ sidekiq: 非同期処理gem
⁃ exq: sidekiqのElixir実装
Manage(Rails) queue(Redis) Batch(sidekiq)
API(Elixir)
exq’s enqueue
sidekiq’s enqueue sidekiq’s dequeue
ActiveJob I/F
Copyright Drecom Co., Ltd. All Rights Reserved. 11
導入事例紹介
⁃ 以上のケースのプロジェクトで
⁃ 得られた知見
⁃ 失敗
⁃ やった事
等を、紹介していきます
Copyright Drecom Co., Ltd. All Rights Reserved. 12
開発チーミング
⁃ チーミングにあたって注意した事
⁃ 求められるElixir習熟度を意識
⁃ 導入者(知見者)がボトルネックにならな
い
⁃ (可能なら)インフラエンジニアを確保す
る
Copyright Drecom Co., Ltd. All Rights Reserved. 13
開発チーミング
⁃ 実務に求められるレベル感
⁃ Lv.0: 触ったことが無い
⁃ Lv.1: コードが読める
⁃ Lv.2: 関数が書ける
⁃ Lv.3: モジュールが書ける
⁃ Lv.4: テストが書ける
⁃ Lv.5: 並行処理が書ける
⁃ Lv.6: フレームワークを使いこなせる
⁃ Lv.7: アプリの設計ができる
⁃ Lv.8: チューニング
・書籍
・ペアプロ
・コードレ
ビュー
・各種training
・
OTP
・テストツールの
理解・プロセスの理
解
実
務
の
壁
・ErlangVMの理
解
モックライブラリ(meck)、E2Eテストツール
Copyright Drecom Co., Ltd. All Rights Reserved. 14
開発チーミング
⁃ 導入者がボトルネックにならない対策
⁃ 静的解析ツールを使ってレビューサポート
⁃ Style Check
⁃ dogma
⁃ credo
⁃ 静的型解析
⁃ Dialyzer
⁃ 自動化/CI
⁃ 自動テスト(ExUnit)
⁃ 静的解析
をCIに組み込む
→初期段階で組み込まなかった為、大量のwarningが発生
⁃ レビューアーを増やす
・credoのほうがちょっと教
育的
・とても遅いのでCIで回すのが
良い
Copyright Drecom Co., Ltd. All Rights Reserved. 15
開発チーミング
⁃ レビューアーに求められる知識
⁃ Elixirらしいコード
⁃ 関数プログラミング
⁃ ライブラリの知識(車輪の再発明の回避)
⁃ awesome-elixir
⁃ awesome-erlang
⁃ hex.pm
⁃ 並行処理の表現方法
⁃ OTPの利用方法
⁃ 性能の評価
・既存モジュールが無い
か?
Copyright Drecom Co., Ltd. All Rights Reserved. 16
開発チーミング
⁃ インフラエンジニアの必要性
⁃ Elixirならではのインフラ課題がある
⁃ deploy方法にデファクトが存在しない
⁃ exrm(depricated!)/distillery
⁃ 無停止更新
⁃ ノード(ErlangVM)のクラスタリング
⁃ 監視
⁃ ErlangVMの監視
⁃ Supervisorを含むサービスの監視
Copyright Drecom Co., Ltd. All Rights Reserved. 17
サービスのスケール
⁃ 「スケール」とは
⁃ トラフィックの増加
⁃ ボトルネックポイント
Copyright Drecom Co., Ltd. All Rights Reserved. 18
サービスのスケール
⁃ トラフィックの増加
⁃ リリースから2年で約50倍程
⁃ コードの改変無しで対応
⁃ スケールアップ
⁃ コア数を増やせば(ある程度)線形に
⁃ ErlangVMの恩恵
⁃ スケールアウト
⁃ AWSならALB、AutoScalingGroupで対応可
Copyright Drecom Co., Ltd. All Rights Reserved. 19
サービスのスケール
⁃ ボトルネックポイント
⁃ データベースへのアクセス
⁃ コネクション/プロセスプーリング
⁃ poolboy: https://github.com/devinus/poolboy
→Erlangのライブラリ、Elixirライブラリ内での利用多
い
→下手なパラメータ設定によっては性能劣化の原因に
→pool_size, max_overflow, etc
Copyright Drecom Co., Ltd. All Rights Reserved. 20
サービスの運用
⁃ 「運用」とは
⁃ 機能開発、テスト
⁃ 監視
⁃ バージョンアップ
Copyright Drecom Co., Ltd. All Rights Reserved. 21
サービスの運用
⁃ 機能開発・テスト
⁃ TDDで開発
⁃ Red-Green-Refactor
⁃ 並行化の列を加えたマトリクス
⁃ 逐次処理・並行処理
⁃ Elixirは並行処理を簡単に書けるが、逐
次処理はもっと簡単に書ける(書いてし
まう)
Copyright Drecom Co., Ltd. All Rights Reserved. 22
サービスの運用
⁃ TDD黄金の回転
きれ
い
汚い
動かな
い
動く
Red
Green
Refacto
r
Copyright Drecom Co., Ltd. All Rights Reserved. 23
サービスの運用
⁃ TDD黄金の回転(並行版)
きれ
い
汚い
動かな
い
動く 並行に動
く
Red
Green
Refacto
r
Concurrenize
Copyright Drecom Co., Ltd. All Rights Reserved. 24
サービスの運用
⁃ 監視
⁃ Supervisorがワーカーを再起動するので通
常の死活監視ではサービスの瞬死を完全に
検知できない
⁃ 1分に1回のHeartBeatだとタイミングによってはスル
ー
⁃ →見かけ上は正常なので異常を検知できない
⁃ イベント単位での通知、KPI値の異常値に
よる検知
⁃ Sentry
⁃ https://github.com/getsentry/sentry-elixir
⁃ プロセスのcrash時に通知
⁃ →通知先(のsentry)へのDDoSになりかねない
⁃ re:dash
⁃ aleart機能
Copyright Drecom Co., Ltd. All Rights Reserved. 25
サービスの運用
⁃ バージョンアップの頻度
2014/9/10 2017/3/14
v1.0
R17
v1.4
R19
v1.2
R18
2016/1/1
2014/9/10
v1.0
2015/9/25
v1.1 2016/1/1
v1.2
2016/6/21
v1.3
2017/1/5
v1.4
2014/9/10
R17.1
2015/6/24
R18
2016/6/21
R19
2017/4/1
v1.4.2
2017/4/1
R19.3
Copyright Drecom Co., Ltd. All Rights Reserved. 26
サービスの運用
⁃ バージョンアップ
⁃ Elixir、Erlangそれぞれ別々にバージョンア
ップ
⁃ ただし依存関係あり(ex. Elixir 1.4.2 のコンパイルには
、 Erlang R18.0 以上必須 )
⁃ →バージョン管理ツールを導入していなかったので、
バージョンアップ作業が煩雑
⁃ →kerl, exenvを導入
⁃ 目安
⁃ Erlang: 年1回のメジャーバージョンアップ
⁃ Elixir: 年2回のマイナーバージョンアップ
⁃ 環境をイメージ/コンテナにして運用
⁃ 特定のバージョン毎のテストやリリースができるよう
に
⁃ script -> vagrant -> ansible -> docker
Copyright Drecom Co., Ltd. All Rights Reserved. 27
教育とトレーニング
⁃ よくある質問
⁃ 「Elixirでコードを書く為に、Erlangの知
識は必要ですか?」
⁃ 回答(異論は認める)
⁃ 設計時にOTPの知識が必要です
⁃ 何かとErlangのコードを読む機会はあり
ます
⁃ デバッグ、etc
⁃ 完全にF/Wに乗れば機会は少ないかもで
すが、あったほうが圧倒的に「安心」で
す
Copyright Drecom Co., Ltd. All Rights Reserved. 28
教育とトレーニング
⁃ 目的
⁃ Elixirで「業務」ができるレベルまで、
エンジニアのスキルを引き上げる
⁃ やったこと
⁃ 読書会/輪読会
⁃ ペアプロ
⁃ PRレビュー
・独習/勉強会/ハンズオ
ン
・業務と並
行
Copyright Drecom Co., Ltd. All Rights Reserved. 29
教育とトレーニング
⁃ 読んだ(読んでもらった)書籍
⁃ 「プログラミングElixir」
Dave Thomas(著),笹田耕一・鳥井雪(翻訳),
オーム社,2016
⁃ 「すごいErlangゆかいに学ぼう!」
Fred Hebert(著),山口能迪(翻訳),
オーム社,2014
⁃ 「プログラミングErlang」
Joe Armstrong(著),柳原一矢(翻訳),
オーム社,2008
Copyright Drecom Co., Ltd. All Rights Reserved. 30
おまけ
Thank
You!
Copyright Drecom Co., Ltd. All Rights Reserved. 31
教育とトレーニング
⁃ 学ぶべき事項
⁃ Elixir
⁃ Erlang/OTP
⁃ アクターモデル(プロセスの扱い)
⁃ 並行プログラミング
⁃ 関数型言語
⁃ テストフレームワークの使い方
・Haskellの入門
書!
・Elixir
本
・Erlang
本
・meckのドキュメント
・テストライブラリのド
キュメント
Copyright Drecom Co., Ltd. All Rights Reserved. 32
組織/コミュニティ/MeetUp
⁃ JapanElixirAssociation
⁃ ElixirConfJapanの主催・運営
⁃ 2018年もConfを予定
⁃ tokyo.ex
⁃ 東京近辺のElixir/Erlang関連イベント,隔月
⁃ https://beam-lang.connpass.com/
⁃ Sapporo.beam
⁃ 札幌近辺のBeam系言語meetup,毎週
⁃ http://sapporo-beam.github.io/
⁃ Idobataでリモート参加可
Copyright Drecom Co., Ltd. All Rights Reserved. 33
組織/コミュニティ/MeetUp
⁃ Elixir関連イベント(参加者20人以上)
ElixirConfJapa
n
Copyright Drecom Co., Ltd. All Rights Reserved. 34
組織/コミュニティ/MeetUp
⁃ Elixir関連イベント(参加者20人以上)
tokyo.exとしては
今後ハンズオンに
力を入れていきたい
ex) Erlangハンズオン
Copyright Drecom Co., Ltd. All Rights Reserved. 35
組織/コミュニティ/MeetUp
⁃ 是非イベントへお越しください
⁃ 来年もElixirConfJapanを予定しています
⁃ 東京近辺在住ならtokyo.exへ
⁃ 知見者が多いので相談出来る事も
Copyright Drecom Co., Ltd. All Rights Reserved. 36
まとめ
⁃ Elixirの導入に関する知見を共有しまし
た
⁃ まずは素振りから始めましょう
⁃ 「プログラミングElixir」は最適
⁃ OTPの理解は大切です
⁃ プロセス構造を理解すると捗ります

More Related Content

What's hot

ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsGo Sueyoshi (a.k.a sue445)
 
はじめての CircleCI
はじめての CircleCIはじめての CircleCI
はじめての CircleCIYosuke Mizutani
 
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側Takeshi HASEGAWA
 
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?Operation Lab, LLC.
 
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)Yosuke Hiraishi
 
Rancher による社内向けテナントサービス基盤
Rancher による社内向けテナントサービス基盤Rancher による社内向けテナントサービス基盤
Rancher による社内向けテナントサービス基盤Keita Shimada
 
Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介khisano
 
Android e2e testing at mercari
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercariVishal Banthia
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -Toshiyuki Hirata
 
これからのOpenShiftの話をしよう
これからのOpenShiftの話をしようこれからのOpenShiftの話をしよう
これからのOpenShiftの話をしようKazuto Kusama
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情Toshiyuki Hirata
 
Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発dena_study
 
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門Asami Abe
 
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokaiGo Sueyoshi (a.k.a sue445)
 
バージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフバージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフToshiyuki Hirata
 
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみましたYahoo!デベロッパーネットワーク
 
Infrastrucure as a CodeにおけるJenkinsの役割
Infrastrucure as a CodeにおけるJenkinsの役割Infrastrucure as a CodeにおけるJenkinsの役割
Infrastrucure as a CodeにおけるJenkinsの役割Takashi Honda
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCIToshiyuki Hirata
 

What's hot (20)

ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
Hello Java
Hello JavaHello Java
Hello Java
 
はじめての CircleCI
はじめての CircleCIはじめての CircleCI
はじめての CircleCI
 
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
 
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
 
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
インフラ構築とテストについて(ITインフラ業務自動化現状確認会)
 
Rancher による社内向けテナントサービス基盤
Rancher による社内向けテナントサービス基盤Rancher による社内向けテナントサービス基盤
Rancher による社内向けテナントサービス基盤
 
Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介
 
Android e2e testing at mercari
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercari
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 
これからのOpenShiftの話をしよう
これからのOpenShiftの話をしようこれからのOpenShiftの話をしよう
これからのOpenShiftの話をしよう
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情
 
Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発
 
2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門2015/11/15 Javaでwebアプリケーション入門
2015/11/15 Javaでwebアプリケーション入門
 
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
 
バージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフバージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフ
 
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
#jjug_ccc #ccc_f1 広告システム刷新の舞台裏 - PHPからJavaに変えてみました
 
Infrastrucure as a CodeにおけるJenkinsの役割
Infrastrucure as a CodeにおけるJenkinsの役割Infrastrucure as a CodeにおけるJenkinsの役割
Infrastrucure as a CodeにおけるJenkinsの役割
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCI
 

Viewers also liked

Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11Tsunenori Oohara
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
Error handling in Erlang and Scala
Error handling in Erlang and ScalaError handling in Erlang and Scala
Error handling in Erlang and ScalaMasahito Ikuta
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう
Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみようPythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう
Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう洋資 堅田
 
マイクロソフトが創る未来 医療編 20170401
マイクロソフトが創る未来 医療編 20170401マイクロソフトが創る未来 医療編 20170401
マイクロソフトが創る未来 医療編 20170401Aya Tokura
 
ぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまでぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまでShinichi Takahashi
 
ジャパリパークさいかいけーかく
ジャパリパークさいかいけーかくジャパリパークさいかいけーかく
ジャパリパークさいかいけーかくfurandon_pig
 
Webセキュリティと W3CとIETFの仕様
Webセキュリティと W3CとIETFの仕様Webセキュリティと W3CとIETFの仕様
Webセキュリティと W3CとIETFの仕様yuki-f
 
Delfina Gómez, la candidata desconocida
Delfina Gómez, la candidata desconocidaDelfina Gómez, la candidata desconocida
Delfina Gómez, la candidata desconocidaSusana Gallardo
 
Top 10 Digital Workplace Patterns #spscalgary
Top 10 Digital Workplace Patterns #spscalgaryTop 10 Digital Workplace Patterns #spscalgary
Top 10 Digital Workplace Patterns #spscalgaryKanwal Khipple
 
GroovyFX - Groove JavaFX
GroovyFX - Groove JavaFXGroovyFX - Groove JavaFX
GroovyFX - Groove JavaFXsascha_klein
 
Alejandro Fernandez vs Luis Miguel
Alejandro Fernandez vs Luis MiguelAlejandro Fernandez vs Luis Miguel
Alejandro Fernandez vs Luis MiguelSusana Gallardo
 
SORACOM interstellar 紹介資料
SORACOM interstellar 紹介資料SORACOM interstellar 紹介資料
SORACOM interstellar 紹介資料SORACOM,INC
 
Top Artificial Intelligence (AI) Startups Disrupting Retail
Top Artificial Intelligence (AI) Startups Disrupting RetailTop Artificial Intelligence (AI) Startups Disrupting Retail
Top Artificial Intelligence (AI) Startups Disrupting RetailNVIDIA
 
Apiのことはすべてシーマンが教えてくれた
Apiのことはすべてシーマンが教えてくれたApiのことはすべてシーマンが教えてくれた
Apiのことはすべてシーマンが教えてくれたHiroshi Hayakawa
 
機械学習の理論と実践
機械学習の理論と実践機械学習の理論と実践
機械学習の理論と実践Preferred Networks
 
10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
 10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot 10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
10 Things You Didn’t Know About Mobile Email from Litmus & HubSpotHubSpot
 
How to Earn the Attention of Today's Buyer
How to Earn the Attention of Today's BuyerHow to Earn the Attention of Today's Buyer
How to Earn the Attention of Today's BuyerHubSpot
 

Viewers also liked (20)

Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Error handling in Erlang and Scala
Error handling in Erlang and ScalaError handling in Erlang and Scala
Error handling in Erlang and Scala
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう
Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみようPythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう
Pythonで動かして学ぶ機械学習入門_予測モデルを作ってみよう
 
マイクロソフトが創る未来 医療編 20170401
マイクロソフトが創る未来 医療編 20170401マイクロソフトが創る未来 医療編 20170401
マイクロソフトが創る未来 医療編 20170401
 
ぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまでぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまで
 
ジャパリパークさいかいけーかく
ジャパリパークさいかいけーかくジャパリパークさいかいけーかく
ジャパリパークさいかいけーかく
 
Webセキュリティと W3CとIETFの仕様
Webセキュリティと W3CとIETFの仕様Webセキュリティと W3CとIETFの仕様
Webセキュリティと W3CとIETFの仕様
 
Delfina Gómez, la candidata desconocida
Delfina Gómez, la candidata desconocidaDelfina Gómez, la candidata desconocida
Delfina Gómez, la candidata desconocida
 
Top 10 Digital Workplace Patterns #spscalgary
Top 10 Digital Workplace Patterns #spscalgaryTop 10 Digital Workplace Patterns #spscalgary
Top 10 Digital Workplace Patterns #spscalgary
 
GroovyFX - Groove JavaFX
GroovyFX - Groove JavaFXGroovyFX - Groove JavaFX
GroovyFX - Groove JavaFX
 
Alejandro Fernandez vs Luis Miguel
Alejandro Fernandez vs Luis MiguelAlejandro Fernandez vs Luis Miguel
Alejandro Fernandez vs Luis Miguel
 
SORACOM interstellar 紹介資料
SORACOM interstellar 紹介資料SORACOM interstellar 紹介資料
SORACOM interstellar 紹介資料
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
 
Top Artificial Intelligence (AI) Startups Disrupting Retail
Top Artificial Intelligence (AI) Startups Disrupting RetailTop Artificial Intelligence (AI) Startups Disrupting Retail
Top Artificial Intelligence (AI) Startups Disrupting Retail
 
Apiのことはすべてシーマンが教えてくれた
Apiのことはすべてシーマンが教えてくれたApiのことはすべてシーマンが教えてくれた
Apiのことはすべてシーマンが教えてくれた
 
機械学習の理論と実践
機械学習の理論と実践機械学習の理論と実践
機械学習の理論と実践
 
10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
 10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot 10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
10 Things You Didn’t Know About Mobile Email from Litmus & HubSpot
 
How to Earn the Attention of Today's Buyer
How to Earn the Attention of Today's BuyerHow to Earn the Attention of Today's Buyer
How to Earn the Attention of Today's Buyer
 

Similar to Elixir-Conf-Japan-2017-session-ohr486

ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -Tomoya Kabe
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraNaotoshi Seo
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】  シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】  シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...Kaz Aiso
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方dena_study
 
マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞DMM.com
 
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)「AROW」お披露目(実用編)
「AROW」お披露目(実用編)Drecom Co., Ltd.
 
エンジニアという職業について
エンジニアという職業についてエンジニアという職業について
エンジニアという職業についてHisatoshi Kikumoto
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすShunsuke Maeda
 
こんな辛いテストはいやだ
こんな辛いテストはいやだ こんな辛いテストはいやだ
こんな辛いテストはいやだ Takuya Mikami
 
最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm晃 遠山
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconDeNA
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術dena_study
 
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~Recruit Technologies
 

Similar to Elixir-Conf-Japan-2017-session-ohr486 (20)

ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfra
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】  シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】  シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
 
DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方DeNA流cocos2d xとの付き合い方
DeNA流cocos2d xとの付き合い方
 
マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞
 
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)「AROW」お披露目(実用編)
「AROW」お披露目(実用編)
 
エンジニアという職業について
エンジニアという職業についてエンジニアという職業について
エンジニアという職業について
 
Klocworkのご紹介
Klocworkのご紹介Klocworkのご紹介
Klocworkのご紹介
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
こんな辛いテストはいやだ
こんな辛いテストはいやだ こんな辛いテストはいやだ
こんな辛いテストはいやだ
 
最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
RANCHERを使ったDev(Ops)
RANCHERを使ったDev(Ops)RANCHERを使ったDev(Ops)
RANCHERを使ったDev(Ops)
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術
 
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
 

More from Tsunenori Oohara

パンチラに関する考察
パンチラに関する考察パンチラに関する考察
パンチラに関する考察Tsunenori Oohara
 
Re:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LTRe:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LTTsunenori Oohara
 
失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発Tsunenori Oohara
 
running-elixir-in-production
running-elixir-in-productionrunning-elixir-in-production
running-elixir-in-productionTsunenori Oohara
 
Elixirと他言語の比較的紹介 ver.2
Elixirと他言語の比較的紹介ver.2Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介 ver.2Tsunenori Oohara
 
Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄Tsunenori Oohara
 
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)Tsunenori Oohara
 
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介Tsunenori Oohara
 

More from Tsunenori Oohara (20)

Elixirハンズオン2
Elixirハンズオン2Elixirハンズオン2
Elixirハンズオン2
 
meguro.rb LT
meguro.rb LTmeguro.rb LT
meguro.rb LT
 
Elixir解答
Elixir解答Elixir解答
Elixir解答
 
Elixir言語紹介
Elixir言語紹介Elixir言語紹介
Elixir言語紹介
 
パンチラに関する考察
パンチラに関する考察パンチラに関する考察
パンチラに関する考察
 
how-to-learn-elixir
how-to-learn-elixirhow-to-learn-elixir
how-to-learn-elixir
 
Re:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LTRe:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LT
 
失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発
 
Tokyoex6 EEx
Tokyoex6 EExTokyoex6 EEx
Tokyoex6 EEx
 
running-elixir-in-production
running-elixir-in-productionrunning-elixir-in-production
running-elixir-in-production
 
hello waf, hello phoenix
hello waf, hello phoenixhello waf, hello phoenix
hello waf, hello phoenix
 
tokyo.ex3 LT
tokyo.ex3 LTtokyo.ex3 LT
tokyo.ex3 LT
 
running web app on elixir
running web app on elixirrunning web app on elixir
running web app on elixir
 
Elixir lang bootstrap
Elixir lang bootstrapElixir lang bootstrap
Elixir lang bootstrap
 
Elixirと他言語の比較的紹介 ver.2
Elixirと他言語の比較的紹介ver.2Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介 ver.2
 
Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄
 
elixir in production
elixir in productionelixir in production
elixir in production
 
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)
 
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
 
地獄Spec
地獄Spec地獄Spec
地獄Spec
 

Elixir-Conf-Japan-2017-session-ohr486

  • 1. Copyright Drecom Co., Ltd. All Rights Reserved. 1 Rubyist |>(^o^)|> Alchemist 〜Elixirの採用からサービス稼働までの記録〜 ElixirConfJapan 2017 株式会社Drecom 大原常徳
  • 2. Copyright Drecom Co., Ltd. All Rights Reserved. 2 Agenda AboutMe |> 発表の趣旨 |> 導入事例紹介 |> 開発チーミング |> サービスのスケール |> サービスの運用 |> 教育とトレーニング |> 組織/コミュニティ/MeetUp |> まとめ
  • 3. Copyright Drecom Co., Ltd. All Rights Reserved. 3 AboutMe ⁃ Tsunenori Oohara(おーはら,ohr486) ⁃ Twitter: @ohrdev ⁃ tokyo.ex: 主催・運営 ⁃ ElixirConfJapan: 幹事チーム・運営 ⁃ JapanElixirAssociation: 理事 ⁃ 株式会社ドリコム ⁃ 基盤技術部 ⁃ 全社基盤システム、広告系サービス全般 ⁃ Elixir/Phoenixアプリを本番で開発・運用(約2 年 ⁃ SoftwareDesign2016/11,12 ⁃ [関数型言語]Elixirの始め方(前後)
  • 4. Copyright Drecom Co., Ltd. All Rights Reserved. 4 発表の趣旨 ⁃ ターゲット ⁃ Elixirの導入を検討している ⁃ プロダクションでElixirを使いたい ⁃ 中規模以上のElixirアプリを書いた事が ない ⁃ Elixirを使いたくなった ⁃ ゴール ⁃ 導入の為に、導入後に、どういう事をす るべきかをざっくりと把握する ⁃ 習得の為に何をすれば良いか把握する
  • 5. Copyright Drecom Co., Ltd. All Rights Reserved. 5 発表の趣旨 ⁃ 話すこと ⁃ 導入事例 ⁃ 導入の為にしたこと ⁃ 失敗、知見 ⁃ 日本のElixirコミュニティ事情 ⁃ 話さないこと ⁃ 前後のセッションで話した・話すテー マ ⁃ Elixirの採用理由(何故Elixirなのか ⁃ ErlangVM
  • 6. Copyright Drecom Co., Ltd. All Rights Reserved. 6 導入事例紹介 ⁃ 組織/チーム ⁃ 社内にRubyエンジニア多数(90%Rails製 ⁃ 開発チームは5人(自分以外はElixir未経験 ⁃ プロダクト ⁃ 広告サービス基盤 ⁃ Railsアプリのリプレースプロジェクト ⁃ 期間 ⁃ 開発: 6ヶ月 ⁃ 運用: 1年半(うち1年、新旧サービスを並 行稼働)
  • 7. Copyright Drecom Co., Ltd. All Rights Reserved. 7 導入事例紹介 ⁃ リプレースにあたっての要件 ⁃ サービスを絶対に停止してはいけない ⁃ 導入戦略 ⁃ マイクロサービス化する ⁃ 一部の(API)マイクロサービスから徐々 に適用 ⁃ AWSに乗る(スケールアップ/アウト機構
  • 8. Copyright Drecom Co., Ltd. All Rights Reserved. 8 App(Rails) App(Rails) アーキテクチャ ⁃ before cache App(Rails) DB(MySQL) queue(Redis) Batch(sidekiq) 止めてはいけないが! site req api req
  • 9. Copyright Drecom Co., Ltd. All Rights Reserved. 9 API(Elixir) API(Elixir) アーキテクチャ ⁃ after cache(Varnish) Manage(Rails) DB(MySQL) queue(Redis) Batch(sidekiq) API(Elixir) Front(Rails/js) DB(Redis) 安定 部分的にreplace 徐々にreplace site req api req
  • 10. Copyright Drecom Co., Ltd. All Rights Reserved. 10 アーキテクチャ ⁃ バッチ/非同期処理 ⁃ sidekiq: 非同期処理gem ⁃ exq: sidekiqのElixir実装 Manage(Rails) queue(Redis) Batch(sidekiq) API(Elixir) exq’s enqueue sidekiq’s enqueue sidekiq’s dequeue ActiveJob I/F
  • 11. Copyright Drecom Co., Ltd. All Rights Reserved. 11 導入事例紹介 ⁃ 以上のケースのプロジェクトで ⁃ 得られた知見 ⁃ 失敗 ⁃ やった事 等を、紹介していきます
  • 12. Copyright Drecom Co., Ltd. All Rights Reserved. 12 開発チーミング ⁃ チーミングにあたって注意した事 ⁃ 求められるElixir習熟度を意識 ⁃ 導入者(知見者)がボトルネックにならな い ⁃ (可能なら)インフラエンジニアを確保す る
  • 13. Copyright Drecom Co., Ltd. All Rights Reserved. 13 開発チーミング ⁃ 実務に求められるレベル感 ⁃ Lv.0: 触ったことが無い ⁃ Lv.1: コードが読める ⁃ Lv.2: 関数が書ける ⁃ Lv.3: モジュールが書ける ⁃ Lv.4: テストが書ける ⁃ Lv.5: 並行処理が書ける ⁃ Lv.6: フレームワークを使いこなせる ⁃ Lv.7: アプリの設計ができる ⁃ Lv.8: チューニング ・書籍 ・ペアプロ ・コードレ ビュー ・各種training ・ OTP ・テストツールの 理解・プロセスの理 解 実 務 の 壁 ・ErlangVMの理 解 モックライブラリ(meck)、E2Eテストツール
  • 14. Copyright Drecom Co., Ltd. All Rights Reserved. 14 開発チーミング ⁃ 導入者がボトルネックにならない対策 ⁃ 静的解析ツールを使ってレビューサポート ⁃ Style Check ⁃ dogma ⁃ credo ⁃ 静的型解析 ⁃ Dialyzer ⁃ 自動化/CI ⁃ 自動テスト(ExUnit) ⁃ 静的解析 をCIに組み込む →初期段階で組み込まなかった為、大量のwarningが発生 ⁃ レビューアーを増やす ・credoのほうがちょっと教 育的 ・とても遅いのでCIで回すのが 良い
  • 15. Copyright Drecom Co., Ltd. All Rights Reserved. 15 開発チーミング ⁃ レビューアーに求められる知識 ⁃ Elixirらしいコード ⁃ 関数プログラミング ⁃ ライブラリの知識(車輪の再発明の回避) ⁃ awesome-elixir ⁃ awesome-erlang ⁃ hex.pm ⁃ 並行処理の表現方法 ⁃ OTPの利用方法 ⁃ 性能の評価 ・既存モジュールが無い か?
  • 16. Copyright Drecom Co., Ltd. All Rights Reserved. 16 開発チーミング ⁃ インフラエンジニアの必要性 ⁃ Elixirならではのインフラ課題がある ⁃ deploy方法にデファクトが存在しない ⁃ exrm(depricated!)/distillery ⁃ 無停止更新 ⁃ ノード(ErlangVM)のクラスタリング ⁃ 監視 ⁃ ErlangVMの監視 ⁃ Supervisorを含むサービスの監視
  • 17. Copyright Drecom Co., Ltd. All Rights Reserved. 17 サービスのスケール ⁃ 「スケール」とは ⁃ トラフィックの増加 ⁃ ボトルネックポイント
  • 18. Copyright Drecom Co., Ltd. All Rights Reserved. 18 サービスのスケール ⁃ トラフィックの増加 ⁃ リリースから2年で約50倍程 ⁃ コードの改変無しで対応 ⁃ スケールアップ ⁃ コア数を増やせば(ある程度)線形に ⁃ ErlangVMの恩恵 ⁃ スケールアウト ⁃ AWSならALB、AutoScalingGroupで対応可
  • 19. Copyright Drecom Co., Ltd. All Rights Reserved. 19 サービスのスケール ⁃ ボトルネックポイント ⁃ データベースへのアクセス ⁃ コネクション/プロセスプーリング ⁃ poolboy: https://github.com/devinus/poolboy →Erlangのライブラリ、Elixirライブラリ内での利用多 い →下手なパラメータ設定によっては性能劣化の原因に →pool_size, max_overflow, etc
  • 20. Copyright Drecom Co., Ltd. All Rights Reserved. 20 サービスの運用 ⁃ 「運用」とは ⁃ 機能開発、テスト ⁃ 監視 ⁃ バージョンアップ
  • 21. Copyright Drecom Co., Ltd. All Rights Reserved. 21 サービスの運用 ⁃ 機能開発・テスト ⁃ TDDで開発 ⁃ Red-Green-Refactor ⁃ 並行化の列を加えたマトリクス ⁃ 逐次処理・並行処理 ⁃ Elixirは並行処理を簡単に書けるが、逐 次処理はもっと簡単に書ける(書いてし まう)
  • 22. Copyright Drecom Co., Ltd. All Rights Reserved. 22 サービスの運用 ⁃ TDD黄金の回転 きれ い 汚い 動かな い 動く Red Green Refacto r
  • 23. Copyright Drecom Co., Ltd. All Rights Reserved. 23 サービスの運用 ⁃ TDD黄金の回転(並行版) きれ い 汚い 動かな い 動く 並行に動 く Red Green Refacto r Concurrenize
  • 24. Copyright Drecom Co., Ltd. All Rights Reserved. 24 サービスの運用 ⁃ 監視 ⁃ Supervisorがワーカーを再起動するので通 常の死活監視ではサービスの瞬死を完全に 検知できない ⁃ 1分に1回のHeartBeatだとタイミングによってはスル ー ⁃ →見かけ上は正常なので異常を検知できない ⁃ イベント単位での通知、KPI値の異常値に よる検知 ⁃ Sentry ⁃ https://github.com/getsentry/sentry-elixir ⁃ プロセスのcrash時に通知 ⁃ →通知先(のsentry)へのDDoSになりかねない ⁃ re:dash ⁃ aleart機能
  • 25. Copyright Drecom Co., Ltd. All Rights Reserved. 25 サービスの運用 ⁃ バージョンアップの頻度 2014/9/10 2017/3/14 v1.0 R17 v1.4 R19 v1.2 R18 2016/1/1 2014/9/10 v1.0 2015/9/25 v1.1 2016/1/1 v1.2 2016/6/21 v1.3 2017/1/5 v1.4 2014/9/10 R17.1 2015/6/24 R18 2016/6/21 R19 2017/4/1 v1.4.2 2017/4/1 R19.3
  • 26. Copyright Drecom Co., Ltd. All Rights Reserved. 26 サービスの運用 ⁃ バージョンアップ ⁃ Elixir、Erlangそれぞれ別々にバージョンア ップ ⁃ ただし依存関係あり(ex. Elixir 1.4.2 のコンパイルには 、 Erlang R18.0 以上必須 ) ⁃ →バージョン管理ツールを導入していなかったので、 バージョンアップ作業が煩雑 ⁃ →kerl, exenvを導入 ⁃ 目安 ⁃ Erlang: 年1回のメジャーバージョンアップ ⁃ Elixir: 年2回のマイナーバージョンアップ ⁃ 環境をイメージ/コンテナにして運用 ⁃ 特定のバージョン毎のテストやリリースができるよう に ⁃ script -> vagrant -> ansible -> docker
  • 27. Copyright Drecom Co., Ltd. All Rights Reserved. 27 教育とトレーニング ⁃ よくある質問 ⁃ 「Elixirでコードを書く為に、Erlangの知 識は必要ですか?」 ⁃ 回答(異論は認める) ⁃ 設計時にOTPの知識が必要です ⁃ 何かとErlangのコードを読む機会はあり ます ⁃ デバッグ、etc ⁃ 完全にF/Wに乗れば機会は少ないかもで すが、あったほうが圧倒的に「安心」で す
  • 28. Copyright Drecom Co., Ltd. All Rights Reserved. 28 教育とトレーニング ⁃ 目的 ⁃ Elixirで「業務」ができるレベルまで、 エンジニアのスキルを引き上げる ⁃ やったこと ⁃ 読書会/輪読会 ⁃ ペアプロ ⁃ PRレビュー ・独習/勉強会/ハンズオ ン ・業務と並 行
  • 29. Copyright Drecom Co., Ltd. All Rights Reserved. 29 教育とトレーニング ⁃ 読んだ(読んでもらった)書籍 ⁃ 「プログラミングElixir」 Dave Thomas(著),笹田耕一・鳥井雪(翻訳), オーム社,2016 ⁃ 「すごいErlangゆかいに学ぼう!」 Fred Hebert(著),山口能迪(翻訳), オーム社,2014 ⁃ 「プログラミングErlang」 Joe Armstrong(著),柳原一矢(翻訳), オーム社,2008
  • 30. Copyright Drecom Co., Ltd. All Rights Reserved. 30 おまけ Thank You!
  • 31. Copyright Drecom Co., Ltd. All Rights Reserved. 31 教育とトレーニング ⁃ 学ぶべき事項 ⁃ Elixir ⁃ Erlang/OTP ⁃ アクターモデル(プロセスの扱い) ⁃ 並行プログラミング ⁃ 関数型言語 ⁃ テストフレームワークの使い方 ・Haskellの入門 書! ・Elixir 本 ・Erlang 本 ・meckのドキュメント ・テストライブラリのド キュメント
  • 32. Copyright Drecom Co., Ltd. All Rights Reserved. 32 組織/コミュニティ/MeetUp ⁃ JapanElixirAssociation ⁃ ElixirConfJapanの主催・運営 ⁃ 2018年もConfを予定 ⁃ tokyo.ex ⁃ 東京近辺のElixir/Erlang関連イベント,隔月 ⁃ https://beam-lang.connpass.com/ ⁃ Sapporo.beam ⁃ 札幌近辺のBeam系言語meetup,毎週 ⁃ http://sapporo-beam.github.io/ ⁃ Idobataでリモート参加可
  • 33. Copyright Drecom Co., Ltd. All Rights Reserved. 33 組織/コミュニティ/MeetUp ⁃ Elixir関連イベント(参加者20人以上) ElixirConfJapa n
  • 34. Copyright Drecom Co., Ltd. All Rights Reserved. 34 組織/コミュニティ/MeetUp ⁃ Elixir関連イベント(参加者20人以上) tokyo.exとしては 今後ハンズオンに 力を入れていきたい ex) Erlangハンズオン
  • 35. Copyright Drecom Co., Ltd. All Rights Reserved. 35 組織/コミュニティ/MeetUp ⁃ 是非イベントへお越しください ⁃ 来年もElixirConfJapanを予定しています ⁃ 東京近辺在住ならtokyo.exへ ⁃ 知見者が多いので相談出来る事も
  • 36. Copyright Drecom Co., Ltd. All Rights Reserved. 36 まとめ ⁃ Elixirの導入に関する知見を共有しまし た ⁃ まずは素振りから始めましょう ⁃ 「プログラミングElixir」は最適 ⁃ OTPの理解は大切です ⁃ プロセス構造を理解すると捗ります