Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Perlがメインじゃない

現場でもPerlを使う

(AdTech現場編)
masartz@VOYAGE GROUP

YAPC::Asia 2015 08/22
自己紹介
• masartz
• http://search.cpan.org/
masartz/
• https://github.com/
masartz
• VOYAGE GROUP

adingo -> fluct
先ほどのセッションに続き確認ですが、

こちらでお間違いではないですか?
結論
• 言語が変わっても求められる事は変わらない
• 言語に関わらずできること/しなければならない
ことはある
• 無駄な部分はなるべくなくしていこう
• そのために自分の持っている技術を使い、また
その技術の幅を広げよう
前提
• What s SSP?
• What s fluct?
• How Architecture Works?
What s SSP
メディア

(媒体)
SSP
Adnetwork
or
DSP
広告主
What s fluct
本日のお品書き
1. Perlの現場でやってた事を

PHPの現場でもやった話
2. PHPの現場で書いたものを

Perlにバックポートした話
3. Rubyの現場で暫定対応をPerlでやった話
4. まとめ
Perlの現場でやってた事を
PHPの現場でもやった話
共通している課題
• 「こうしたい」、「こうなったら良い」に対して

現状がそれを阻む制約を抱えている
• 何らかの線引きをしないと、制約は加速していく
「現状○○なんだけど、いずれxxしたい」

 という時のアプローチ
http://techlog.voyagegroup.com/entry/
2015/05/01/150606
何をしたか?どうなったか?
• 媒体社様向けの管理画面用リポジトリにおいて、
PSR-2に沿う事をコードレビュー時に目視確認
と手動修正によって行っていた
• 既存ファイルを全て修正して、php-cs-fixerが使
える状況を作った
• 開発時...
Perlの現場では?
• 古いライブラリで、社内のガイドラインに沿ってない
ファイルがたくさんあった
• Test::CodingStyle( https://github.com/mixi-inc/p5-Test-
CodingStyle )...
PHP環境 Perl環境
課題
コードレビュー時に

毎回発生する確認&修正コスト
増え続けるライブラリの

メンテナンスコスト
現状
PSR-2に則っていないファイル群
(550)
社内ガイドラインに沿ってない

ファイル群(10,000)
...
この話のまとめ
• 対象リポジトリ配下全てがPSR-2に沿った
• 対応リリース過程で障害に繋がったケースはなし
• 大切な事は、明瞭な規約に沿う事にコードを

統一できたことではない
• 人がやるべきではない作業を機械にやらせるよ
うにした
PHPの現場で書いたものを
Perlにバックポートした話
共通していること
• 開発者がcrontabをうっかり書きミスること

例)19時00分にだけ動いてほしい場合

誤: * 19 * * * php hoge.php

 正 : 0 19 * * * php hoge.php

• cron....
・http://masartz.hatenablog.jp/entry/
2015/08/04/203331
・http://www.slideshare.net/masartz/lt-
open-45508527
何をしたか?どうなったか?
• crontabの設定をうっかりミスってしまい、

障害が起きてしまった
• 書きミスがちょっとだけ防げるdoctest

(or Test::Base)っぽいテストを書いた
• テストが落ちることで、うっかりミス...
* 19 * * * php hoge.php
###prev 2014-12-31 19:00:00
###next 2015-01-01 19:00:00
これだと、テスト落ちる
0 19 * * * php hoge.php
###prev 2014-12-31 19:00:00
###next 2015-01-01 19:00:00
これだと、テスト通る
Perl版は?
• Test::Parse::Crontab::Simple
• http://search.cpan.org/
masartz/Test-Parse-
Crontab-Simple-0.01/
10 19 * * * perl hoge.pl
###sample 2014-12-31 19:20:00
これだと、テスト落ちる
*/10 19 * * * perl hoge.pl
###sample 2014-12-31 19:20:00
これだと、テスト通る
PHP環境 Perl環境
課題 開発者がcrontabをうっかり書きミスる
現状 Cron Expressionがある Parse::Crontabがある
対応
Cron Expression

を用いたテストファイル
Test::Parse:...
何故Perlに移植したか?
• PSGI,Plack,plenv,Carton etc…
• 近年のPerlの成長は他言語からの流入が大きい
• 他言語で得た知見をPerlに還元するため
ここで半分ちょっと越えたくらい
Rubyの現場で暫定対応を
Perlでやった話
Which situation?
メディア

(媒体)
SSP
Adnetwork
or
DSP
広告主
Adnetworkからfluctへの入稿
何をしたか?どうなったか?
• 入稿するJavascriptタグを多重登録してしまう
オペレーションミスがしばしば起こっていた
• 重複検知のための要件定義をPerlで行い、

定常運用版をRubyで書いた
• 重複が発生した場合、アラートメー...
Which situation?
既存分の修正
既存分抽出及び

定常バッチ用

