SlideShare a Scribd company logo
1 of 43
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
2017/02/20
決済金融から始める
データドリブン
カンパニー
江藤 徳宏
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 2
自己紹介
• 担当サービス
• Yahoo! ウォレット
• 本人確認
• 役割
• 運用エンジニア & 保守開発
• 学生時代の専門
• 数理科学(非線形偏微分方程式)
• 趣味
• ランニング(ラン歴3年、東京マラソン2015完走)
• スマホゲーム(パズドラ、PokemonGO)
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 3
Yahoo! ウォレット
働いているところ
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 4
データドリブン企業
ここ1年で、「ネット企業」から「データドリブン企業」へ!
ほとんどのサービスで、
データを利活用できるようにする
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 5
データドリブンへの路
データ利活用しよう!
そのためのマインドマップを作成しまし
た
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 6
データドリブンへの路
CI/CD
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 7
CI/CD
• テスト (commit build)
• コミットされたソースがテストされる
CI(Continuous Integration)
↑これらを自動的に行う!
• パッケージング (component build)
• レビューが完了したソースはメインブランチに
マージされる
• メインブランチへの変更をテストする
• テスト成功時のみ、パッケージを作成する
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 8
CI/CD
• アセンブリ(assembly build)
• パッケージ群の構成リストを作成する
CD(Continuous Delivery)
↑これらを自動的に行う!
• デプロイ(deploy build)
• アセンブリで作成された構成リストにてサーバへの
リリースを実施
• まっさらなサーバであれば、サービスが利用できる
状態に持っていく
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 9
CI/CD
• ソフト面(CI)
• テストがない
• テストなど必要ないと思っている
• ハード面(CD)
• 構成管理ができていない
• /etc/hostsは?
• routeは?
• LANGは?
• ディレクトリを手動で作っている
• リリース方法が原始的(手置き)
CI/CD 阻害要因
レガシーシステム
(技術的負債)
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 10
今回のLTの目的
• 既存(古い)システム
• レガシーコードで書かれているものが多い
• テストがないので、改修が困難
• レガシーシステムと戦う方法
• テストのすすめ
• 構成管理のすすめ
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
CI
テストのすすめ
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 12
テストしづらいコード
モック化したい箇所が
ベタ書きだったら・・・
※実際の現場は、
こんなものではない
ですよ。。
この部分だけ
ごまかしたい
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 13
レガシーコードを斬る!
よく使うモッキングフレームワークその1
Phake
https://github.com/mlively/Phake
% cat composer.json
{
"require-dev": {
"phake/phake": "@stable”
}
}
% composer install
★導入方法
特徴
• MockObjectと似ている
• 1メソッドだけモックにすることが可能
• コールバック関数への置換
• 呼び出し検証機能
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 14
レガシーコードを斬る!
ソース
まるごと関数でラップする
protected以上とする
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 15
レガシーコードを斬る!
テスト
テスト対象クラスをpartialMockメソッドでインスタンス化
どの関数がどの引数で呼ばれたときに何がしを返す
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 16
レガシーコードを斬る!
よく使うモッキングフレームワークその2
AspectMock
https://github.com/Codeception/AspectMock
% cat composer.json
{
"require-dev": {
"codeception/aspect-mock": "*"
}
}
% composer install
★導入方法
特徴
• グローバル関数をドラスティックに変更
• コールバック関数への置換
• 呼び出し検証機能
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 17
レガシーコードを斬る!
ソース
名前空間を指定する
この関数だけモック化
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 18
レガシーコードを斬る!
テスト
名前空間、関数名、返却値を指定するだけ。
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 19
テストのまとめ
• コミットされたソースについては、全部グリーンになること
• 何をテストしたいのか、観点を明確にする
• MockObjectでテストできないようなコードは書かない
(できればTDD実践!)
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 20
テストのまとめ
レガシーコードに出会ったら・・・・・・
• 封印する
• フルスクラッチ
• 手を加えるならば必ずテストを書く
• in/outテスト
• 適切なモッキングフレームワークを使う
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
CD
構成管理のすすめ
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 22
CD
構成管理
• システムの構成要素を一元管理する
• ネットワーク設定
• アカウント、sudo権限
• hosts
• syslog
• パッケージ群(独自、rpm) etc…
管理するだけでなく、簡単に適用したい
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 23
Chef
• システムのあるべき姿を「リソース」という単位で管理
Yahoo!ウォレットでは、Chefを導入中
• 「リソース」を束ねて、「レシピ」にまとめる
• 「レシピ」を適用する機能群を「ロール」にまとめる
• デプロイ先のサーバ群を「環境」にまとめ、ロールを紐づけ
る
• デプロイを実行する
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 24
Chef
Web AP DB
ATS
Apache
PHP
Web APL
ATS
Apache
Jetty
Logic APL
MySQL Server
ATS = Apache Traffic Server
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 25
Chef(環境とロール)
web-dev db-dev開発環境
本番環境 web-prod ap-prod db-prod
web-role ap-role db-role
ap-dev
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 26
Chef(レシピ)
web-recipe ap-recipe db-recipe
ATS install
Apache install
PHP install Jetty install
Web APL install Logic APL install MySQL install
レシピは再利用できるように、細かく分けるのがコツ
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 27
Chef(ロールとレシピ)
web-dev ap-dev db-dev
web-prod ap-prod db-prod
web-role ap-role db-role
web-recipe ap-
recipe
db-
recipe
run_list run_list run_list
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 28
Chef(CI + デプロイ)
web-dev
web-role
web-recipe
PC
Chef-client
Chef-server
git push
Chefdk
git.corp
web-dev-env
web-dev
CI-tool
web hook
Upload recipe
knife ssh
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 29
Chef(課題)
web01
web-role
web-recipe
Chef-server
web-prod-env
web01
LB
web04web02 web03
Internet
CI-tool
web02
web03 web04
web-prod-envへリリース!
環境に紐づく全ノード取得
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 30
Chef(課題)
web01
LB
web04web02 web03
Internet
CI-tool
サービスアウト&リリース
なんらかの理由でデプロイ失敗。。
web-role
web-recipe
Chef-server
web-prod-env
web01 web02
web03 web04
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 31
Chef(課題)
web01
LB
web04web02 web03
Internet
CI-tool
サービスアウト&リリース
web-role
web-recipe
Chef-server
web-prod-env
web01 web02
web03 web04
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 32
Chef(課題)
web01
LB
web04web02 web03
Internet
CI-tool
サービスアウト&リリース
web-role
web-recipe
Chef-server
web-prod-env
web01 web02
web03 web04
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 33
Chef(課題)
web01
LB
web04web02 web03
Internet
CI-tool
サービスアウト&リリース
web-role
web-recipe
Chef-server
web-prod-env
web01 web02
web03 web04
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 34
Chef(課題)
web01
LB
web04web02 web03
Internet
CI-tool
見事に全滅
web-role
web-recipe
Chef-server
web-prod-env
web01 web02
web03 web04
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 35
Chef(課題解決)
web01
web-role
web-recipe
Chef-server
LB
web04web02 web03
Internet
CI-tool
web03 web04
前半の環境に紐づく全ノード取得 web-prod-env-1
web-prod-env-2
web01 web02
前半だけリリース!
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 36
Chef(課題解決)
web01
LB
web04web02 web03
Internet
CI-tool
サービスアウト&リリース
環境を分けよう! web-role
web-recipe
Chef-server
web03 web04
web-prod-env-1
web-prod-env-2
web01 web02
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 37
Chef(課題解決)
この件についてはissueが上がっているので、
きっと近いうちに修正されるはず!
https://github.com/chef/chef/issues/5399
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 38
Chef(cookbook)
Rubyとリソースの組み合わせ
レシピ/recipes
リソース1 リソース2
リソース3 リソース4
材料1
材料集/files
リリースする資材
テンプレート1
材料2
これらを総称して、cookbookと呼ぶ
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 39
Chef(ATSを入れるレシピ)
%w(pkgconfig libtool gcc make openssl tcl pcre libcap
flex hwloc lua ncurses curl).each do |pkg|
yum_package pkg do
action :install
end
end
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 40
Chef(ATSを入れるレシピ)
remote_file '/tmp/master.zip' do
source 'https://github.com/apache/trafficserver/archive/master.zip'
mode '0444'
end
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 41
Chef(ATSを入れるレシピ)
execute 'expand ATS' do
command <<-EOF
cd /tmp/; unzip master.zip
cd trafficserver-master; autoreconf -if
./configure --prefix=/opt/ats
make; make check; make install
EOF
end
Install_ats.rb
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 42
今後のロードマップ
• eコマース事業拡大に伴い、ウォレットへの需要は高
まる
• 売り場での決済時アクセスが増える
• パーソナライズのための情報提供を安全に完全に行う
• プロダクトの品質を、高カバレッジな自動テストで
担保
• 実機から仮想環境へ。ペットから家畜への移行が必
要
• より正確で迅速なデプロイ作業をChefで実現
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
情報技術で
人々のマネーライフの課題を解決する
決済金融カンパニー
43

