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

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

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

60fc80d3fc82aeba1d779e5bcfed3abf?s=128

Daisuke Komazaki

November 04, 2016
Tweet

Transcript

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

  2. 自己紹介 • SIer ◦ 約10年 PG、SE • Web(ECパッケージ開発) ◦ 約2年

    SE、PM兼インフラとか色々 • Web(自社サービス) ←今ココ ◦ 約3年 ソフトウェアエンジニア
  3. • 小さく素早くリリース • 不要なコードを葬る • 改善習慣を身につける 今日話すこと

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

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

  6. ECナビ

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

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

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

  12. None
  13. • 古き良き200x年代のあるある構成 ◦ LAMP(PHP/Perl + MySQL + Apache) ◦ PHP5.6.24,

    PHP5.x • OracleがコアなDB(OLTP) ◦ ポイントとユーザなど、サイトの基幹データを管理 • 長年オンプレ ECナビのシステム概要
  14. • 15名 ◦ 新卒組、中途組がバランスよく配置 ◦ 中途の平均35才前後、在籍5年くらい • 「事業に貢献する技術」志向が強め ◦ 技術改善チームが5人

    • 和気あいあい、チームワーク重視 ECナビのエンジニア組織
  15. コード

  16. None
  17. None
  18. None
  19. None
  20. 17年

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

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

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

  24. 開発環境 デプロイサーバ SVN svn commit <filelist> 開発 svn up <filelist>

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

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

  27. 辛かった。。。

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

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

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

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

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

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

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

  35. • デザイナーへのフォローアップ ◦ 本を配ってハンズオンの勉強会を開催 ◦ GUIのツールは導入検討したがやめた ▪ エンジニアと同じインターフェース(CUI)で ▪ デザイナーからも行けそうという声

    ◦ デザイナーチームの協力もあり無事 2. チームのgitレベルアップ
  36. 2. チームのgitレベルアップ http://book.impress.co.jp/books/1114101005

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

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

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

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

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

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

  43. 開発環境 デプロイサーバ SVN svn commit <filelist> 開発 svn up <filelist>

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

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

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

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

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

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

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

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

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

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

  55. 1. 機能の棚卸し

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

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

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

  59. 1. 機能の棚卸し

  60. 1. 機能の棚卸し

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

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

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

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

  65. • 機能数 1800 => 1200 • テーブル数 1200 => 900

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

  67. 8 x 15 x 8 = 960

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

  69. KAIZEN会 • やること自由 • 丸1日セミナールームにエンジニアが篭る • 基本全員参加 inspired by Mercari

    (Be Professional Day) http://tech.mercari.com/entry/2016/02/01/164829
  70. KAIZEN会 • タイムスケジュール ◦ 10:00-12:00 作業時間 ◦ 12:00-13:00 お昼(お弁当支給) ◦

    13:00-17:30 作業時間 ◦ 17:30- KPT
  71. KAIZEN会

  72. KAIZEN会

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

  74. KAIZEN会 • どうだった? ◦ エンジニアの声 ▪ 集中して作業できる ▪ 昔自分が書いたコードをリファクタリング ▪

    普段見ないコードを見る機会が増えた
  75. KAIZEN会 • どうだったか? ◦ 実際にやったこと例 ▪ 古い作りを新しいフレームワークに乗せる ▪ デバッグ用タイムトラベル機能の実装 ▪

    テストしづらい機能のデータ作成補助機能
  76. KAIZEN会

  77. PhpMetrics 2016年3月 2016年10月

  78. 改善の歩み • GitHub化 ◦ 2014年12月〜2015年4月 • 棚卸し&スリム化 ◦ 2015年10月〜現在 •

    KAIZEN会 ◦ 2016年3月〜現在 小さく早くリリースできるようになった! 機能数 1800 => 1200 テーブル数 1200 => 900 月1回 全員参加 8ヶ月継続
  79. その他の取り組み • DevOps的な取り組み ◦ インフラとアプリエンジニアの交換留学 ◦ サイトパフォーマンスチェックをみんなでやる会

  80. その他の取り組み • 外部サービス、ツールの活用例 ◦ Datadog ◦ Re:dash ◦ Docker ◦

    horenso(https://github.com/Songmu/horenso) ◦ site24x7
  81. その他の取り組み • 週1回の読書会 ◦ プログラマが知るべき97のこと ◦ @t_wadaさん!!の解説つき => 「voyage 読書会」で検索

    https://www.oreilly.co.jp/books/9784873114798/
  82. • システムはもちろんチームが良くなっている • 歴史を繰り返さないように改善を続けていく まとめ

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

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