Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
続)改善失敗から学ぶ、レガシープロダクトに立ち向かうチーム作り。
Search
ynkt
October 03, 2021
0
610
続)改善失敗から学ぶ、レガシープロダクトに立ち向かうチーム作り。
PHPConference 2021での発表資料です。
ynkt
October 03, 2021
Tweet
Share
Featured
See All Featured
Designing for Performance
lara
604
68k
Bash Introduction
62gerente
608
210k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Why Our Code Smells
bkeepers
PRO
334
57k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Facilitating Awesome Meetings
lara
50
6.1k
Navigating Team Friction
lara
183
14k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
Adopting Sorbet at Scale
ufuk
73
9.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Transcript
続)改善失敗から学ぶ レガシープロダクトに立ち向かうチーム作り PHP Conference 2021 Nakata Yudai Cybozu 1
プロフィール • 中田 雄大 / なかた ゆうだい • サイボウズ株式会社 Garoon開発
中途採用3年目 • 大阪オフィス所属 • アーキテクチャのこととか考えるの好きです Cybozu 2
Cybozu 3 Garoon
Cybozu 4
Garoon • 開発から20年目 • PHPは4から7.4に(来年には8.0に) • パッケージ版(Linux・Windows)とクラウド版がある • テーブル数は約850 Cybozu
5
Cybozu 6 今回の発表は前回の続編
前回 Cybozu 7
前回 Cybozu 8 実際にレガシープロダクトに立ち向かえたのか
Cybozu 9
Cybozu 10
Cybozu 11 やってきたこと
やってきたこと • Controller改善 • フロントエンド改善 • PHPのバージョンアップ • デバッグバーの導入 •
CI改善、定常作業の自動化、etc. Cybozu 12
Controller改善 • ユニットテストを書けるようにする • リクエストデータの取り扱いやレスポンスの作り込みをするための Garoonでの標準的な方法を提供する • 冗長なコードの削減 Cybozu 13
Cybozu 14
Cybozu 15 • リクエストパラメーターに配列ベースでアクセスしている • 手動でリクエスト情報を期待する型にキャストしている
Cybozu 16 • 依存するクラスのインスタンスをグローバル関数で取得する • 依存するクラスをnewを使ってインスタンス生成する
Cybozu 17 • テンプレートエンジンのインスタンスを直接生成する • View構築に関する冗長な記述
Cybozu 18
Cybozu 19
Cybozu 20
Cybozu 21
Cybozu 22
DIコンテナの導入 • Controllerでの自動的な依存解決の実現 • 環境別の依存性注入や処理の制御 • オンプレLinux版、オンプレWindows版、クラウド版... Cybozu 23
フロントエンド改善 Cybozu 24
フロントエンド改善 • ES2015移行 / TypeScript移行 • レガシーなコードベースの改善 • インラインJSの削除 /
階層構造の見直し • ReactJS導入 Cybozu 25 ベトナムチームがリードして、日本チームとも相談しながら 発案から実装までベトナムで実施した
レガシーなコードベースの改善 • 脱スパゲッティーコード • 不明確な階層構造からの脱却 • 使いたいクラスはどこか、抽出したクラスはどこに置くかを整理 • インラインJSを抜き出す •
リファクタリング後の新しい実装にはユニットテストを書く Cybozu 26
Cybozu 27
Cybozu 28 • 処理を辿れない • どこから呼び出されているか分からない • どこにコードが配置されているか分からない
ReactJS導入 • フロントエンドのコードを1から書き続けるのは非効率 • 社内の別プロダクトでも採用されていて利用実績がある • 担当しているベトナムの開発メンバー間で経験者が比較的多い Cybozu 29
ReactJS導入 • 実際に一部にReactJSを使ったバージョンを11月版から提供 • 各種コンポーネントをReactJSで代替することも模索中 Cybozu 30
PHPのバージョンアップ • どうしてやる? • セキュリティやライセンスの問題を回避する • 新しい機能を使えるようにする • 元々4だったプロダクトが今は7.4 •
来年PHP8.0に移行することに向けて現在準備中 Cybozu 31
PHPのバージョンアップの難しいところ • 独自のPHP拡張が存在する • 拡張をしていると、PHPに特化した人材だけでは対応できない • C言語での実装が可能な人材が必要 • Changeログを参照して影響範囲の調査 •
コードを確認するだけでは、挙動を判断できない場合がある Cybozu 32
PHPの更新に取り組む中での知見 • 自動テスト大事 • PHP拡張のユニットテスト ・ PHPのユニットテスト • JSのユニットテスト ・
E2Eテスト • 重要なクラスやハッピーパスだけでも準備する Cybozu 33
PHPの更新に取り組む中での知見 • 事前の調査も大事だが、早めに動かしてみるのも大事 • バグはあったとしても、とりあえず次のバージョンで動かしてみる • 動いていることを確認できるだけでもテンション上がる Cybozu 34
デバッグバー • 発端は実行したSQLを確認したいところから • 各種情報を画面から確認できるように • セッション • 実行したSQL •
テンプレートエンジンに渡した変数 etc. Cybozu 35
デバッグバー 利用ライブラリ: maximebf/php-debugbar Cybozu 36
Cybozu 37 後日技術ブログにて、 いくつかの改善の詳細を書くので 是非見てください!
Cybozu 38 改善を進めたぞ!
Cybozu 39 順調だった?
Cybozu 40 ここからは所属チームの話
所属チームの役割 • Garoon開発における技術系プロジェクトのハンドリングや実装 • 国内におけるGaroon関連の技術系依頼の一次受け • 技術系の視点を持っての意見出し Cybozu 41
Cybozu 42 改善を進めていたが、、、
Cybozu 43
どんな問題意識があった? • やらなきゃいけない事と改善のプロジェクトの両輪をどう回す? • プロジェクトの優先順位を決めづらい • 各改善プロジェクトが大きくフィードバックサイクルが回りづらい • 他のメンバーが何をやっているか分かりづらい Cybozu
44
やらなきゃいけないこといっぱい • 新基盤への移行に向けた対応 • 脆弱性対応 • 性能改善 • 様々な割り込みタスク etc.
Cybozu 45
メンバーが何をやってるか分かりづらい • 問題が発生した場合は勿論共有されるが、それ以外も知りたい • そもそもそのプロジェクトの目的/ゴールってなんだっけ? • いまどんなことしてる? • 得られた知見ってある? •
いつまでやるんだっけ?順調? Cybozu 46
Cybozu 47 改善を継続していくための 仕組みが必要
Cybozu 48 プロダクト改善の持続性を高めるために チームのプロセスも改善する
チームのプロセス改善 • チームの目的や目標を言語化し、チームの方向性を固める • チームとしてどのプロジェクトを優先するべきか迷いづらくする Cybozu 49
チームのプロセス改善 Cybozu 50 • 定期的にプロジェクトの状況を共有し、スケジュールを考え直す機 会を作る • 毎日の昼会でプロジェクトの状況を持ち回りで共有する • 月1でプロジェクトの優先順位を見直し、今月何するか確認する
チームのプロセス改善 Cybozu 51
チームのプロセス改善 Cybozu 52 • 割り込みタスクの対応方法をルール化する • 週ごとに割り込みタスクの一次対応をサブチームに割り当てる • 他チームから事前に相談を受けるための時間を毎日30分確保
Cybozu 53 プロセス改善に 集中できる人を用意する
プロセス改善に集中できる人を用意する • 片手間でプロセス改善をするのは大変 • 本業に手一杯ならチーム外から協力してくれる人を呼ぶのも手 • 新しい視点で問題点を発見してもらえる • プロセスの見直しを主導するのは技術者じゃなくてもできる Cybozu
54
Cybozu 55
問題意識は解決できたのか • プロジェクトの優先順位を合意して、改善を進められるようになった • 割り込みタスクをチーム内で迷いなく負荷分散できるようになった • 毎日の昼会でプロジェクトの状況や知見を把握できるようになった Cybozu 56
Cybozu 57 Garoonを開発者にとって 魅力的なプロダクトにする
Cybozu 58 開発者に向けた改善は、 開発者同士で感謝し合える
嬉しいやり取り Cybozu 59
嬉しいやり取り Cybozu 60
Cybozu 61 戦いは続く
改善を進めていく • 前回の発表の通り、改善していくための環境はすでにある • フロントエンドエキスパートチーム、生産性向上チームの協力がある • プロセス改善するためにチーム外から人に来てもらえた • Garoonチーム以外の色んな人に協力してもらえる環境がある Cybozu
62
とは言えまだ問題も • 改善をしやすい環境ができ、実際に改善を進めているが、開発20 年目のこの製品にはまだまだ改善ポイントが沢山ある • 改善をより進めていくにはもっと人が欲しい Cybozu 63
メンテナンスしていかないと人集まらない • 学んだこと、新しいことを使える選択肢を提供したい • 使わない選択をするのはOK、使えない/選択できないのはNG • 広く使わている技術に追従する Cybozu 64
Cybozu 65 Garoonを開発者にとって 魅力的なプロダクトにする