More Related Content

What's hot

ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術Yahoo!デベロッパーネットワーク
 
Firebaseで作られたCMS『Flamelink』を試してみた
Firebaseで作られたCMS『Flamelink』を試してみたFirebaseで作られたCMS『Flamelink』を試してみた
Firebaseで作られたCMS『Flamelink』を試してみたIwamoto Nana
 
行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋
行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋
行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋Yahoo!デベロッパーネットワーク
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & AppsGoogle Cloud Platform - Japan
 
スポーツナビアプリ スモールチームでのアプリ強化の進め方 #yjcamp
スポーツナビアプリ スモールチームでのアプリ強化の進め方 #yjcampスポーツナビアプリ スモールチームでのアプリ強化の進め方 #yjcamp
スポーツナビアプリ スモールチームでのアプリ強化の進め方 #yjcampYahoo!デベロッパーネットワーク
 
QAエンジニアを通じて 弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜
QAエンジニアを通じて弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜QAエンジニアを通じて弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜
QAエンジニアを通じて 弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜gree_tech
 
Googleスプレッドシートで管理している家計簿をFirebaseを使ってWEBアプリ化してみた件
Googleスプレッドシートで管理している家計簿をFirebaseを使ってWEBアプリ化してみた件Googleスプレッドシートで管理している家計簿をFirebaseを使ってWEBアプリ化してみた件
Googleスプレッドシートで管理している家計簿をFirebaseを使ってWEBアプリ化してみた件Iwamoto Nana
 
Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていること
Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていることYahoo!ブラウザーアプリのプロダクトマネージャーが考えていること
Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていることYahoo!デベロッパーネットワーク
 
Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Alisa Sasaki
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Tokuhiro Matsuno
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすShunsuke Maeda
 
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasiaサンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasiaMasayuki Ishikawa
 
