Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
老舗メディアが改善に取り組んでいる話 / ecnavi @phpcon2016
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Daisuke Komazaki
November 04, 2016
Programming
18k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
老舗メディアが改善に取り組んでいる話 / ecnavi @phpcon2016
VOYAGE GROUP ECナビからPHPカンファレンス2016で発表した内容です。
Daisuke Komazaki
November 04, 2016
Other Decks in Programming
See All in Programming
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
800
ActionController meets Protocol Buffers
sorah
0
560
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
170
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
110
JIS keyboard support in Omarchy
lef237
0
130
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
220
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
170
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
120
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
830
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Six Lessons from altMBA
skipperchong
29
4.5k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
480
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
How to Talk to Developers About Accessibility
jct
2
580
Building Adaptive Systems
keathley
44
3.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
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移転プロジェクトを立ち上げ
• 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話したこと