CTO室・開発基盤チームの松村です。
今回は、開発基盤チームの取り組みについて紹介します。
開発基盤チームのメンバーは個々にやっていることが違うことが多いのですが、
私の最近の業務は
・OSのバージョンUP、コンテナ化
・開発生産性向上のための施策(20%向上)
です。
今回はこの中でも「開発生産性向上」のための施策について紹介したいと思います。
開発生産性向上のための指標
デプロイ回数 :
2023年のデプロイ回数から20%増を目標にしています。
デプロイあたりのコスト減 :
2023年実績から20%減を目標にしています。
取り組んでいること
データの可視化
1か月ごとにプルリクエスト数と追加行、削除行、編集行の平均を取得してグラフにして可視化します。以下のようなグラフを出してシステムメンバーに共有します。
■プルリクエスト数
※実際は個人とリポジトリごとの数値も出しています
■レビュー数
※実際は個人とリポジトリごとの数値も出しています
ここでの狙いは、プルリクエスト数の増加により、追加・編集行数の減少を実現することです。
具体的には、細かくプルリクエストを出すことを目指していて、一回のプルリクエストの追加・編集行数を少なくすることが目的です。
「プルリクエストを出す→レビューする→修正する→OKしてマージされる」というサイクルのスピードを上げたいと考えています。これが実現できれば、以下のようなメリットが期待できます。
・手戻りの減少
・プルリクエストの見やすさ向上
・レビューの負担軽減
このように、プルリクエストのサイクルが迅速かつ効率的に進むことで、全体的な開発フローが改善されると考えています。
また、このグラフには表示されていませんが、実際には以下の情報も取得しています。
・どのリポジトリが最もプルリクエストを出しているか
・どのリポジトリが最もレビューされているか
・誰が最もプルリクエストをあげているか
・誰が最もレビューをしているか
この情報を共有する目的は、個々人がどのくらい小さなプルリクエストをあげているか、およびどのくらいレビューに貢献しているかを認識してもらい、それぞれの作業効率の向上を促すことです。
プルリクエストのレビュー
プルリクエストのレビューをひたすら行います。
基盤チームでは基本的に開発プロジェクトに入って開発することはなく、開発プロジェクトチームがあげたプルリクエストのレビューを行っています。
ここでは、コードの改善案を出したり、困っていることのサポートをしています。
3分間Tipsのシェア
週に一回のミーティング内で、3分間tipsを始めました。
日々のプルリクエストのレビューや、サポートしている中で見つけた課題や、tipsを共有しています。
最近のお題はこんな感じです。
・test@sample.com やtest@test.comは実在する(他社の保有する)のでテストケースなどで使わない
・不要なら @Component や @SpringBootTestはつけない
※Spring Framework の機能に依存しない、あるいは機能を必要としないクラスには @Component をつけないほうが良い。コントローラーやサービスに inject しなくても動作するので、コンストラクタのパラメータ数を減らせる。テストクラスも@SpringBootTestは必要ない。
・varを出来るだけ使わない。
※どこで書き換えられたかわからなくなり、予期せぬバグを生む。
可読性のコストも増える。
・commit時にGithub Actions を動作させない方法
・DBで取得したデータを保持するデータクラスをそのままAPIのレスポンスデータクラスとして使わない。
※DBのカラム名を変更した場合にHTTPレスポンスのJSONのプロパティー名が意図せずに変わってしまう、などが起きたりする
・例外を想定するテストの書き方
・static メソッドのモックのしかた
・定数の定義について
※その定数が何を意味するかわかるように変数名を定義する
・IntelliJ IDEA での Copilot Chat の利用例
・日付時刻フォーマット(REST APIの日付時刻のフォーマットとしては、ISO 8601 に従う)
copilotの導入
システム開発メンバーにCopilotの導入をしてもらい、積極的に利用をしてもらっています。
Copilotはコードの自動補完やエラーチェック、効率的なコード生成など、多くの機能を提供し、開発効率の向上に貢献しています。
大部分のメンバーがCopilotを日常的に使用しており、その利便性を実感しています。
直近のCopilotの利用状況は以下の通りです。
グラフを見ると、提案されたコードのうち25%が実際に受け入れられていることがわかります。
Copilotの提案を積極的に活用することで、さらに高品質なコードの維持と開発スピードの向上を目指しています。
課題
プルリクエストのマージ時間
現在、プルリクエストが上がってからマージされるまでの時間を計れていないことが課題となっています。現在はこの問題を解決するために、対策を考えているところです。
開発スピード・開発力以外の課題
開発スピードと開発力の向上を目指している一方で、その他の課題も浮き彫りになってきました。
例えば、業務を十分に理解するまでに時間がかかっている点が挙げられます。
これによってチームの生産性が一時的に低下することがあります。
そこで、業務理解の底上げをする取り組みが必要だと考え、業務ナレッジの勉強会を始めました。
新しいメンバーの立ち上がりのスピード
新しく入ったメンバーの立ち上がりのスピードを向上させることも課題です。
そのため、今後はプロセスの改善・トレーニング教材の充実を目指したいと思っています。
まとめ
開発基盤チームでは、開発生産性向上を目標に掲げ、プルリクエストの可視化やフロー改善、レビューの見える化など様々な取り組みを行っています。
実際に最近はプルリクエストがとても見やすくなっています。
しかし、プルリクエストが上がってからマージされるまでの時間を測定する仕組みの不足、レビューのタイムリーさや質の向上、新メンバーの業務理解の進展と立ち上がりスピードなど、まだ解決すべき課題が残っています。
これらの課題に対処することで、さらに開発生産性を高め、チーム全体のパフォーマンスを向上させることができます。
これらの課題に対処するためには、PDCA(Plan-Do-Check-Act)サイクルを回しながら、具体的な施策を考え、トライしていくことが重要です。これにより、さらなる開発生産性の向上とチームのパフォーマンス向上を目指します。
今後も、改善に向けた具体的な施策をPDCAサイクルで回しつつ実行していきたいと思います。