SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
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が使
える状況を作った
• 開発時に機械的にPSR-2に沿えるようになった
Perlの現場では?
• 古いライブラリで、社内のガイドラインに沿ってない
ファイルがたくさんあった
• Test::CodingStyle( https://github.com/mixi-inc/p5-Test-
CodingStyle )という仕組みを作り、既存ファイルを
blacklistに入れて分別するようにした
• 新規分は必ずガイドラインに沿えるようになった
• http://www.slideshare.net/masartz/
yapc2013-26481517/21
PHP環境 Perl環境
課題
コードレビュー時に

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

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

ファイル群(10,000)
対応
既存全てのファイルに

php-cs-fixerを適用した
Testツールを作って、既存

ファイルはblacklist扱いにした
結果 make php-cs-fixer test running
この話のまとめ
• 対象リポジトリ配下全てがPSR-2に沿った
• 対応リリース過程で障害に繋がったケースはなし
• 大切な事は、明瞭な規約に沿う事にコードを

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

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

誤: * 19 * * * php hoge.php

 正 : 0 19 * * * php hoge.php

• cron.txt っぽいファイルで設定を管理している
• crontabの解析用のライブラリが既にあることに
よって少ない工数で、テストが書ける
・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::Crontab::Simple
結果 うっかりミスに少しだけ気づきやすくなった
何故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!

Contenu connexe

Tendances

ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Yuuki Fukuda
 

Tendances (9)

PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
 
すごいタスク管理(仮)
すごいタスク管理(仮)すごいタスク管理(仮)
すごいタスク管理(仮)
 
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
 
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LTエンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
 
Benchmarkspec
BenchmarkspecBenchmarkspec
Benchmarkspec
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
 
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
 
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
既存Objective-CプロジェクトをSwiftに移行した時ハマったこと
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 

Similaire à YAPC::Asia2015

言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
 

Similaire à YAPC::Asia2015 (20)

ペアプロはリモートでもできる!
ペアプロはリモートでもできる!ペアプロはリモートでもできる!
ペアプロはリモートでもできる!
 
DX Suite & UiPath さっくり読み取りさっくり連携
DX Suite & UiPath さっくり読み取りさっくり連携DX Suite & UiPath さっくり読み取りさっくり連携
DX Suite & UiPath さっくり読み取りさっくり連携
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
いまどき(これから)のPHP開発
いまどき(これから)のPHP開発いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」
 
MTプラグイン入門以前
MTプラグイン入門以前MTプラグイン入門以前
MTプラグイン入門以前
 
PHPプログラミングのIPv6対応の実際
PHPプログラミングのIPv6対応の実際PHPプログラミングのIPv6対応の実際
PHPプログラミングのIPv6対応の実際
 
phpstudy_php_to_node
phpstudy_php_to_nodephpstudy_php_to_node
phpstudy_php_to_node
 
ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業
ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業
ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業
 
2019年9月15日 OSC広島 ドローンをプログラミングして飛ばす!ScratchとPHPでプログラミング授業
2019年9月15日 OSC広島 ドローンをプログラミングして飛ばす!ScratchとPHPでプログラミング授業2019年9月15日 OSC広島 ドローンをプログラミングして飛ばす!ScratchとPHPでプログラミング授業
2019年9月15日 OSC広島 ドローンをプログラミングして飛ばす!ScratchとPHPでプログラミング授業
 
ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話
 
混沌化の実装にテストを入れよう体験談(現在進行形)
混沌化の実装にテストを入れよう体験談(現在進行形)混沌化の実装にテストを入れよう体験談(現在進行形)
混沌化の実装にテストを入れよう体験談(現在進行形)
 
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
 
PHPカンファレンス2015
PHPカンファレンス2015PHPカンファレンス2015
PHPカンファレンス2015
 
フレームワーク使おうぜ!
フレームワーク使おうぜ!フレームワーク使おうぜ!
フレームワーク使おうぜ!
 
レガシーな開発環境をモダン化している話
レガシーな開発環境をモダン化している話レガシーな開発環境をモダン化している話
レガシーな開発環境をモダン化している話
 
Goをえらんだ理由
Goをえらんだ理由Goをえらんだ理由
Goをえらんだ理由
 

YAPC::Asia2015