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

● 小さく素早くリリース ● 不要なコードを葬る ● 改善習慣を身につける 今日話したこと