スクリプト作成&修正

(Ruby)
要件定義&

既存分の精査
オペレーションG エンジニア
警告発生時の
修正フロー開始
定常バッチ化

リリース
要件が曖昧で、

見積もりにくい
クリティカ...
この案件のキモ
• 要件定義をできるだけ早めて、早く次のフェーズ
に進むこと
• 一旦現状をクリーンにしてから、異常があった
場合のみメールが発砲されるようにすること
• 現状を鑑みて、冗長体制かつ、少ないメンテナ
ンスコストで運用できるように...
既存分の修正
既存分抽出及び

定常バッチ用

スクリプト作成&修正

(Ruby)
要件定義&

既存分の精査
オペレーションG エンジニア
警告発生時の
修正フロー開始
定常バッチ化

リリース
既存分の修正
既存分抽出

スクリプト作成&修正

(Perl)
要件定義&

既存分の精査
オペレーションG エンジニア
定常バッチ化開発

(Ruby)
警告発生時の
修正フロー開始
定常バッチ化

リリース
この話のまとめ
• 現状、通知メールが来ると「おっ?」って

思える運用フローになっている
• リリース後稼働しているRuby版は冗長な

メンテナンス体制が取れている
• 案件の性質を理解し、より良い手段を取ること
が大事であるということ
全体のまとめ
• 言語が変わっても求められる事は変わらない
• 言語に関わらずできること/しなければならない
ことはある
• 無駄な部分はなるべくなくしていこう
• そのために自分の持っている技術を使い、また
その技術の幅を広げよう
告知タイム
http://voyagegroup.com/crew/recruit/
Thanks YAPC::Asia!
YAPC::Asia2015
YAPC::Asia2015
Upcoming SlideShare
Loading in …5
×

YAPC::Asia2015

1,577 views

Published on

Published in: Internet
  • Be the first to comment

