SlideShare a Scribd company logo
1 of 24
YAPC::Hokkaido 2016 SAPPORO
YAPC::Hokkaido 2016 SAPPORO
10年モノ熟成Perlとの付き合い方
2016/12/10
アイランド株式会社
中川 勝樹 (@ikasam_a)
YAPC::Hokkaido 2016 SAPPORO
自己紹介
☃ 中川 勝樹
☃ アイランド株式会社 (2016/07/01-)
☃ @ikasam_a
☃ github.com/masaki
☃ metacpan.org/MASAKI
1
YAPC::Hokkaido 2016 SAPPORO
会社紹介
2
www.ai-land.co.jp
YAPC::Hokkaido 2016 SAPPORO
アイランドのライフスタイルメディア
3
「おとりよせネット」
otoriyose.net
「レシピブログ」
recipe-blog.jp
YAPC::Hokkaido 2016 SAPPORO
We’re hiring!
☃ エンジニア募集しています!
4
https://www.wantedly.com/projects/72445
YAPC::Hokkaido 2016 SAPPORO5
YAPC::Hokkaido 2016 SAPPORO
Food Service Engineers Meetup (ロゴ募集中)
6
YAPC::Hokkaido 2016 SAPPORO7
「おとりよせネット」
otoriyose.net
「レシピブログ」
recipe-blog.jp
13年 11年
YAPC::Hokkaido 2016 SAPPORO8
over 10 years
YAPC::Hokkaido 2016 SAPPORO9
Language < System
YAPC::Hokkaido 2016 SAPPORO
レシピブログのシステム概要
☃ FastCGI (Perl 5.10 + 独自WAF)
☃ Apache 2.2
☃ PostgreSQL 9
☃ Elasticsearch
☃ File Cache + memcached (2016/10~)
☃ CloudFront
10
YAPC::Hokkaido 2016 SAPPORO
おとりよせネットのシステム概要
☃ CGI (Perl 5.10)
☃ Apache 2.2
☃ PostgreSQL 9
☃ File Cache / Page Cache
☃ + CloudFront (2016/11~)
11
YAPC::Hokkaido 2016 SAPPORO
技術・設計課題
☃ 利用技術の陳腐化
❄ CGI、FastCGI、…
☃ 開発環境や開発プロセスの停滞
❄ 「運用でカバー」
☃ そろそろモノリシックの規模も課題に
12
YAPC::Hokkaido 2016 SAPPORO
熟成した問題
☃ 独自WAF利用とその聖域化問題
❄ メンテナンスやアップデートが行き届かず
❄ 手の入れ方がわからず運用でカバー
❄ 秘伝のタレ化
☃ 掃除不足によるゴミ屋敷問題
❄ 不要なソースコードが残ったまま
❄ 不要なファイルが残ったまま
❄ 次第に影響範囲が不明になり消せなくなるパターン
13
YAPC::Hokkaido 2016 SAPPORO
どう向き合うか?
☃ 背景を理解する
☃ 事実を把握する
☃ 改善する
☃ 革新を起こす
14
YAPC::Hokkaido 2016 SAPPORO
背景理解
☃ とにかくコードを読む
❄ (個人的に)Perl でよかった
☃ 疑問や経緯はわかるまで全部聞く
❄ 今目の前にある事象は、過去の決定の積み重ね
❄ 当時は何らかの意図や判断が必ずある
☃ 「システムに歴史あり」
❄ ここまで事業を支えてきた事実をリスペクトする
❄ その上で諦めてきたことを知ろう
15
YAPC::Hokkaido 2016 SAPPORO
事実把握
☃ ログをどんどん出す
❄ 手がかりは多く、余れば後で捨てるだけ
❄ carp, croak → cluck, confess
❄ $logger->warn($@)
☃ リソースを監視する
❄ 推測するな、計測せよ
❄ CloudForecast 入れるところから始めた
16
YAPC::Hokkaido 2016 SAPPORO
[改善] WAFの改修
☃ コードを読んだ結果、普通に改修可能になった
❄ (個人的に)Catalyst ライクな WAF でよかった
☃ 運用でカバーしていた部分が根本的解決へ
☃ 結果、コード自体もシンプルでスリムに
17
YAPC::Hokkaido 2016 SAPPORO
[改善] パフォーマンスチューニング
☃ ログとリソースグラフのおかげ
☃ ログに DB の max connection エラーを発見
❄ DB チューニングで max connection 確保
☃ まだ HTTP リクエストがタイムアウトしてた
❄ TCP connection / HTTP がある値で頭打ちになってた
❄ ServerLimit, MaxClients 周りを設定
☃ 残るは DC 帯域が…(共用なので)
18
YAPC::Hokkaido 2016 SAPPORO
[改善] TV露出の対応
☃ TV (地上波) で取り上げられると即死(30分落ち)
☃ 「来週ヒルナンデスに出ます」という死の宣告
☃ 画像が豊富でページ当たりの転送量が…
❄ とりあえず CloudFront 載せよう
☃ アセットが世代管理されてないからキャッシュが…
❄ mod_ext_filter っぽいのを書いた
☃ CGI プロセスが膨大に…
❄ SpeedyCGI (!) を引っ張りだした
❄ 参照系はことごとく静的に HTML 化
19
YAPC::Hokkaido 2016 SAPPORO
[革新] AWS導入
☃ 抜本的に環境を変える
❄ 改善だけじゃ解決しきれない問題もある
☃ ついでに残った問題も解決する
❄ ドサクサに紛れて色々仕込む
20
YAPC::Hokkaido 2016 SAPPORO
[革新] システムリプレース
☃ 抜本的に(ry
☃ ついでに(ry
21
YAPC::Hokkaido 2016 SAPPORO
なぜ革新なのか
☃ ワクワク感が出る
❄ 楽しさはモチベーションの源泉
❄ 「やるからには面白く、工夫して」© 2016 @ikasam_a
☃ 本当は色々狙ってる
❄ 大きな変化を伴わないと解決できない問題に向き合う
❄ 今ある他の課題も一緒に解決できる方法を考える
❄ 両立できる施策をしれっと狙う
♨ 理想(革新)だけ追っても色んな意味で難しい
22
YAPC::Hokkaido 2016 SAPPORO
まとめ
☃ アイランドではおやつにローストビーフが出ます
☃ 10年過ぎると色んなところに地雷がありますが、こうなる
に至った当時の判断背景が必ずあります
☃ ここまで継続させてきた先駆者の実績をリスペクトしま
しょう
☃ 背景を理解した上で事実を知れば、どうやって対応して
いけばよいのか見えてきます
23

More Related Content

Viewers also liked

はじめてのリーンスタートアップ
はじめてのリーンスタートアップはじめてのリーンスタートアップ
はじめてのリーンスタートアップ
Lean Startup Japan LLC
 
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
Terui Masashi
 

Viewers also liked (20)

Wacate2013 s bpp_session
Wacate2013 s bpp_sessionWacate2013 s bpp_session
Wacate2013 s bpp_session
 
はじめてのリーンスタートアップ
はじめてのリーンスタートアップはじめてのリーンスタートアップ
はじめてのリーンスタートアップ
 
WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略WebサービスのソフトウェアQAと自動テスト戦略
WebサービスのソフトウェアQAと自動テスト戦略
 
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイドYAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
 
オープンデータを利用したWebアプリ開発
オープンデータを利用したWebアプリ開発オープンデータを利用したWebアプリ開発
オープンデータを利用したWebアプリ開発
 
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
 
10分でわかったつもりになるlean start up ~リーンスタートアップって何ですか?~
10分でわかったつもりになるlean start up ~リーンスタートアップって何ですか?~10分でわかったつもりになるlean start up ~リーンスタートアップって何ですか?~
10分でわかったつもりになるlean start up ~リーンスタートアップって何ですか?~
 
日経BPリーン式創業塾 #leanstartup #リーンスタートアップ
日経BPリーン式創業塾 #leanstartup #リーンスタートアップ日経BPリーン式創業塾 #leanstartup #リーンスタートアップ
日経BPリーン式創業塾 #leanstartup #リーンスタートアップ
 
LEANSTARTUPアンチパターン #devlove #leanstartup
LEANSTARTUPアンチパターン #devlove #leanstartupLEANSTARTUPアンチパターン #devlove #leanstartup
LEANSTARTUPアンチパターン #devlove #leanstartup
 
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in Test
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
 
これからの Microservices
これからの Microservicesこれからの Microservices
これからの Microservices
 
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
GitLab Meetup Tokyo #1 LT:「わりと大きい会社でGitLabをホスティングしてみた話」
 
HTTP/2の課題と将来
HTTP/2の課題と将来HTTP/2の課題と将来
HTTP/2の課題と将来
 
Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜
 
リーンスタートアップにおける良い仮説、悪い仮説
リーンスタートアップにおける良い仮説、悪い仮説リーンスタートアップにおける良い仮説、悪い仮説
リーンスタートアップにおける良い仮説、悪い仮説
 
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
 

Similar to 10年モノ熟成Perlとの付き合い方

Similar to 10年モノ熟成Perlとの付き合い方 (6)

20160529 Pepper SDK for Android Studio
20160529 Pepper SDK for Android Studio 20160529 Pepper SDK for Android Studio
20160529 Pepper SDK for Android Studio
 
さわってみようQGIS (QGIS初級中級編 for ver.2.14 at FOSS4G 2016 Hokkaido)
さわってみようQGIS (QGIS初級中級編 for ver.2.14 at FOSS4G 2016 Hokkaido)さわってみようQGIS (QGIS初級中級編 for ver.2.14 at FOSS4G 2016 Hokkaido)
さわってみようQGIS (QGIS初級中級編 for ver.2.14 at FOSS4G 2016 Hokkaido)
 
余致緯/用數據解決都會城市的停車問題
余致緯/用數據解決都會城市的停車問題余致緯/用數據解決都會城市的停車問題
余致緯/用數據解決都會城市的停車問題
 
20160717 Raspberry Pi in Yokohama
20160717 Raspberry Pi in Yokohama20160717 Raspberry Pi in Yokohama
20160717 Raspberry Pi in Yokohama
 
CIの見える化でここまで効率が変わった ~Raspberry Piを使ったLEDソリューション製作記~
CIの見える化でここまで効率が変わった ~Raspberry Piを使ったLEDソリューション製作記~CIの見える化でここまで効率が変わった ~Raspberry Piを使ったLEDソリューション製作記~
CIの見える化でここまで効率が変わった ~Raspberry Piを使ったLEDソリューション製作記~
 
セキュリティは2016年も「熱男」で行こう!
セキュリティは2016年も「熱男」で行こう!セキュリティは2016年も「熱男」で行こう!
セキュリティは2016年も「熱男」で行こう!
 

More from Masaki Nakagawa (9)

YAPCと俺 (吉祥寺.pm #17)
YAPCと俺 (吉祥寺.pm #17)YAPCと俺 (吉祥寺.pm #17)
YAPCと俺 (吉祥寺.pm #17)
 
レシピブログのサービス設計と今後の展望
レシピブログのサービス設計と今後の展望レシピブログのサービス設計と今後の展望
レシピブログのサービス設計と今後の展望
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform
 
Test Engineering on Mobage
Test Engineering on MobageTest Engineering on Mobage
Test Engineering on Mobage
 
Carton について何か話す
Carton について何か話すCarton について何か話す
Carton について何か話す
 
As an Test Engineer
As an Test EngineerAs an Test Engineer
As an Test Engineer
 
Brownie
BrownieBrownie
Brownie
 
Perl Testing Consideration (seen from other languages)
Perl Testing Consideration (seen from other languages)Perl Testing Consideration (seen from other languages)
Perl Testing Consideration (seen from other languages)
 

10年モノ熟成Perlとの付き合い方