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
240329_プルリクエストレビューの効率化
Search
ktc-yuji-torii
April 01, 2024
Technology
0
170
240329_プルリクエストレビューの効率化
プルリクエストのモチベーションを下げない工夫をまとめました。
ktc-yuji-torii
April 01, 2024
Tweet
Share
More Decks by ktc-yuji-torii
See All by ktc-yuji-torii
バックエンドのコードファーストなOpenAPIスキーマ駆動開発 - TSKaigi2025
yujitorii
2
410
Other Decks in Technology
See All in Technology
堅牢な認証基盤の実現 TypeScriptで代数的データ型を活用する
kakehashi
PRO
2
240
比起獨自升級 我更喜歡 DevOps 文化 <3
line_developers_tw
PRO
0
480
Azure AI Foundryでマルチエージェントワークフロー
seosoft
0
120
DB 醬,嗨!哪泥嘎斯基?
line_developers_tw
PRO
0
490
2025/6/21 日本学術会議公開シンポジウム発表資料
keisuke198619
2
430
工具人的一生: 開發很多 AI 工具讓我 慵懶過一生
line_developers_tw
PRO
0
470
活きてなかったデータを活かしてみた話 / Shirokane Kougyou vol 19
sansan_randd
1
380
Perk アプリの技術選定とリリースから1年弱経ってのふりかえり
stomk
0
120
Model Mondays S2E02: Model Context Protocol
nitya
0
120
RubyOnRailsOnDevin+α / DevinMeetupJapan#2
ginkouno
0
800
AWS全冠したので振りかえってみる
tajimon
0
150
從四件事帶你見識見識 事件驅動架構設計 (EDA)
line_developers_tw
PRO
0
370
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
780
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.4k
Practical Orchestrator
shlominoach
188
11k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.8k
Transcript
プルリクエストの流れを改善する方法のまとめ 2024/4/1 #
©KINTO Corporation. All rights reserved. 2 自己紹介 バックエンド:Go, Python フロントエンド:React/TypeScript
日本酒好きです🍶 味と銘柄を覚えられないのが悩みです KINTOテクノロジーズ株式会社 プラットフォーム開発部 バックエンド /フロントエンドエンジニア 鳥居 雄仁
©KINTO Corporation. All rights reserved. 3 プルリクエスト処理速度の低下の主な原因 • プルリクエストを開いた後そっと閉じたことありませんか? •
レビューを行う側のモチベーションの低下が滞留の原因 • モチベーションの低下を引き起こす要因に対処することで、 プルリクエストの処理速度を向上させることが可能 • 待ち時間が減り、チームの開発効率も向上する
©KINTO Corporation. All rights reserved. 4 モチベーション低下の要因の対処 • プルリクエストのサイズと構造の最適化 •
PRの単位を小さくする • GitHubActions等を活用しレビュー負担を軽減する • コミュニケーションと透明性の向上 • テンプレートを活用し必要な情報を明確にする • コメント略語を活用し、誤解を避ける • Slack連携等を活用し即時通知や、リマインドを実施する • モブPR(ウォークスルー)で消化する • その他 • プルリクエストのサイクルタイムを意識する • CodeSpacesで動作確認
©KINTO Corporation. All rights reserved. 5 プルリクエストのサイズと構造の最適化 1
©KINTO Corporation. All rights reserved. 6 PRのサイズを小さくする • プルリクエストを開いた時の画像をみてみましょう •
そっと閉じたくなりますよね?😇
©KINTO Corporation. All rights reserved. 7 PRのサイズを小さくする • ファイル変更数が多いとモチベ低下 •
変更数多いな大変そう、後で見るか・・・ • ファイル変更数が多いと • コメントも多くなる → 途中から参加しづらい • 文脈を追う負担増 • レビュアー減少、レビュー効率低下と悪循環 → プルリクエストのリードタイムが増加
©KINTO Corporation. All rights reserved. 8 PRのサイズを小さくする • 基本的に最大5~10個程度に抑える •
例えば • バックエンド: • 一つのレイヤー単位などにする • DIなどを利用し疎結合な設計をする • フロントエンド: • コンポーネント単位にする • サブブランチを作成する • ブランチが巨大になる場合、サブブランチを作成しブランチに集約 • feature_a • feature_a_sub1, • feature_a_sub2といった形
©KINTO Corporation. All rights reserved. 9 GitHub Actionsを活用し、負担の軽減 • コード品質のチェック、事前テストを実施する
• 基本的な品質保証を自動化することでレビュー対象が明確になる • フロントエンドの場合はVRTの活用
©KINTO Corporation. All rights reserved. 10 コミュニケーションと透明性の向上 2
©KINTO Corporation. All rights reserved. 11 プルリクエストテンプレート:レビュー優先度 • レビュー優先度を示すことで、具体的な期限を伝える •
プルリクエストテンプレートを作成し、ガイドライン化する
©KINTO Corporation. All rights reserved. 12 プルリクエストテンプレート:レビューの種類 • プルリクエストの内容を示すことで、レビューの要求レベルを 理解できる
©KINTO Corporation. All rights reserved. 13 プルリクエストテンプレート:内容説明 • レビューをしやすくするために情報提供する •
実装内容や仕様書のリンク等 • 警告表示構文等ででみやすさを工夫する
©KINTO Corporation. All rights reserved. 14 行コメントの活用 • レビュイー: •
実装背景・課題感などコードから読みとれない情報を提供 • レビュアー: • 直接的なフィードバックなどを提供 • テキストコミュニケーションによる摩擦の軽減は必須
©KINTO Corporation. All rights reserved. 15 コメントにコメント略語ラベルをつける • 意図と違う受け取り方をされやすいので、それを補うことで心 理的安全性を高める
• コメントへの対応内容も明確になる • 例えば • ask, Q → 質問 • imo → 個人的な見解、軽微な提案 • nits → 些細な質問、無視してOK • must → 承認には修正必須 • fyi → 参考までに共有 • good → 良い実装には称賛を! • →
©KINTO Corporation. All rights reserved. 16 レビュアーの自動アサイン • チームに対して自動でアサイン •
レビューの負担を公平に分配 • 設定手順 1. チームを作成する 2. .github/CODEOWNERSファイルにチームを設定 ファイルの種類ごとに対象チームを設定することもできる 続く
©KINTO Corporation. All rights reserved. 17 オートアサイン設定 • アサインしたいチームの設定画面へ遷移して Enable
auto assignment にチェック • 振り分け方法はラウンドロビンorロードバランス
©KINTO Corporation. All rights reserved. 18 モブPR(ウォークスルー)で消化する • 口頭説明が必要なもの、早めにマージしたいもの、PRをが停滞 しているものなどは
モブプロならぬモブPRを実施。Zoomで消化する • Slackのデイリーワークフローでアピールできるようにしています
©KINTO Corporation. All rights reserved. 19 Slack連携等を活用し即時通知や、リマインドを実施する • プルリクエストの作成時に通知をする •
プルリクエストの作成に気づくきっかけ • チームに対してリマインドをスケジュールする • 滞留しているプルリクエストの消化を促す
©KINTO Corporation. All rights reserved. 20 その他 3
©KINTO Corporation. All rights reserved. 21 プルリクエストのサイクルタイムを意識する • 一定時間経過するとコメントを投稿する •
アサインされたレビュアーに通知が飛ぶので気付ける • 経過時間に応じてラベリングする • 想定よりリードタイムが⾧いPRを残さない • ラベルでフィルタリングできる
©KINTO Corporation. All rights reserved. 22 プルリクエストのサイクルタイムを計測し改善につなげる • チームのパフォーマンスを可視化し、改善する •
可視化ツールを利用して計測 • pull-request-analytics • https://github.com/marketplace/actions/pull-request-analytics • Findy Team+ • チームで日々の改善につなげましょう🚀🚀
©KINTO Corporation. All rights reserved. 23 CodeSpacesで動作確認 • codespace は、クラウドでホストされている開発環境
• Dev Containersと同様の体験が可能 • ローカル環境のブランチを切り替える必要がないので 現在の作業に影響しない • (無料枠あり) • CodeSpacesについては テックブログに記事を書きました (情報の鮮度落ちてきましたが)
以上! Thank you !
APPENDIX
©KINTO Corporation. All rights reserved. 26 参考文献 • ちょっとした気配りで皆を幸せにする GitHub
の使い方 #初心者 - Qiita https://qiita.com/squid-cat/items/7166317e60d3ff96ccb7 • レビューコメントにメタ情報を持たせよう https://zenn.dev/yumemi_inc/articles/review- badge • Googleのコードレビューのガイドラインに沿って自分がエンジニア1年目に書いたコードをレ ビューしてみた | PrAhaENGINEERLAB https://www.praha-inc.com/lab/posts/code-review • Playwright + reg-suitでVisual Regression Testing(VRT)を導入 https://zenn.dev/koheii/articles/8214467454a46c • 開発のリードタイム削減のために入れたgithub actionsたちをご紹介! (実装例付き) #GitHub - Qiita https://qiita.com/haruka_odenkun/items/d95dbb5f2dc91ff9187b • [続!Dev Container] GitHub Codespacesでクラウド開発環境を構築 | KINTO Tech Blog | キン トテックブログ https://blog.kinto-technologies.com/posts/devcontainer_codespaces/ • 基本的な書き方とフォーマットの構文 - GitHub Docs https://docs.github.com/ja/get- started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic- writing-and-formatting-syntax#alerts