YAPC::Asia2015

  1. 1. Perlがメインじゃない
 現場でもPerlを使う
 (AdTech現場編) masartz@VOYAGE GROUP
 YAPC::Asia 2015 08/22
  2. 2. 自己紹介 • masartz • http://search.cpan.org/ masartz/ • https://github.com/ masartz • VOYAGE GROUP
 adingo -> fluct
  3. 3. 先ほどのセッションに続き確認ですが、
 こちらでお間違いではないですか?
  4. 4. 結論 • 言語が変わっても求められる事は変わらない • 言語に関わらずできること/しなければならない ことはある • 無駄な部分はなるべくなくしていこう • そのために自分の持っている技術を使い、また その技術の幅を広げよう
  5. 5. 前提 • What s SSP? • What s fluct? • How Architecture Works?
  6. 6. What s SSP メディア
 (媒体) SSP Adnetwork or DSP 広告主
  7. 7. What s fluct
  8. 8. 本日のお品書き 1. Perlの現場でやってた事を
 PHPの現場でもやった話 2. PHPの現場で書いたものを
 Perlにバックポートした話 3. Rubyの現場で暫定対応をPerlでやった話 4. まとめ
  9. 9. Perlの現場でやってた事を PHPの現場でもやった話
  10. 10. 共通している課題 • 「こうしたい」、「こうなったら良い」に対して
 現状がそれを阻む制約を抱えている • 何らかの線引きをしないと、制約は加速していく
  11. 11. 「現状○○なんだけど、いずれxxしたい」
  という時のアプローチ http://techlog.voyagegroup.com/entry/ 2015/05/01/150606
  12. 12. 何をしたか?どうなったか? • 媒体社様向けの管理画面用リポジトリにおいて、 PSR-2に沿う事をコードレビュー時に目視確認 と手動修正によって行っていた • 既存ファイルを全て修正して、php-cs-fixerが使 える状況を作った • 開発時に機械的にPSR-2に沿えるようになった
  13. 13. Perlの現場では? • 古いライブラリで、社内のガイドラインに沿ってない ファイルがたくさんあった • Test::CodingStyle( https://github.com/mixi-inc/p5-Test- CodingStyle )という仕組みを作り、既存ファイルを blacklistに入れて分別するようにした • 新規分は必ずガイドラインに沿えるようになった • http://www.slideshare.net/masartz/ yapc2013-26481517/21
  14. 14. PHP環境 Perl環境 課題 コードレビュー時に
 毎回発生する確認&修正コスト 増え続けるライブラリの
 メンテナンスコスト 現状 PSR-2に則っていないファイル群 (550) 社内ガイドラインに沿ってない
 ファイル群(10,000) 対応 既存全てのファイルに
 php-cs-fixerを適用した Testツールを作って、既存
 ファイルはblacklist扱いにした 結果 make php-cs-fixer test running
  15. 15. この話のまとめ • 対象リポジトリ配下全てがPSR-2に沿った • 対応リリース過程で障害に繋がったケースはなし • 大切な事は、明瞭な規約に沿う事にコードを
 統一できたことではない • 人がやるべきではない作業を機械にやらせるよ うにした
  16. 16. PHPの現場で書いたものを Perlにバックポートした話
  17. 17. 共通していること • 開発者がcrontabをうっかり書きミスること
 例)19時00分にだけ動いてほしい場合
 誤: * 19 * * * php hoge.php
  正 : 0 19 * * * php hoge.php
 • cron.txt っぽいファイルで設定を管理している • crontabの解析用のライブラリが既にあることに よって少ない工数で、テストが書ける
  18. 18. ・http://masartz.hatenablog.jp/entry/ 2015/08/04/203331 ・http://www.slideshare.net/masartz/lt- open-45508527
  19. 19. 何をしたか?どうなったか? • crontabの設定をうっかりミスってしまい、
 障害が起きてしまった • 書きミスがちょっとだけ防げるdoctest
 (or Test::Base)っぽいテストを書いた • テストが落ちることで、うっかりミスに気づけ るようになり、簡単な再発防止策となった
  20. 20. * 19 * * * php hoge.php ###prev 2014-12-31 19:00:00 ###next 2015-01-01 19:00:00 これだと、テスト落ちる
  21. 21. 0 19 * * * php hoge.php ###prev 2014-12-31 19:00:00 ###next 2015-01-01 19:00:00 これだと、テスト通る
  22. 22. Perl版は? • Test::Parse::Crontab::Simple • http://search.cpan.org/ masartz/Test-Parse- Crontab-Simple-0.01/
  23. 23. 10 19 * * * perl hoge.pl ###sample 2014-12-31 19:20:00 これだと、テスト落ちる
  24. 24. */10 19 * * * perl hoge.pl ###sample 2014-12-31 19:20:00 これだと、テスト通る
  25. 25. PHP環境 Perl環境 課題 開発者がcrontabをうっかり書きミスる 現状 Cron Expressionがある Parse::Crontabがある 対応 Cron Expression
 を用いたテストファイル Test::Parse::Crontab::Simple 結果 うっかりミスに少しだけ気づきやすくなった
  26. 26. 何故Perlに移植したか? • PSGI,Plack,plenv,Carton etc… • 近年のPerlの成長は他言語からの流入が大きい • 他言語で得た知見をPerlに還元するため
  27. 27. ここで半分ちょっと越えたくらい
  28. 28. Rubyの現場で暫定対応を Perlでやった話
  29. 29. Which situation? メディア
 (媒体) SSP Adnetwork or DSP 広告主
  30. 30. Adnetworkからfluctへの入稿
  31. 31. 何をしたか?どうなったか? • 入稿するJavascriptタグを多重登録してしまう オペレーションミスがしばしば起こっていた • 重複検知のための要件定義をPerlで行い、
 定常運用版をRubyで書いた • 重複が発生した場合、アラートメールが届き、
 重複を解消できるようになった
  32. 32. Which situation?
  33. 33. 既存分の修正 既存分抽出及び
 定常バッチ用
 スクリプト作成&修正
 (Ruby) 要件定義&
 既存分の精査 オペレーションG エンジニア 警告発生時の 修正フロー開始 定常バッチ化
 リリース 要件が曖昧で、
 見積もりにくい クリティカルパス メンテナンス
  34. 34. この案件のキモ • 要件定義をできるだけ早めて、早く次のフェーズ に進むこと • 一旦現状をクリーンにしてから、異常があった 場合のみメールが発砲されるようにすること • 現状を鑑みて、冗長体制かつ、少ないメンテナ ンスコストで運用できるようにすること
  35. 35. 既存分の修正 既存分抽出及び
 定常バッチ用
 スクリプト作成&修正
 (Ruby) 要件定義&
 既存分の精査 オペレーションG エンジニア 警告発生時の 修正フロー開始 定常バッチ化
 リリース
  36. 36. 既存分の修正 既存分抽出
 スクリプト作成&修正
 (Perl) 要件定義&
 既存分の精査 オペレーションG エンジニア 定常バッチ化開発
 (Ruby) 警告発生時の 修正フロー開始 定常バッチ化
 リリース
  37. 37. この話のまとめ • 現状、通知メールが来ると「おっ?」って
 思える運用フローになっている • リリース後稼働しているRuby版は冗長な
 メンテナンス体制が取れている • 案件の性質を理解し、より良い手段を取ること が大事であるということ
  38. 38. 全体のまとめ • 言語が変わっても求められる事は変わらない • 言語に関わらずできること/しなければならない ことはある • 無駄な部分はなるべくなくしていこう • そのために自分の持っている技術を使い、また その技術の幅を広げよう
  39. 39. 告知タイム
  40. 40. http://voyagegroup.com/crew/recruit/
  41. 41. Thanks YAPC::Asia!

×