老舗メディアが改善に取り組んでいる話 / ecnavi @phpcon2016
by
Daisuke Komazaki
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
老舗メディアが改善に 取り組んでいる話 VOYAGE GROUP ECナビ事業本部 駒崎大輔
Slide 2
Slide 2 text
自己紹介 ● SIer ○ 約10年 PG、SE ● Web(ECパッケージ開発) ○ 約2年 SE、PM兼インフラとか色々 ● Web(自社サービス) ←今ココ ○ 約3年 ソフトウェアエンジニア
Slide 3
Slide 3 text
● 小さく素早くリリース ● 不要なコードを葬る ● 改善習慣を身につける 今日話すこと
Slide 4
Slide 4 text
VOYAGE GROUP 「2016年9月期通期 決算説明資料」から抜粋
Slide 5
Slide 5 text
VOYAGE GROUP 「2016年9月期通期 決算説明資料」から抜粋
Slide 6
Slide 6 text
ECナビ
Slide 7
Slide 7 text
ECナビ 「ECナビ MEDIA GUIDE 2016年10月〜12月」から抜粋
Slide 8
Slide 8 text
ECナビ ● 1999年: MyID(懸賞サイト) ● 2004年: ECナビ ECナビとして12歳! MyIDから数えると17歳!!
Slide 9
Slide 9 text
No content
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
ECナビのシステム概要
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
● 古き良き200x年代のあるある構成 ○ LAMP(PHP/Perl + MySQL + Apache) ○ PHP5.6.24, PHP5.x ● OracleがコアなDB(OLTP) ○ ポイントとユーザなど、サイトの基幹データを管理 ● 長年オンプレ ECナビのシステム概要
Slide 14
Slide 14 text
● 15名 ○ 新卒組、中途組がバランスよく配置 ○ 中途の平均35才前後、在籍5年くらい ● 「事業に貢献する技術」志向が強め ○ 技術改善チームが5人 ● 和気あいあい、チームワーク重視 ECナビのエンジニア組織
Slide 15
Slide 15 text
コード
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
No content
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
17年
Slide 21
Slide 21 text
● 小さく素早くリリース ● 不要なコードを葬る ● 改善習慣を身につける 今日話すこと
Slide 22
Slide 22 text
● 小さく素早くリリース ● 不要なコードを葬る ● 改善習慣を身につける 今日話すこと
Slide 23
Slide 23 text
慎重かつビッグなリリース ● バージョン管理(SVN)の問題 ● リリースフローの問題 過去に実在した課題
Slide 24
Slide 24 text
開発環境 デプロイサーバ SVN svn commit 開発 svn up deploy login 当時のリリースフロー
Slide 25
Slide 25 text
当時のリリースフロー
Slide 26
Slide 26 text
● SVNでの運用 ○ commit ≠ リリースOK 当時のリリースフロー
Slide 27
Slide 27 text
辛かった。。。
Slide 28
Slide 28 text
解決策 ● SVNからGitHubへの移行 ● リリースフローの自動化
Slide 29
Slide 29 text
1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化 やったこと
Slide 30
Slide 30 text
1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化 やったこと
Slide 31
Slide 31 text
1. リリースしてないファイルの検知 commitしてあるけど未リリースのファイル検知
Slide 32
Slide 32 text
git-lady(ready) 1. リリースしてないファイルの検知 チェックし始めたころ リリース前日
Slide 33
Slide 33 text
1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化 やったこと
Slide 34
Slide 34 text
● エンジニアは大丈夫! 2. チームのgitレベルアップ
Slide 35
Slide 35 text
● デザイナーへのフォローアップ ○ 本を配ってハンズオンの勉強会を開催 ○ GUIのツールは導入検討したがやめた ■ エンジニアと同じインターフェース(CUI)で ■ デザイナーからも行けそうという声 ○ デザイナーチームの協力もあり無事 2. チームのgitレベルアップ
Slide 36
Slide 36 text
2. チームのgitレベルアップ http://book.impress.co.jp/books/1114101005
Slide 37
Slide 37 text
1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化 やったこと
Slide 38
Slide 38 text
3. ハードコードされているパスワードの退避
Slide 39
Slide 39 text
● ハードコードされているパスワードを環境変数に追い出し ○ DB、APIの認証情報等… ● 環境変数の読み込みには phpdotenv を利用 ○ https://github.com/vlucas/phpdotenv 3. ハードコードされているパスワードの退避
Slide 40
Slide 40 text
3. ハードコードされているパスワードの退避 https://12factor.net/config
Slide 41
Slide 41 text
やったこと 1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化
Slide 42
Slide 42 text
● デプロイサーバにログインしなくても良いように ● 問題があったらすぐrevertできる ● リリースを記録する 4. リリースフローの整備
Slide 43
Slide 43 text
開発環境 デプロイサーバ SVN svn commit 開発 svn up deploy login 4. リリースフローの整備 Before
Slide 44
Slide 44 text
4. リリースフローの整備 開発環境 デプロイサーバ GitHub 開発 deploy jenkins デプロイ指示 After PRをMerge
Slide 45
Slide 45 text
No content
Slide 46
Slide 46 text
4. リリースフローの整備 Inspired by Mercari http://tech.mercari.com/entry/2015/10/15/183000
Slide 47
Slide 47 text
1. リリースしてないファイルの検知 2. チームのgitレベルアップ 3. ハードコードされているパスワードの退避 4. リリースフローの整備、自動化 やったこと Clear!
Slide 48
Slide 48 text
どうなった? ● リリーススピードアップ ○ 余計な気を使わずに済むようになった ● 小さくリリースが進んで、より安全に ○ リリース回数は2-3倍以上 ● レビューが活発に
Slide 49
Slide 49 text
● 小さく素早くリリース ● 不要なコードを葬る ● 改善習慣を身につける 今日話すこと
Slide 50
Slide 50 text
1800 - 600 = 1200 1200 - 300 = 900
Slide 51
Slide 51 text
1800 - 600 = 1200機能 1200 - 300 = 900テーブル
Slide 52
Slide 52 text
不要なコードを葬る 17年物システムの氷山
Slide 53
Slide 53 text
1. 機能の棚卸し 2. 不要なコードを葬っていく やったこと
Slide 54
Slide 54 text
1. 機能の棚卸し 2. 不要なコードを葬っていく やったこと
Slide 55
Slide 55 text
1. 機能の棚卸し
Slide 56
Slide 56 text
機能とテーブルの一覧を作る 1. 機能の棚卸し
Slide 57
Slide 57 text
● テーブルと機能の関連性を調べる ○ Database接続ライブラリにログを仕込む 1. 機能の棚卸し
Slide 58
Slide 58 text
1. 機能の棚卸し GraphVizで生成
Slide 59
Slide 59 text
1. 機能の棚卸し
Slide 60
Slide 60 text
1. 機能の棚卸し
Slide 61
Slide 61 text
1. 機能の棚卸し 2. 不要なコードを葬っていく やったこと
Slide 62
Slide 62 text
● 使われてるか ○ エンドポイントへのアクセス ○ データの増減 2. 不要なコードを葬っていく
Slide 63
Slide 63 text
● 葬り実行 ○ コード ○ テーブル ○ その他設定 2. 不要なコードを葬っていく
Slide 64
Slide 64 text
2. 不要なコードを葬っていく
Slide 65
Slide 65 text
● 機能数 1800 => 1200 ● テーブル数 1200 => 900 どうなった?
Slide 66
Slide 66 text
● 小さく素早くリリース ● 不要なコードを葬る ● 改善習慣を身につける 今日話すこと
Slide 67
Slide 67 text
8 x 15 x 8 = 960
Slide 68
Slide 68 text
● サービス成長に掛ける比重が大きすぎて時間がとれない ● 改善を日常業務に組み込む習慣がない 改善習慣を身につける
Slide 69
Slide 69 text
KAIZEN会 ● やること自由 ● 丸1日セミナールームにエンジニアが篭る ● 基本全員参加 inspired by Mercari (Be Professional Day) http://tech.mercari.com/entry/2016/02/01/164829
Slide 70
Slide 70 text
KAIZEN会 ● タイムスケジュール ○ 10:00-12:00 作業時間 ○ 12:00-13:00 お昼(お弁当支給) ○ 13:00-17:30 作業時間 ○ 17:30- KPT
Slide 71
Slide 71 text
KAIZEN会
Slide 72
Slide 72 text
KAIZEN会
Slide 73
Slide 73 text
KAIZEN会 ● 月1回 ● 全員参加 ● 8ヶ月間継続中
Slide 74
Slide 74 text
KAIZEN会 ● どうだった? ○ エンジニアの声 ■ 集中して作業できる ■ 昔自分が書いたコードをリファクタリング ■ 普段見ないコードを見る機会が増えた
Slide 75
Slide 75 text
KAIZEN会 ● どうだったか? ○ 実際にやったこと例 ■ 古い作りを新しいフレームワークに乗せる ■ デバッグ用タイムトラベル機能の実装 ■ テストしづらい機能のデータ作成補助機能
Slide 76
Slide 76 text
KAIZEN会
Slide 77
Slide 77 text
PhpMetrics 2016年3月 2016年10月
Slide 78
Slide 78 text
改善の歩み ● GitHub化 ○ 2014年12月〜2015年4月 ● 棚卸し&スリム化 ○ 2015年10月〜現在 ● KAIZEN会 ○ 2016年3月〜現在 小さく早くリリースできるようになった! 機能数 1800 => 1200 テーブル数 1200 => 900 月1回 全員参加 8ヶ月継続
Slide 79
Slide 79 text
その他の取り組み ● DevOps的な取り組み ○ インフラとアプリエンジニアの交換留学 ○ サイトパフォーマンスチェックをみんなでやる会
Slide 80
Slide 80 text
その他の取り組み ● 外部サービス、ツールの活用例 ○ Datadog ○ Re:dash ○ Docker ○ horenso(https://github.com/Songmu/horenso) ○ site24x7
Slide 81
Slide 81 text
その他の取り組み ● 週1回の読書会 ○ プログラマが知るべき97のこと ○ @t_wadaさん!!の解説つき => 「voyage 読書会」で検索 https://www.oreilly.co.jp/books/9784873114798/
Slide 82
Slide 82 text
● システムはもちろんチームが良くなっている ● 歴史を繰り返さないように改善を続けていく まとめ
Slide 83
Slide 83 text
まとめ ● 大きなチャレンジに取り組んでく気持ち↑↑ ○ AWS移転プロジェクトを立ち上げ
Slide 84
Slide 84 text
● 小さく素早くリリース ● 不要なコードを葬る ● 改善習慣を身につける 今日話したこと