Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
老舗メディアが改善に取り組んでいる話 / ecnavi @phpcon2016
Search
Daisuke Komazaki
November 04, 2016
Programming
14
18k
老舗メディアが改善に取り組んでいる話 / ecnavi @phpcon2016
VOYAGE GROUP ECナビからPHPカンファレンス2016で発表した内容です。
Daisuke Komazaki
November 04, 2016
Tweet
Share
Other Decks in Programming
See All in Programming
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
430
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
790
42 best practices for Symfony, a decade later
tucksaun
1
180
nekko cloudにおけるProxmox VE利用事例
irumaru
3
430
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
340
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.7k
fs2-io を試してたらバグを見つけて直した話
chencmd
0
240
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
190
バグを見つけた?それAppleに直してもらおう!
uetyo
0
180
HTTP compression in PHP and Symfony apps
dunglas
2
1.7k
モバイルアプリにおける自動テストの導入戦略
ostk0069
0
110
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
1
450
Featured
See All Featured
Thoughts on Productivity
jonyablonski
67
4.4k
Building an army of robots
kneath
302
44k
YesSQL, Process and Tooling at Scale
rocio
169
14k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Statistics for Hackers
jakevdp
796
220k
Writing Fast Ruby
sferik
628
61k
Gamification - CAS2011
davidbonilla
80
5.1k
The Cult of Friendly URLs
andyhume
78
6.1k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
How to train your dragon (web standard)
notwaldorf
88
5.7k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Transcript
老舗メディアが改善に 取り組んでいる話 VOYAGE GROUP ECナビ事業本部 駒崎大輔
自己紹介 • SIer ◦ 約10年 PG、SE • Web(ECパッケージ開発) ◦ 約2年
SE、PM兼インフラとか色々 • Web(自社サービス) ←今ココ ◦ 約3年 ソフトウェアエンジニア
• 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話すこと
VOYAGE GROUP 「2016年9月期通期 決算説明資料」から抜粋
VOYAGE GROUP 「2016年9月期通期 決算説明資料」から抜粋
ECナビ
ECナビ 「ECナビ MEDIA GUIDE 2016年10月〜12月」から抜粋
ECナビ • 1999年: MyID(懸賞サイト) • 2004年: ECナビ ECナビとして12歳! MyIDから数えると17歳!!
None
None
ECナビのシステム概要
None
• 古き良き200x年代のあるある構成 ◦ LAMP(PHP/Perl + MySQL + Apache) ◦ PHP5.6.24,
PHP5.x • OracleがコアなDB(OLTP) ◦ ポイントとユーザなど、サイトの基幹データを管理 • 長年オンプレ ECナビのシステム概要
• 15名 ◦ 新卒組、中途組がバランスよく配置 ◦ 中途の平均35才前後、在籍5年くらい • 「事業に貢献する技術」志向が強め ◦ 技術改善チームが5人
• 和気あいあい、チームワーク重視 ECナビのエンジニア組織
コード
None
None
None
None
17年
• 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話すこと
• 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話すこと
慎重かつビッグなリリース • バージョン管理(SVN)の問題 • リリースフローの問題 過去に実在した課題
開発環境 デプロイサーバ SVN svn commit <filelist> 開発 svn up <filelist>
deploy login 当時のリリースフロー
当時のリリースフロー
• SVNでの運用 ◦ commit ≠ リリースOK 当時のリリースフロー
辛かった。。。
解決策 • SVNからGitHubへの移行 • リリースフローの自動化
1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化 やったこと
1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化 やったこと
1. リリースしてないファイルの検知 commitしてあるけど未リリースのファイル検知
git-lady(ready) 1. リリースしてないファイルの検知 チェックし始めたころ リリース前日
1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化 やったこと
• エンジニアは大丈夫! 2. チームのgitレベルアップ
• デザイナーへのフォローアップ ◦ 本を配ってハンズオンの勉強会を開催 ◦ GUIのツールは導入検討したがやめた ▪ エンジニアと同じインターフェース(CUI)で ▪ デザイナーからも行けそうという声
◦ デザイナーチームの協力もあり無事 2. チームのgitレベルアップ
2. チームのgitレベルアップ http://book.impress.co.jp/books/1114101005
1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化 やったこと
3. ハードコードされているパスワードの退避
• ハードコードされているパスワードを環境変数に追い出し ◦ DB、APIの認証情報等… • 環境変数の読み込みには phpdotenv を利用 ◦ https://github.com/vlucas/phpdotenv
3. ハードコードされているパスワードの退避
3. ハードコードされているパスワードの退避 https://12factor.net/config
やったこと 1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化
• デプロイサーバにログインしなくても良いように • 問題があったらすぐrevertできる • リリースを記録する 4. リリースフローの整備
開発環境 デプロイサーバ SVN svn commit <filelist> 開発 svn up <filelist>
deploy login 4. リリースフローの整備 Before
4. リリースフローの整備 開発環境 デプロイサーバ GitHub 開発 deploy jenkins デプロイ指示 After
PRをMerge
None
4. リリースフローの整備 Inspired by Mercari http://tech.mercari.com/entry/2015/10/15/183000
1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化 やったこと Clear!
どうなった? • リリーススピードアップ ◦ 余計な気を使わずに済むようになった • 小さくリリースが進んで、より安全に ◦ リリース回数は2-3倍以上 •
レビューが活発に
• 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話すこと
1800 - 600 = 1200 1200 - 300 = 900
1800 - 600 = 1200機能 1200 - 300 = 900テーブル
不要なコードを葬る 17年物システムの氷山
1. 機能の棚卸し 2. 不要なコードを葬っていく やったこと
1. 機能の棚卸し 2. 不要なコードを葬っていく やったこと
1. 機能の棚卸し
機能とテーブルの一覧を作る 1. 機能の棚卸し
• テーブルと機能の関連性を調べる ◦ Database接続ライブラリにログを仕込む 1. 機能の棚卸し
1. 機能の棚卸し GraphVizで生成
1. 機能の棚卸し
1. 機能の棚卸し
1. 機能の棚卸し 2. 不要なコードを葬っていく やったこと
• 使われてるか ◦ エンドポイントへのアクセス ◦ データの増減 2. 不要なコードを葬っていく
• 葬り実行 ◦ コード ◦ テーブル ◦ その他設定 2. 不要なコードを葬っていく
2. 不要なコードを葬っていく
• 機能数 1800 => 1200 • テーブル数 1200 => 900
どうなった?
• 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話すこと
8 x 15 x 8 = 960
• サービス成長に掛ける比重が大きすぎて時間がとれない • 改善を日常業務に組み込む習慣がない 改善習慣を身につける
KAIZEN会 • やること自由 • 丸1日セミナールームにエンジニアが篭る • 基本全員参加 inspired by Mercari
(Be Professional Day) http://tech.mercari.com/entry/2016/02/01/164829
KAIZEN会 • タイムスケジュール ◦ 10:00-12:00 作業時間 ◦ 12:00-13:00 お昼(お弁当支給) ◦
13:00-17:30 作業時間 ◦ 17:30- KPT
KAIZEN会
KAIZEN会
KAIZEN会 • 月1回 • 全員参加 • 8ヶ月間継続中
KAIZEN会 • どうだった? ◦ エンジニアの声 ▪ 集中して作業できる ▪ 昔自分が書いたコードをリファクタリング ▪
普段見ないコードを見る機会が増えた
KAIZEN会 • どうだったか? ◦ 実際にやったこと例 ▪ 古い作りを新しいフレームワークに乗せる ▪ デバッグ用タイムトラベル機能の実装 ▪
テストしづらい機能のデータ作成補助機能
KAIZEN会
PhpMetrics 2016年3月 2016年10月
改善の歩み • GitHub化 ◦ 2014年12月〜2015年4月 • 棚卸し&スリム化 ◦ 2015年10月〜現在 •
KAIZEN会 ◦ 2016年3月〜現在 小さく早くリリースできるようになった! 機能数 1800 => 1200 テーブル数 1200 => 900 月1回 全員参加 8ヶ月継続
その他の取り組み • DevOps的な取り組み ◦ インフラとアプリエンジニアの交換留学 ◦ サイトパフォーマンスチェックをみんなでやる会
その他の取り組み • 外部サービス、ツールの活用例 ◦ Datadog ◦ Re:dash ◦ Docker ◦
horenso(https://github.com/Songmu/horenso) ◦ site24x7
その他の取り組み • 週1回の読書会 ◦ プログラマが知るべき97のこと ◦ @t_wadaさん!!の解説つき => 「voyage 読書会」で検索
https://www.oreilly.co.jp/books/9784873114798/
• システムはもちろんチームが良くなっている • 歴史を繰り返さないように改善を続けていく まとめ
まとめ • 大きなチャレンジに取り組んでく気持ち↑↑ ◦ AWS移転プロジェクトを立ち上げ
• 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話したこと