長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化gree_tech
 
DataEngConf NYC’18 セッションサマリー #2
DataEngConf NYC’18 セッションサマリー #2DataEngConf NYC’18 セッションサマリー #2
DataEngConf NYC’18 セッションサマリー #2gree_tech
 

What's hot (20)

市場で勝ち続けるための品質とテストの技術①
市場で勝ち続けるための品質とテストの技術①市場で勝ち続けるための品質とテストの技術①
市場で勝ち続けるための品質とテストの技術①
 
私たち企業がアクセシビリティに取り組む理由 #accfes
私たち企業がアクセシビリティに取り組む理由 #accfes私たち企業がアクセシビリティに取り組む理由 #accfes
私たち企業がアクセシビリティに取り組む理由 #accfes
 
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
 
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT⑦
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT⑦Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT⑦
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)LT⑦
 
Firebaseで作られたCMS『Flamelink』を試してみた
Firebaseで作られたCMS『Flamelink』を試してみたFirebaseで作られたCMS『Flamelink』を試してみた
Firebaseで作られたCMS『Flamelink』を試してみた
 
行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋
行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋
行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
 
スポーツナビアプリ スモールチームでのアプリ強化の進め方 #yjcamp
スポーツナビアプリ スモールチームでのアプリ強化の進め方 #yjcampスポーツナビアプリ スモールチームでのアプリ強化の進め方 #yjcamp
スポーツナビアプリ スモールチームでのアプリ強化の進め方 #yjcamp
 
YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略
 
QAエンジニアを通じて 弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜
QAエンジニアを通じて弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜QAエンジニアを通じて弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜
QAエンジニアを通じて 弊社の開発環境がより良くなる日 〜 OpenSTF 編 〜
 
