$30 off During Our Annual Pro Sale. View Details »

老舗メディアが改善に取り組んでいる話 / ecnavi @phpcon2016

老舗メディアが改善に取り組んでいる話 / ecnavi @phpcon2016

VOYAGE GROUP ECナビからPHPカンファレンス2016で発表した内容です。

Daisuke Komazaki

November 04, 2016
Tweet

Other Decks in Programming

Transcript

  1. 老舗メディアが改善に
    取り組んでいる話
    VOYAGE GROUP
    ECナビ事業本部
    駒崎大輔

    View Slide

  2. 自己紹介
    ● SIer
    ○ 約10年 PG、SE
    ● Web(ECパッケージ開発)
    ○ 約2年 SE、PM兼インフラとか色々
    ● Web(自社サービス) ←今ココ
    ○ 約3年 ソフトウェアエンジニア

    View Slide

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

    View Slide

  4. VOYAGE GROUP 「2016年9月期通期 決算説明資料」から抜粋

    View Slide

  5. VOYAGE GROUP 「2016年9月期通期 決算説明資料」から抜粋

    View Slide

  6. ECナビ

    View Slide

  7. ECナビ 「ECナビ MEDIA GUIDE 2016年10月〜12月」から抜粋

    View Slide

  8. ECナビ
    ● 1999年: MyID(懸賞サイト)
    ● 2004年: ECナビ
    ECナビとして12歳!
    MyIDから数えると17歳!!

    View Slide

  9. View Slide

  10. View Slide

  11. ECナビのシステム概要

    View Slide

  12. View Slide

  13. ● 古き良き200x年代のあるある構成
    ○ LAMP(PHP/Perl + MySQL + Apache)
    ○ PHP5.6.24, PHP5.x
    ● OracleがコアなDB(OLTP)
    ○ ポイントとユーザなど、サイトの基幹データを管理
    ● 長年オンプレ
    ECナビのシステム概要

    View Slide

  14. ● 15名
    ○ 新卒組、中途組がバランスよく配置
    ○ 中途の平均35才前後、在籍5年くらい
    ● 「事業に貢献する技術」志向が強め
    ○ 技術改善チームが5人
    ● 和気あいあい、チームワーク重視
    ECナビのエンジニア組織

    View Slide

  15. コード

    View Slide

  16. View Slide

  17. View Slide

  18. View Slide

  19. View Slide

  20. 17年

    View Slide

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

    View Slide

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

    View Slide

  23. 慎重かつビッグなリリース
    ● バージョン管理(SVN)の問題
    ● リリースフローの問題
    過去に実在した課題

    View Slide

  24. 開発環境 デプロイサーバ
    SVN
    svn commit
    開発
    svn up
    deploy
    login
    当時のリリースフロー

    View Slide

  25. 当時のリリースフロー

    View Slide

  26. ● SVNでの運用
    ○ commit ≠ リリースOK
    当時のリリースフロー

    View Slide

  27. 辛かった。。。

    View Slide

  28. 解決策
    ● SVNからGitHubへの移行
    ● リリースフローの自動化

    View Slide

  29. 1. リリースしてないファイルの検知
    2. チームのgitレベルアップ
    3. ハードコードされているパスワードの退避
    4. リリースフローの整備、自動化
    やったこと

    View Slide

  30. 1. リリースしてないファイルの検知
    2. チームのgitレベルアップ
    3. ハードコードされているパスワードの退避
    4. リリースフローの整備、自動化
    やったこと

    View Slide

  31. 1. リリースしてないファイルの検知
    commitしてあるけど未リリースのファイル検知

    View Slide

  32. git-lady(ready)
    1. リリースしてないファイルの検知
    チェックし始めたころ
    リリース前日

    View Slide

  33. 1. リリースしてないファイルの検知
    2. チームのgitレベルアップ
    3. ハードコードされているパスワードの退避
    4. リリースフローの整備、自動化
    やったこと

    View Slide

  34. ● エンジニアは大丈夫!
    2. チームのgitレベルアップ

    View Slide

  35. ● デザイナーへのフォローアップ
    ○ 本を配ってハンズオンの勉強会を開催
    ○ GUIのツールは導入検討したがやめた
    ■ エンジニアと同じインターフェース(CUI)で
    ■ デザイナーからも行けそうという声
    ○ デザイナーチームの協力もあり無事
    2. チームのgitレベルアップ

    View Slide

  36. 2. チームのgitレベルアップ
    http://book.impress.co.jp/books/1114101005

    View Slide

  37. 1. リリースしてないファイルの検知
    2. チームのgitレベルアップ
    3. ハードコードされているパスワードの退避
    4. リリースフローの整備、自動化
    やったこと

    View Slide

  38. 3. ハードコードされているパスワードの退避

    View Slide

  39. ● ハードコードされているパスワードを環境変数に追い出し
    ○ DB、APIの認証情報等…
    ● 環境変数の読み込みには phpdotenv を利用
    ○ https://github.com/vlucas/phpdotenv
    3. ハードコードされているパスワードの退避

    View Slide

  40. 3. ハードコードされているパスワードの退避
    https://12factor.net/config

    View Slide

  41. やったこと
    1. リリースしてないファイルの検知
    2. チームのgitレベルアップ
    3. ハードコードされているパスワードの退避
    4. リリースフローの整備、自動化

    View Slide

  42. ● デプロイサーバにログインしなくても良いように
    ● 問題があったらすぐrevertできる
    ● リリースを記録する
    4. リリースフローの整備

    View Slide

  43. 開発環境 デプロイサーバ
    SVN
    svn commit
    開発
    svn up
    deploy
    login
    4. リリースフローの整備
    Before

    View Slide

  44. 4. リリースフローの整備
    開発環境 デプロイサーバ
    GitHub
    開発
    deploy
    jenkins
    デプロイ指示
    After PRをMerge

    View Slide

  45. View Slide

  46. 4. リリースフローの整備
    Inspired by Mercari
    http://tech.mercari.com/entry/2015/10/15/183000

    View Slide

  47. 1. リリースしてないファイルの検知
    2. チームのgitレベルアップ
    3. ハードコードされているパスワードの退避
    4. リリースフローの整備、自動化
    やったこと
    Clear!

    View Slide

  48. どうなった?
    ● リリーススピードアップ
    ○ 余計な気を使わずに済むようになった
    ● 小さくリリースが進んで、より安全に
    ○ リリース回数は2-3倍以上
    ● レビューが活発に

    View Slide

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

    View Slide

  50.   1800 - 600 = 1200
      1200 - 300 = 900

    View Slide

  51. 1800 - 600 = 1200機能
    1200 - 300 = 900テーブル

    View Slide

  52. 不要なコードを葬る
    17年物システムの氷山

    View Slide

  53. 1. 機能の棚卸し
    2. 不要なコードを葬っていく
    やったこと

    View Slide

  54. 1. 機能の棚卸し
    2. 不要なコードを葬っていく
    やったこと

    View Slide

  55. 1. 機能の棚卸し

    View Slide

  56. 機能とテーブルの一覧を作る
    1. 機能の棚卸し

    View Slide

  57. ● テーブルと機能の関連性を調べる
    ○ Database接続ライブラリにログを仕込む
    1. 機能の棚卸し

    View Slide

  58. 1. 機能の棚卸し
    GraphVizで生成

    View Slide

  59. 1. 機能の棚卸し

    View Slide

  60. 1. 機能の棚卸し

    View Slide

  61. 1. 機能の棚卸し
    2. 不要なコードを葬っていく
    やったこと

    View Slide

  62. ● 使われてるか
    ○ エンドポイントへのアクセス
    ○ データの増減
    2. 不要なコードを葬っていく

    View Slide

  63. ● 葬り実行
    ○ コード
    ○ テーブル
    ○ その他設定
    2. 不要なコードを葬っていく

    View Slide

  64. 2. 不要なコードを葬っていく

    View Slide

  65. ● 機能数 1800 => 1200
    ● テーブル数 1200 => 900
    どうなった?

    View Slide

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

    View Slide

  67. 8 x 15 x 8 = 960

    View Slide

  68. ● サービス成長に掛ける比重が大きすぎて時間がとれない
    ● 改善を日常業務に組み込む習慣がない
    改善習慣を身につける

    View Slide

  69. KAIZEN会
    ● やること自由
    ● 丸1日セミナールームにエンジニアが篭る
    ● 基本全員参加
    inspired by Mercari (Be Professional Day)
    http://tech.mercari.com/entry/2016/02/01/164829

    View Slide

  70. KAIZEN会
    ● タイムスケジュール
    ○ 10:00-12:00 作業時間
    ○ 12:00-13:00 お昼(お弁当支給)
    ○ 13:00-17:30 作業時間
    ○ 17:30- KPT

    View Slide

  71. KAIZEN会

    View Slide

  72. KAIZEN会

    View Slide

  73. KAIZEN会
    ● 月1回
    ● 全員参加
    ● 8ヶ月間継続中

    View Slide

  74. KAIZEN会
    ● どうだった?
    ○ エンジニアの声
    ■ 集中して作業できる
    ■ 昔自分が書いたコードをリファクタリング
    ■ 普段見ないコードを見る機会が増えた

    View Slide

  75. KAIZEN会
    ● どうだったか?
    ○ 実際にやったこと例
    ■ 古い作りを新しいフレームワークに乗せる
    ■ デバッグ用タイムトラベル機能の実装
    ■ テストしづらい機能のデータ作成補助機能

    View Slide

  76. KAIZEN会

    View Slide

  77. PhpMetrics
    2016年3月 2016年10月

    View Slide

  78. 改善の歩み
    ● GitHub化
    ○ 2014年12月〜2015年4月
    ● 棚卸し&スリム化
    ○ 2015年10月〜現在
    ● KAIZEN会
    ○ 2016年3月〜現在
    小さく早くリリースできるようになった!
    機能数 1800 => 1200
    テーブル数 1200 => 900
    月1回 全員参加 8ヶ月継続

    View Slide

  79. その他の取り組み
    ● DevOps的な取り組み
    ○ インフラとアプリエンジニアの交換留学
    ○ サイトパフォーマンスチェックをみんなでやる会

    View Slide

  80. その他の取り組み
    ● 外部サービス、ツールの活用例
    ○ Datadog
    ○ Re:dash
    ○ Docker
    ○ horenso(https://github.com/Songmu/horenso)
    ○ site24x7

    View Slide

  81. その他の取り組み
    ● 週1回の読書会
    ○ プログラマが知るべき97のこと
    ○ @t_wadaさん!!の解説つき
    => 「voyage 読書会」で検索
    https://www.oreilly.co.jp/books/9784873114798/

    View Slide

  82. ● システムはもちろんチームが良くなっている
    ● 歴史を繰り返さないように改善を続けていく
    まとめ

    View Slide

  83. まとめ
    ● 大きなチャレンジに取り組んでく気持ち↑↑
    ○ AWS移転プロジェクトを立ち上げ

    View Slide

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

    View Slide