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
技術的負債で信頼性が限界だったWordPress運用をShifterで完全復活させた話
rvirus0817
1
2k
Introduction to Git & GitHub
latte72
0
120
Terraform やるなら公式スタイルガイドを読もう 〜重要項目 10選〜
hiyanger
13
3.2k
TROCCO×dbtで実現する人にもAIにもやさしいデータ基盤
nealle
0
300
新しいモバイルアプリ勉強会(仮)について
uetyo
1
260
Claude Codeで実装以外の開発フロー、どこまで自動化できるか?失敗と成功
ndadayo
2
720
「リーダーは意思決定する人」って本当?~ 学びを現場で活かす、リーダー4ヶ月目の試行錯誤 ~
marina1017
0
230
コーディングは技術者(エンジニア)の嗜みでして / Learning the System Development Mindset from Rock Lady
mackey0225
2
560
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
150
AI OCR API on Lambdaを Datadogで可視化してみた
nealle
0
160
decksh - a little language for decks
ajstarks
4
21k
Infer入門
riru
4
1.6k
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
560
Visualization
eitanlees
146
16k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Automating Front-end Workflow
addyosmani
1370
200k
How STYLIGHT went responsive
nonsquared
100
5.7k
Documentation Writing (for coders)
carmenintech
73
5k
Faster Mobile Websites
deanohume
309
31k
The Pragmatic Product Professional
lauravandoore
36
6.8k
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移転プロジェクトを立ち上げ
• 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話したこと