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

続)改善失敗から学ぶ、レガシープロダクトに立ち向かうチーム作り。

ynkt
October 03, 2021
480

 続)改善失敗から学ぶ、レガシープロダクトに立ち向かうチーム作り。

PHPConference 2021での発表資料です。

ynkt

October 03, 2021
Tweet

Transcript

  1. 続)改善失敗から学ぶ
    レガシープロダクトに立ち向かうチーム作り
    PHP Conference 2021
    Nakata Yudai
    Cybozu 1

    View Slide

  2. プロフィール
    • 中田 雄大 / なかた ゆうだい
    • サイボウズ株式会社 Garoon開発 中途採用3年目
    • 大阪オフィス所属
    • アーキテクチャのこととか考えるの好きです
    Cybozu 2

    View Slide

  3. Cybozu 3
    Garoon

    View Slide

  4. Cybozu 4

    View Slide

  5. Garoon
    • 開発から20年目
    • PHPは4から7.4に(来年には8.0に)
    • パッケージ版(Linux・Windows)とクラウド版がある
    • テーブル数は約850
    Cybozu 5

    View Slide

  6. Cybozu 6
    今回の発表は前回の続編

    View Slide

  7. 前回
    Cybozu 7

    View Slide

  8. 前回
    Cybozu 8
    実際にレガシープロダクトに立ち向かえたのか

    View Slide

  9. Cybozu 9

    View Slide

  10. Cybozu 10

    View Slide

  11. Cybozu 11
    やってきたこと

    View Slide

  12. やってきたこと
    • Controller改善
    • フロントエンド改善
    • PHPのバージョンアップ
    • デバッグバーの導入
    • CI改善、定常作業の自動化、etc.
    Cybozu 12

    View Slide

  13. Controller改善
    • ユニットテストを書けるようにする
    • リクエストデータの取り扱いやレスポンスの作り込みをするための
    Garoonでの標準的な方法を提供する
    • 冗長なコードの削減
    Cybozu 13

    View Slide

  14. Cybozu 14

    View Slide

  15. Cybozu 15
    • リクエストパラメーターに配列ベースでアクセスしている
    • 手動でリクエスト情報を期待する型にキャストしている

    View Slide

  16. Cybozu 16
    • 依存するクラスのインスタンスをグローバル関数で取得する
    • 依存するクラスをnewを使ってインスタンス生成する

    View Slide

  17. Cybozu 17
    • テンプレートエンジンのインスタンスを直接生成する
    • View構築に関する冗長な記述

    View Slide

  18. Cybozu 18

    View Slide

  19. Cybozu 19

    View Slide

  20. Cybozu 20

    View Slide

  21. Cybozu 21

    View Slide

  22. Cybozu 22

    View Slide

  23. DIコンテナの導入
    • Controllerでの自動的な依存解決の実現
    • 環境別の依存性注入や処理の制御
    • オンプレLinux版、オンプレWindows版、クラウド版...
    Cybozu 23

    View Slide

  24. フロントエンド改善
    Cybozu 24

    View Slide

  25. フロントエンド改善
    • ES2015移行 / TypeScript移行
    • レガシーなコードベースの改善
    • インラインJSの削除 / 階層構造の見直し
    • ReactJS導入
    Cybozu 25
    ベトナムチームがリードして、日本チームとも相談しながら
    発案から実装までベトナムで実施した

    View Slide

  26. レガシーなコードベースの改善
    • 脱スパゲッティーコード
    • 不明確な階層構造からの脱却
    • 使いたいクラスはどこか、抽出したクラスはどこに置くかを整理
    • インラインJSを抜き出す
    • リファクタリング後の新しい実装にはユニットテストを書く
    Cybozu 26

    View Slide

  27. Cybozu 27

    View Slide

  28. Cybozu 28
    • 処理を辿れない
    • どこから呼び出されているか分からない
    • どこにコードが配置されているか分からない

    View Slide

  29. ReactJS導入
    • フロントエンドのコードを1から書き続けるのは非効率
    • 社内の別プロダクトでも採用されていて利用実績がある
    • 担当しているベトナムの開発メンバー間で経験者が比較的多い
    Cybozu 29

    View Slide

  30. ReactJS導入
    • 実際に一部にReactJSを使ったバージョンを11月版から提供
    • 各種コンポーネントをReactJSで代替することも模索中
    Cybozu 30

    View Slide

  31. PHPのバージョンアップ
    • どうしてやる?
    • セキュリティやライセンスの問題を回避する
    • 新しい機能を使えるようにする
    • 元々4だったプロダクトが今は7.4
    • 来年PHP8.0に移行することに向けて現在準備中
    Cybozu 31

    View Slide

  32. PHPのバージョンアップの難しいところ
    • 独自のPHP拡張が存在する
    • 拡張をしていると、PHPに特化した人材だけでは対応できない
    • C言語での実装が可能な人材が必要
    • Changeログを参照して影響範囲の調査
    • コードを確認するだけでは、挙動を判断できない場合がある
    Cybozu 32

    View Slide

  33. PHPの更新に取り組む中での知見
    • 自動テスト大事
    • PHP拡張のユニットテスト ・ PHPのユニットテスト
    • JSのユニットテスト ・ E2Eテスト
    • 重要なクラスやハッピーパスだけでも準備する
    Cybozu 33

    View Slide

  34. PHPの更新に取り組む中での知見
    • 事前の調査も大事だが、早めに動かしてみるのも大事
    • バグはあったとしても、とりあえず次のバージョンで動かしてみる
    • 動いていることを確認できるだけでもテンション上がる
    Cybozu 34

    View Slide

  35. デバッグバー
    • 発端は実行したSQLを確認したいところから
    • 各種情報を画面から確認できるように
    • セッション
    • 実行したSQL
    • テンプレートエンジンに渡した変数 etc.
    Cybozu 35

    View Slide

  36. デバッグバー
    利用ライブラリ: maximebf/php-debugbar
    Cybozu 36

    View Slide

  37. Cybozu 37
    後日技術ブログにて、
    いくつかの改善の詳細を書くので
    是非見てください!

    View Slide

  38. Cybozu 38
    改善を進めたぞ!

    View Slide

  39. Cybozu 39
    順調だった?

    View Slide

  40. Cybozu 40
    ここからは所属チームの話

    View Slide

  41. 所属チームの役割
    • Garoon開発における技術系プロジェクトのハンドリングや実装
    • 国内におけるGaroon関連の技術系依頼の一次受け
    • 技術系の視点を持っての意見出し
    Cybozu 41

    View Slide

  42. Cybozu 42
    改善を進めていたが、、、

    View Slide

  43. Cybozu 43

    View Slide

  44. どんな問題意識があった?
    • やらなきゃいけない事と改善のプロジェクトの両輪をどう回す?
    • プロジェクトの優先順位を決めづらい
    • 各改善プロジェクトが大きくフィードバックサイクルが回りづらい
    • 他のメンバーが何をやっているか分かりづらい
    Cybozu 44

    View Slide

  45. やらなきゃいけないこといっぱい
    • 新基盤への移行に向けた対応
    • 脆弱性対応
    • 性能改善
    • 様々な割り込みタスク etc.
    Cybozu 45

    View Slide

  46. メンバーが何をやってるか分かりづらい
    • 問題が発生した場合は勿論共有されるが、それ以外も知りたい
    • そもそもそのプロジェクトの目的/ゴールってなんだっけ?
    • いまどんなことしてる?
    • 得られた知見ってある?
    • いつまでやるんだっけ?順調?
    Cybozu 46

    View Slide

  47. Cybozu 47
    改善を継続していくための
    仕組みが必要

    View Slide

  48. Cybozu 48
    プロダクト改善の持続性を高めるために
    チームのプロセスも改善する

    View Slide

  49. チームのプロセス改善
    • チームの目的や目標を言語化し、チームの方向性を固める
    • チームとしてどのプロジェクトを優先するべきか迷いづらくする
    Cybozu 49

    View Slide

  50. チームのプロセス改善
    Cybozu 50
    • 定期的にプロジェクトの状況を共有し、スケジュールを考え直す機
    会を作る
    • 毎日の昼会でプロジェクトの状況を持ち回りで共有する
    • 月1でプロジェクトの優先順位を見直し、今月何するか確認する

    View Slide

  51. チームのプロセス改善
    Cybozu 51

    View Slide

  52. チームのプロセス改善
    Cybozu 52
    • 割り込みタスクの対応方法をルール化する
    • 週ごとに割り込みタスクの一次対応をサブチームに割り当てる
    • 他チームから事前に相談を受けるための時間を毎日30分確保

    View Slide

  53. Cybozu 53
    プロセス改善に
    集中できる人を用意する

    View Slide

  54. プロセス改善に集中できる人を用意する
    • 片手間でプロセス改善をするのは大変
    • 本業に手一杯ならチーム外から協力してくれる人を呼ぶのも手
    • 新しい視点で問題点を発見してもらえる
    • プロセスの見直しを主導するのは技術者じゃなくてもできる
    Cybozu 54

    View Slide

  55. Cybozu 55

    View Slide

  56. 問題意識は解決できたのか
    • プロジェクトの優先順位を合意して、改善を進められるようになった
    • 割り込みタスクをチーム内で迷いなく負荷分散できるようになった
    • 毎日の昼会でプロジェクトの状況や知見を把握できるようになった
    Cybozu 56

    View Slide

  57. Cybozu 57
    Garoonを開発者にとって
    魅力的なプロダクトにする

    View Slide

  58. Cybozu 58
    開発者に向けた改善は、
    開発者同士で感謝し合える

    View Slide

  59. 嬉しいやり取り
    Cybozu 59

    View Slide

  60. 嬉しいやり取り
    Cybozu 60

    View Slide

  61. Cybozu 61
    戦いは続く

    View Slide

  62. 改善を進めていく
    • 前回の発表の通り、改善していくための環境はすでにある
    • フロントエンドエキスパートチーム、生産性向上チームの協力がある
    • プロセス改善するためにチーム外から人に来てもらえた
    • Garoonチーム以外の色んな人に協力してもらえる環境がある
    Cybozu 62

    View Slide

  63. とは言えまだ問題も
    • 改善をしやすい環境ができ、実際に改善を進めているが、開発20
    年目のこの製品にはまだまだ改善ポイントが沢山ある
    • 改善をより進めていくにはもっと人が欲しい
    Cybozu 63

    View Slide

  64. メンテナンスしていかないと人集まらない
    • 学んだこと、新しいことを使える選択肢を提供したい
    • 使わない選択をするのはOK、使えない/選択できないのはNG
    • 広く使わている技術に追従する
    Cybozu 64

    View Slide

  65. Cybozu 65
    Garoonを開発者にとって
    魅力的なプロダクトにする

    View Slide