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
Architectural Extensions
denyspoltorak
0
280
今から始めるClaude Code超入門
448jp
8
8.6k
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
430
AIフル活用時代だからこそ学んでおきたい働き方の心得
shinoyu
0
130
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
300
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
Implementation Patterns
denyspoltorak
0
280
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
190
CSC307 Lecture 06
javiergs
PRO
0
680
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
180
Fragmented Architectures
denyspoltorak
0
150
Featured
See All Featured
Making Projects Easy
brettharned
120
6.6k
Done Done
chrislema
186
16k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
180
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
[SF Ruby Conf 2025] Rails X
palkan
1
750
KATA
mclloyd
PRO
34
15k
Exploring anti-patterns in Rails
aemeredith
2
250
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
57
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移転プロジェクトを立ち上げ
• 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話したこと