Googleスプレッドシートで管理している家計簿をFirebaseを使ってWEBアプリ化してみた件
Googleスプレッドシートで管理している家計簿をFirebaseを使ってWEBアプリ化してみた件Googleスプレッドシートで管理している家計簿をFirebaseを使ってWEBアプリ化してみた件
Googleスプレッドシートで管理している家計簿をFirebaseを使ってWEBアプリ化してみた件
 
decode17
decode17decode17
decode17
 
Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていること
Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていることYahoo!ブラウザーアプリのプロダクトマネージャーが考えていること
Yahoo!ブラウザーアプリのプロダクトマネージャーが考えていること
 
Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
 
Presto in Yahoo! JAPAN #yjdsnight
Presto in Yahoo! JAPAN #yjdsnightPresto in Yahoo! JAPAN #yjdsnight
Presto in Yahoo! JAPAN #yjdsnight
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasiaサンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
 
長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化
 
DataEngConf NYC’18 セッションサマリー #2
DataEngConf NYC’18 セッションサマリー #2DataEngConf NYC’18 セッションサマリー #2
DataEngConf NYC’18 セッションサマリー #2
 

Similar to 決済金融から始めるデータドリブンカンパニー

Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo!デベロッパーネットワーク
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
 
Datadog monitoring with HashiCorp
Datadog monitoring with HashiCorpDatadog monitoring with HashiCorp
Datadog monitoring with HashiCorpMasatomo Ito
 
Datadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackDatadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackMasatomo Ito
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップKoichiro Sumi
 
Effective web performance tuning for smartphone
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphonedena_study
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
IBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようIBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようTakuji Kawata
 
スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果Koichiro Sumi
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容Tomokazu Kizawa
 
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?Developers Summit
 
ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場Shota Suzuki
 
Talk 1「データインテグレーションとは何か」
Talk 1「データインテグレーションとは何か」Talk 1「データインテグレーションとは何か」
Talk 1「データインテグレーションとは何か」Takeshi Akutsu
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnightヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnightYahoo!デベロッパーネットワーク
 
20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe MagentoHirokazu Nishi
 

Similar to 決済金融から始めるデータドリブンカンパニー (20)

Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
Datadog monitoring with HashiCorp
Datadog monitoring with HashiCorpDatadog monitoring with HashiCorp
Datadog monitoring with HashiCorp
 
2018/1/30 Django勉強会
2018/1/30 Django勉強会2018/1/30 Django勉強会
2018/1/30 Django勉強会
 
Datadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stackDatadog monitoring with HashiCorp stack
Datadog monitoring with HashiCorp stack
 
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_cccSpring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
Design pattern in presto source code
Design pattern in presto source codeDesign pattern in presto source code
Design pattern in presto source code
 
Effective web performance tuning for smartphone
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphone
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
IBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみようIBM Blluemix を Pepper とつないでみよう
IBM Blluemix を Pepper とつないでみよう
 
スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容
 
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
 
ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場ハイブリットソーシャルゲームの現場
ハイブリットソーシャルゲームの現場
 
Talk 1「データインテグレーションとは何か」
Talk 1「データインテグレーションとは何か」Talk 1「データインテグレーションとは何か」
Talk 1「データインテグレーションとは何か」
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnightヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight
 
20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento20170626 さくらインターネット Stripe Magento
20170626 さくらインターネット Stripe Magento
 

