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
iOS 17で追加されたSubscriptionStoreView を利用して5分でサブスク実装チャレンジ
natmark
0
640
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
180
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
6
3.5k
Catch Up: Go Style Guide Update
andpad
0
200
CI_CD「健康診断」のススメ。現場でのボトルネック特定から、健康診断を通じた組織的な改善手法
teamlab
PRO
0
190
Back to the Future: Let me tell you about the ACP protocol
terhechte
0
130
CSC509 Lecture 04
javiergs
PRO
0
300
技術的負債の正体を知って向き合う / Facing Technical Debt
irof
0
110
実践AIチャットボットUI実装入門
syumai
7
2.5k
CSC509 Lecture 01
javiergs
PRO
1
430
Breaking Up with Big ViewModels — Without Breaking Your Architecture (droidcon Berlin 2025)
steliosf
PRO
1
350
Go言語の特性を活かした公式MCP SDKの設計
hond0413
1
200
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
A Tale of Four Properties
chriscoyier
160
23k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
How to Think Like a Performance Engineer
csswizardry
27
2k
Practical Orchestrator
shlominoach
190
11k
The Invisible Side of Design
smashingmag
301
51k
Building Applications with DynamoDB
mza
96
6.6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
For a Future-Friendly Web
brad_frost
180
9.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
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移転プロジェクトを立ち上げ
• 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話したこと