Save 37% off PRO during our Black Friday Sale! »

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

7938a6e298b9942dd4c0a7712cf05415?s=47 ynkt
October 03, 2021
210

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

PHPConference 2021での発表資料です。

7938a6e298b9942dd4c0a7712cf05415?s=128

ynkt

October 03, 2021
Tweet

Transcript

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

  2. プロフィール • 中田 雄大 / なかた ゆうだい • サイボウズ株式会社 Garoon開発

    中途採用3年目 • 大阪オフィス所属 • アーキテクチャのこととか考えるの好きです Cybozu 2
  3. Cybozu 3 Garoon

  4. Cybozu 4

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

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

  7. 前回 Cybozu 7

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

  9. Cybozu 9

  10. Cybozu 10

  11. Cybozu 11 やってきたこと

  12. やってきたこと • Controller改善 • フロントエンド改善 • PHPのバージョンアップ • デバッグバーの導入 •

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

  14. Cybozu 14

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

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

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

  18. Cybozu 18

  19. Cybozu 19

  20. Cybozu 20

  21. Cybozu 21

  22. Cybozu 22

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

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

  25. フロントエンド改善 • ES2015移行 / TypeScript移行 • レガシーなコードベースの改善 • インラインJSの削除 /

    階層構造の見直し • ReactJS導入 Cybozu 25 ベトナムチームがリードして、日本チームとも相談しながら 発案から実装までベトナムで実施した
  26. レガシーなコードベースの改善 • 脱スパゲッティーコード • 不明確な階層構造からの脱却 • 使いたいクラスはどこか、抽出したクラスはどこに置くかを整理 • インラインJSを抜き出す •

    リファクタリング後の新しい実装にはユニットテストを書く Cybozu 26
  27. Cybozu 27

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

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

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

  31. PHPのバージョンアップ • どうしてやる? • セキュリティやライセンスの問題を回避する • 新しい機能を使えるようにする • 元々4だったプロダクトが今は7.4 •

    来年PHP8.0に移行することに向けて現在準備中 Cybozu 31
  32. PHPのバージョンアップの難しいところ • 独自のPHP拡張が存在する • 拡張をしていると、PHPに特化した人材だけでは対応できない • C言語での実装が可能な人材が必要 • Changeログを参照して影響範囲の調査 •

    コードを確認するだけでは、挙動を判断できない場合がある Cybozu 32
  33. PHPの更新に取り組む中での知見 • 自動テスト大事 • PHP拡張のユニットテスト ・ PHPのユニットテスト • JSのユニットテスト ・

    E2Eテスト • 重要なクラスやハッピーパスだけでも準備する Cybozu 33
  34. PHPの更新に取り組む中での知見 • 事前の調査も大事だが、早めに動かしてみるのも大事 • バグはあったとしても、とりあえず次のバージョンで動かしてみる • 動いていることを確認できるだけでもテンション上がる Cybozu 34

  35. デバッグバー • 発端は実行したSQLを確認したいところから • 各種情報を画面から確認できるように • セッション • 実行したSQL •

    テンプレートエンジンに渡した変数 etc. Cybozu 35
  36. デバッグバー 利用ライブラリ: maximebf/php-debugbar Cybozu 36

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

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

  39. Cybozu 39 順調だった?

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

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

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

  43. Cybozu 43

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

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

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

    いつまでやるんだっけ?順調? Cybozu 46
  47. Cybozu 47 改善を継続していくための 仕組みが必要

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

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

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

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

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

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

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

    54
  55. Cybozu 55

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

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

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

  59. 嬉しいやり取り Cybozu 59

  60. 嬉しいやり取り Cybozu 60

  61. Cybozu 61 戦いは続く

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

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

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

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