決済金融から始めるデータドリブンカンパニー

  • 1. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 2017/02/20 決済金融から始める データドリブン カンパニー 江藤 徳宏
  • 2. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 2 自己紹介 • 担当サービス • Yahoo! ウォレット • 本人確認 • 役割 • 運用エンジニア & 保守開発 • 学生時代の専門 • 数理科学(非線形偏微分方程式) • 趣味 • ランニング(ラン歴3年、東京マラソン2015完走) • スマホゲーム(パズドラ、PokemonGO)
  • 3. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 3 Yahoo! ウォレット 働いているところ
  • 4. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 4 データドリブン企業 ここ1年で、「ネット企業」から「データドリブン企業」へ! ほとんどのサービスで、 データを利活用できるようにする
  • 5. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 5 データドリブンへの路 データ利活用しよう! そのためのマインドマップを作成しまし た
  • 6. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 6 データドリブンへの路 CI/CD
  • 7. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 7 CI/CD • テスト (commit build) • コミットされたソースがテストされる CI(Continuous Integration) ↑これらを自動的に行う! • パッケージング (component build) • レビューが完了したソースはメインブランチに マージされる • メインブランチへの変更をテストする • テスト成功時のみ、パッケージを作成する
  • 8. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 8 CI/CD • アセンブリ(assembly build) • パッケージ群の構成リストを作成する CD(Continuous Delivery) ↑これらを自動的に行う! • デプロイ(deploy build) • アセンブリで作成された構成リストにてサーバへの リリースを実施 • まっさらなサーバであれば、サービスが利用できる 状態に持っていく
  • 9. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 9 CI/CD • ソフト面(CI) • テストがない • テストなど必要ないと思っている • ハード面(CD) • 構成管理ができていない • /etc/hostsは? • routeは? • LANGは? • ディレクトリを手動で作っている • リリース方法が原始的(手置き) CI/CD 阻害要因 レガシーシステム (技術的負債)
  • 10. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 10 今回のLTの目的 • 既存(古い)システム • レガシーコードで書かれているものが多い • テストがないので、改修が困難 • レガシーシステムと戦う方法 • テストのすすめ • 構成管理のすすめ
  • 11. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. CI テストのすすめ
  • 12. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 12 テストしづらいコード モック化したい箇所が ベタ書きだったら・・・ ※実際の現場は、 こんなものではない ですよ。。 この部分だけ ごまかしたい
  • 13. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 13 レガシーコードを斬る! よく使うモッキングフレームワークその1 Phake https://github.com/mlively/Phake % cat composer.json { "require-dev": { "phake/phake": "@stable” } } % composer install ★導入方法 特徴 • MockObjectと似ている • 1メソッドだけモックにすることが可能 • コールバック関数への置換 • 呼び出し検証機能
  • 14. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 14 レガシーコードを斬る! ソース まるごと関数でラップする protected以上とする
  • 15. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 15 レガシーコードを斬る! テスト テスト対象クラスをpartialMockメソッドでインスタンス化 どの関数がどの引数で呼ばれたときに何がしを返す
  • 16. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 16 レガシーコードを斬る! よく使うモッキングフレームワークその2 AspectMock https://github.com/Codeception/AspectMock % cat composer.json { "require-dev": { "codeception/aspect-mock": "*" } } % composer install ★導入方法 特徴 • グローバル関数をドラスティックに変更 • コールバック関数への置換 • 呼び出し検証機能
  • 17. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 17 レガシーコードを斬る! ソース 名前空間を指定する この関数だけモック化
  • 18. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 18 レガシーコードを斬る! テスト 名前空間、関数名、返却値を指定するだけ。
  • 19. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 19 テストのまとめ • コミットされたソースについては、全部グリーンになること • 何をテストしたいのか、観点を明確にする • MockObjectでテストできないようなコードは書かない (できればTDD実践!)
  • 20. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 20 テストのまとめ レガシーコードに出会ったら・・・・・・ • 封印する • フルスクラッチ • 手を加えるならば必ずテストを書く • in/outテスト • 適切なモッキングフレームワークを使う
  • 21. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. CD 構成管理のすすめ
  • 22. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 22 CD 構成管理 • システムの構成要素を一元管理する • ネットワーク設定 • アカウント、sudo権限 • hosts • syslog • パッケージ群(独自、rpm) etc… 管理するだけでなく、簡単に適用したい
  • 23. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 23 Chef • システムのあるべき姿を「リソース」という単位で管理 Yahoo!ウォレットでは、Chefを導入中 • 「リソース」を束ねて、「レシピ」にまとめる • 「レシピ」を適用する機能群を「ロール」にまとめる • デプロイ先のサーバ群を「環境」にまとめ、ロールを紐づけ る • デプロイを実行する
  • 24. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 24 Chef Web AP DB ATS Apache PHP Web APL ATS Apache Jetty Logic APL MySQL Server ATS = Apache Traffic Server
  • 25. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 25 Chef(環境とロール) web-dev db-dev開発環境 本番環境 web-prod ap-prod db-prod web-role ap-role db-role ap-dev
  • 26. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 26 Chef(レシピ) web-recipe ap-recipe db-recipe ATS install Apache install PHP install Jetty install Web APL install Logic APL install MySQL install レシピは再利用できるように、細かく分けるのがコツ
  • 27. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 27 Chef(ロールとレシピ) web-dev ap-dev db-dev web-prod ap-prod db-prod web-role ap-role db-role web-recipe ap- recipe db- recipe run_list run_list run_list
  • 28. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 28 Chef(CI + デプロイ) web-dev web-role web-recipe PC Chef-client Chef-server git push Chefdk git.corp web-dev-env web-dev CI-tool web hook Upload recipe knife ssh
  • 29. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 29 Chef(課題) web01 web-role web-recipe Chef-server web-prod-env web01 LB web04web02 web03 Internet CI-tool web02 web03 web04 web-prod-envへリリース! 環境に紐づく全ノード取得
  • 30. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 30 Chef(課題) web01 LB web04web02 web03 Internet CI-tool サービスアウト&リリース なんらかの理由でデプロイ失敗。。 web-role web-recipe Chef-server web-prod-env web01 web02 web03 web04
  • 31. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 31 Chef(課題) web01 LB web04web02 web03 Internet CI-tool サービスアウト&リリース web-role web-recipe Chef-server web-prod-env web01 web02 web03 web04
  • 32. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 32 Chef(課題) web01 LB web04web02 web03 Internet CI-tool サービスアウト&リリース web-role web-recipe Chef-server web-prod-env web01 web02 web03 web04
  • 33. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 33 Chef(課題) web01 LB web04web02 web03 Internet CI-tool サービスアウト&リリース web-role web-recipe Chef-server web-prod-env web01 web02 web03 web04
  • 34. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 34 Chef(課題) web01 LB web04web02 web03 Internet CI-tool 見事に全滅 web-role web-recipe Chef-server web-prod-env web01 web02 web03 web04
  • 35. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 35 Chef(課題解決) web01 web-role web-recipe Chef-server LB web04web02 web03 Internet CI-tool web03 web04 前半の環境に紐づく全ノード取得 web-prod-env-1 web-prod-env-2 web01 web02 前半だけリリース!
  • 36. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 36 Chef(課題解決) web01 LB web04web02 web03 Internet CI-tool サービスアウト&リリース 環境を分けよう! web-role web-recipe Chef-server web03 web04 web-prod-env-1 web-prod-env-2 web01 web02
  • 37. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 37 Chef(課題解決) この件についてはissueが上がっているので、 きっと近いうちに修正されるはず! https://github.com/chef/chef/issues/5399
  • 38. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 38 Chef(cookbook) Rubyとリソースの組み合わせ レシピ/recipes リソース1 リソース2 リソース3 リソース4 材料1 材料集/files リリースする資材 テンプレート1 材料2 これらを総称して、cookbookと呼ぶ
  • 39. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 39 Chef(ATSを入れるレシピ) %w(pkgconfig libtool gcc make openssl tcl pcre libcap flex hwloc lua ncurses curl).each do |pkg| yum_package pkg do action :install end end
  • 40. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 40 Chef(ATSを入れるレシピ) remote_file '/tmp/master.zip' do source 'https://github.com/apache/trafficserver/archive/master.zip' mode '0444' end
  • 41. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 41 Chef(ATSを入れるレシピ) execute 'expand ATS' do command <<-EOF cd /tmp/; unzip master.zip cd trafficserver-master; autoreconf -if ./configure --prefix=/opt/ats make; make check; make install EOF end Install_ats.rb
  • 42. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 42 今後のロードマップ • eコマース事業拡大に伴い、ウォレットへの需要は高 まる • 売り場での決済時アクセスが増える • パーソナライズのための情報提供を安全に完全に行う • プロダクトの品質を、高カバレッジな自動テストで 担保 • 実機から仮想環境へ。ペットから家畜への移行が必 要 • より正確で迅速なデプロイ作業をChefで実現
  • 43. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 情報技術で 人々のマネーライフの課題を解決する 決済金融カンパニー 43