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
DroidKaigi2023 突撃!隣のコードレビュー
Search
sato
September 18, 2023
Research
0
4k
DroidKaigi2023 突撃!隣のコードレビュー
DroidKaigi2023で発表した「突撃!隣のコードレビュー 」のスライド資料
sato
September 18, 2023
Tweet
Share
More Decks by sato
See All by sato
開発効率を上げるための チーム文化
satotaichi
2
590
Other Decks in Research
See All in Research
渋谷Well-beingアンケート調査結果
shibuyasmartcityassociation
0
300
EBPMにおける生成AI活用について
daimoriwaki
0
220
メールからの名刺情報抽出におけるLLM活用 / Use of LLM in extracting business card information from e-mails
sansan_randd
2
270
Weekly AI Agents News! 8月号 プロダクト/ニュースのアーカイブ
masatoto
1
210
Weekly AI Agents News! 10月号 プロダクト/ニュースのアーカイブ
masatoto
1
150
ミニ四駆AI用制御装置の事例紹介
aks3g
0
180
機械学習でヒトの行動を変える
hiromu1996
1
390
メタヒューリスティクスに基づく汎用線形整数計画ソルバーの開発
snowberryfield
3
620
TransformerによるBEV Perception
hf149
1
580
国際会議ACL2024参加報告
chemical_tree
1
360
The many faces of AI and the role of mathematics
gpeyre
1
1.4k
marukotenant01/tenant-20240916
marketing2024
0
620
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
The Language of Interfaces
destraynor
154
24k
Navigating Team Friction
lara
183
15k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Thoughts on Productivity
jonyablonski
67
4.4k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Transcript
突撃!隣のコードレビュー created by Okumura / Sato Taichi
スピーカー紹介 合同会社DMM.com Androidエンジニア Okumura 猫が好き Sato Taichi 肉が好き
コードレビューは好きですか?
コードレビューのメリット 不具合が混入するリスクの軽減 可読性や保守性の向上 メンバーのスキル向上 など
None
レビューに時間が 取られすぎる…
レビューに時間が 取られすぎる… ギスギスする…
レビューに時間が 取られすぎる… ギスギスする… … など、課題も発生
・弊社の開発体制について ・各チームの事例(3チーム) ・チーム概要 ・レビューの流れ ・チームで工夫していること ・チームで改善したいこと ・個人の取り組み ・レビュアーとしての工夫 ・レビューイとしての工夫 ・Androidならではのレビュー観点
話すこと(アジェンダ)
・弊社の開発体制について ・各チームの事例(3チーム) ・チーム概要 ・レビューの流れ ・チームで工夫していること ・チームで改善したいこと ・個人の取り組み ・レビュアーとしての工夫 ・レビューイとしての工夫 ・Androidならではのレビュー観点
話すこと(アジェンダ)
・弊社の開発体制について ・各チームの事例(3チーム) ・チーム概要 ・レビューの流れ ・チームで工夫していること ・チームで改善したいこと ・個人の取り組み ・レビュアーとしての工夫 ・レビューイとしての工夫 ・Androidならではのレビュー観点
話すこと(アジェンダ)
セッションの目標
セッションの目標 コードレビューに対して ほんのちょっと 前向きな気持ちに
・弊社の開発体制について ・各チームの事例(3チーム) ・チーム概要 ・レビューの流れ ・チームで工夫していること ・チームで改善したいこと ・個人の取り組み ・レビュアーとしての工夫 ・レビューイとしての工夫 ・Androidならではのレビュー観点
アジェンダ
None
DMMポイント クラブ DMM TV DMMブックス 開発チーム 開発チーム 開発チーム
・弊社の開発体制について ・各チームの事例(3チーム) ・チーム概要 ・レビューの流れ ・チームで工夫していること ・チームで改善したいこと ・個人の取り組み ・レビュアーとしての工夫 ・レビューイとしての工夫 ・Androidならではのレビュー観点
アジェンダ
None
どんなアプリを作っているか? DMMポイントクラブ →お得にさまざまなDMMのサービスを 利用できるようにする、 ポイントプラットフォームアプリ
チーム概要 人数 5名 開発の特徴 ・既存実装はAndroid Viewが多い ・新規実装や改修時にはJetpack Composeを採用
レビューの流れ プルリク 作成 CI チェッ ク レビュー 実施 マージ チェックリストに沿って
セルフチェック Approveがもらえるまで 指摘→修正を繰り返す レビューしてくれた人全 員からApproveをもらえ たらマージ 問題が 発生していたら対応
チームとして工夫していること 実装前に行う工夫 ・実装前に設計のレビューで実装の流れを共有 実装後に行う工夫 ・プルリクエストのテンプレートを工夫 ・チームとしてコードレビュータイムを設置
DMMポイントクラブのプルリクテンプレート issueのリンク 対応の概要 変更前後のスクショ
DMMポイントクラブのプルリクテンプレート 設計レビューでも プルリクエストを作成 セルフレビュー項目
セルフレビュー項目 テスト項目書も ここでセルフ チェック DMMポイントクラブのプルリクテンプレート
トラッキングや パフォーマンス計測の 実装についても セルフチェック項目を 用意 DMMポイントクラブのプルリクテンプレート
コードレビュータイムについて 元々は1回 30分のレビュータイムを1日に2回実施 その時間で全員が集中的にレビューを行う ②15:00〜15:30 ①11:00〜11:30 勤務開始 勤務終了
それでもレビュー工数がかさみ、 各メンバーの週の目標タスクが達成できない… 課題 コードレビュータイムについて
午前のコードレビュータイムで 口頭でのコミュニケーションを実施するように (例)・タスクの状況・プルリクエストの内容を説明 ・タスクや実装についての困りごとを相談 コードレビュータイムについて 改善!
改善の結果… ・日が浅いメンバーの相談ハードルが下がった ・レビューを進めやすくなった ・コミュニケーション取りやすくなった コードレビュータイムについて
これから改善したいこと 模索 スプリント終盤に溜まるレビューの消化
スプリント終盤に溜まるレビューの消化 偏りがちなレビュアーの分散 チーム内におけるレビュー品質の均一化 これから改善したいこと 模索
None
どんなアプリを作っているか? DMM TV →オリジナルの番組や 漫画原作のドラマ、 アニメが視聴可能な動画配信サービスを 利用できるアプリ
チーム概要 人数 8名 コードの特徴 KMP(Kotlin Multiplatform)で iOS/AndroidTVと一部を共有
レビューの流れ プルリク 作成 CI チェッ ク レビュー 実施 マージ code
ownerの承認が得 られたらマージ 特にみてほしいところ や対応issue、差分を 確認する PFへの影響判断 ラベルでauto assign CIで静的解析
チームとして工夫していること 1プルリクの修正量 500行を目処 ビルドチェック 行いたい時にコマンドをプルリク上でコメントすることで 各PFのビルドチェックを行う
レビューのリマインド 各PFのレビュー対象プルリクが多いため、 open状態のプルリクがある場合は 定期的にSlackでレビュアー向けにメンションを飛ばす チームとして工夫していること
DMM TVのプルリクテンプレート レビュー観点 issueチケット
変更デザイン プルリクで やったこと プルリクで やってないこと DMM TVのプルリクテンプレート
変更前後のスクショ 影響範囲 レビューイの 最終確認項目 DMM TVのプルリクテンプレート
AndroidTV 確認項目 動作 確認項目 iOS 確認項目 DMM TVのプルリクテンプレート
チームとして改善したいこと 課題 レビュアーの偏り 特定分野の修正でレビュワーの偏りがある
チームとして改善したいこと レビュアーの偏り 特定分野の修正でレビュワーの偏りがある レビューされるプルリクの偏り 修正内容がパッと解らないプルリクは放置され気味 課題
レビューされやすいプルリクを作るようにするを目標に 「差分を500行以下にする」や 「プルリクのスコープを狭める」などを行なっている。 またプルリクに背景知識を書いておくなどを検討中。 課題の解消 改善中
その他 CI/CD環境 iOSのビルド等を考慮に入れてBitriseを選定。 今後はコスパを考えて 定期的に調査することを視野に入れる。 展望
チームC(ブックス)
DMMブックス 電子書籍リーダー →DMMブックスで購入した電子書籍を Android端末で閲覧するための 公式ビューアアプリ どんなアプリを作っているか?
チーム概要 人数 5名 開発の特徴 アジャイル開発 ほぼKotlinでアーキテクチャはMVVM
開発の特徴 現在はリファクタリングが比較的多いフェーズ JetpackComposeへの移行を視野に入れている チーム概要
レビューの流れ プルリク 作成 CI チェッ ク レビュー 実施 マージ 最低2人から
Approveをもらえたら マージ Slackでレビュー依頼を 投げる。 レビュアーはチーム全員 チェックリストに 沿ってセルフ チェック。 手元での動作確認 中はDraftで作成 問題が 発生していたら対応
チームとして工夫していること プルリクサイズの小型化 平均変更行数200行前後。 レビューにかかる時間が少なくて済む。 観点が限定されて見逃しがしにくい。
設計を重めに取る 設計段階で仮実装を利用して設計レビューを行い チーム内に相談して、レビュー観点や改修点を共有。 設計では全体のプロセス説明やクラス図、 変更前後のコードスニペットなどを記載する。 チームとして工夫していること
チームとして工夫していること レビューで起きる問題 コードレビューで問題が起きる場合、 実際には設計プロセスやコミュニケーションの不足などの レビューとは別の問題が、 コードレビューで露呈して起きると考えています。
レビュー工数の軽量化 要検討項目は資料で合意済みの状態を作った上で、 実装が資料通りの実装がなされているかを確認。 更にレビューイがプルリクにコメント記載して 意図を追記。 チームとして工夫していること
DMMブックスのプルリクテンプレート 対応の概要 プルリクの 要点や観点
変更前後の スクショや動画 対応の懸念点 DMMブックスのプルリクテンプレート
レビュアーが 変更を確認するため の方法 レビューイの 最終確認項目 DMMブックスのプルリクテンプレート
チームとして改善したいこと 1. 現在少人数で回しているので、 人数が増えたらやり方が継続できるか不明瞭 2. 動作確認の質を自動化などで均一化できておらず 工数もそれなりにある 課題
QAチームと共同でシナリオテストを作成中。 各画面の確認すべきことを文書化して、動作確認の際に品 質を安定化させたい。 レビュー品質の均一化 改善中
DMMポイントクラブ DMM TV DMMブックス 取り組みについての小まとめ
チームごとの取り組みについての小まとめ 工夫 プルリクは小さく作る プルリクの変更行数を出来るだけ少なくし て、 見やすいものにする CIをしっかり利用 レビュー前にCIを利用して細かいミスは排除する
チームごとの取り組みについての小まとめ 課題 レビュアーの偏り レビュー対応するレビュアーが偏ってしまう レビュー品質の偏り チーム内でのレビュー精度に偏りが出て 品質が均一化出来ていない
チームごとの取り組みについての小まとめ 展望 メンバーを教育 実装やアーキテクチャの思想を 設計やレビューを通して、 メンバー全員が共通の認識を持てるようにしていく
・弊社の開発体制について ・各チームの事例(3チーム) ・チーム概要 ・レビューの流れ ・チームで工夫していること ・チームで改善したいこと ・個人の取り組み ・レビュアーとしての工夫 ・レビューイとしての工夫 ・Androidならではのレビュー観点
アジェンダ
レビュアーとしての工夫
よく挙がった観点 ・認識をきちんと合わせる ・プルリクを記録やナレッジとして活用できるようにする ・スムーズなレビューを目指す ・心地よいコミュニケーションを心がける レビュアー(レビューする側)としての工夫
レビュアー(レビューする側)としての工夫 認識をきちんと合わせる
レビュアー(レビューする側)としての工夫 認識をきちんと合わせる ・ちょっとした疑問でも聞く
レビュアー(レビューする側)としての工夫 認識をきちんと合わせる ・ちょっとした疑問でも聞く ・プルリク上でのやりとりが3往復以上になりそうな場合は、 対面レビューやモブレビューなどを実施し早期解決に努める
レビュアー(レビューする側)としての工夫 認識をきちんと合わせる ・ちょっとした疑問でも聞く ・プルリク上でのやりとりが3往復以上になりそうな場合は、 対面レビューやモブレビューなどを実施し早期解決に努める ・コメントをした背景や理由をより具体的に明記しておく
レビュアー(レビューする側)としての工夫 記録やナレッジとしてプルリクを活用
レビュアー(レビューする側)としての工夫 記録やナレッジとしてプルリクを活用 ・口頭で確認したこともプルリクのコメントで残す
レビュアー(レビューする側)としての工夫 記録やナレッジとしてプルリクを活用 ・口頭で確認したこともプルリクのコメントで残す ・指摘に対して修正コミットを入れるだけではなく、 返信・Resolveされているかまで確認する
レビュアー(レビューする側)としての工夫 記録やナレッジとしてプルリクを活用 ・口頭で確認したこともプルリクのコメントで残す ・指摘に対して修正コミットを入れるだけではなく、 返信・Resolveされているかまで確認する ・レビューコメントを読んだ人が今後のレビューをする・ されるときに役立つように詳細に書く
レビュアー(レビューする側)としての工夫 スムーズなレビューを目指す
レビュアー(レビューする側)としての工夫 スムーズなレビューを目指す ・自分のタスク < コードレビュー
レビュアー(レビューする側)としての工夫 スムーズなレビューを目指す ・自分のタスク < コードレビュー ・なるべくすぐ見る
(人やチームによって方針は要検討) } レビュアー(レビューする側)としての工夫 スムーズなレビューを目指す ・自分のタスク < コードレビュー ・なるべくすぐ見る ・指摘の優先度がわかりやすいように頭に分類をつけている →例:[MUST][IMO][nits]
レビュアー(レビューする側)としての工夫 心地よいコミュニケーションを心がける
レビュアー(レビューする側)としての工夫 心地よいコミュニケーションを心がける ・固すぎずゆるい感じの文体でコメントする
レビュアー(レビューする側)としての工夫 心地よいコミュニケーションを心がける ・固すぎずゆるい感じの文体でコメントする ・柔らかい口調にする
レビュアー(レビューする側)としての工夫 心地よいコミュニケーションを心がける ・固すぎずゆるい感じの文体でコメントする ・柔らかい口調にする ・自分の書き方の好みを押し付けない
レビュアー(レビューする側)としての工夫 心地よいコミュニケーションを心がける ・固すぎずゆるい感じの文体でコメントする ・柔らかい口調 ・自分の書き方の好みを押し付けない ・指摘だけではなく、良いと思ったところもコメントする
レビュアー(レビューする側)としての工夫 その他
レビュアー(レビューする側)としての工夫 その他 ・レビューしたコードを他の人にも説明できるくらいに責任を持つ
レビュアー(レビューする側)としての工夫 その他 ・レビューしたコードを他の人にも説明できるくらいに責任を持つ ・自分が実装するならどうするかというのを意識して、 違っている点を質問・コメントして自己学習やコード改善につなげている
レビューイとしての工夫
差分のサイズを小さくする レビューイ(レビューされる側)としての工夫
差分のサイズを小さくする ・プルリクの粒度が大きくなりそうな場合、 「テストは別プルリクで作成」など申し送り事項を設定しスコープを狭める レビューイ(レビューされる側)としての工夫
差分のサイズを小さくする ・プルリクの粒度が大きくなりそうな場合、 「テストは別プルリクで作成」など申し送り事項を設定しスコープを狭める ・一瞬でわかるプルリクが理想なので、 プルリクのスコープや影響範囲を狭くして、 本筋以外の修正は含めない レビューイ(レビューされる側)としての工夫
差分のサイズを小さくできなくても・・・ レビューイ(レビューされる側)としての工夫
差分のサイズを小さくできなくても・・・ ・修正量が多い時はコミットを分けて、 コミットを追うことで修正内容がわかりやすいようにする レビューイ(レビューされる側)としての工夫
差分のサイズを小さくできなくても・・・ ・修正量が多い時はコミットを分けて、 コミットを追うことで修正内容がわかりやすいようにする ・どうしても大きくならざるを得ないプルリクは、 本当に見てほしいところをコメントでピックアップする レビューイ(レビューされる側)としての工夫
読みやすいプルリクにする レビューイ(レビューされる側)としての工夫
読みやすいプルリクにする ・意味のあるまとまりでプルリクを作成する (ドメイン層などのレイヤーごと・画面ごと・機能ごとなど) レビューイ(レビューされる側)としての工夫
読みやすいプルリクにする ・意味のあるまとまりでプルリクを作成する (ドメイン層などのレイヤーごと・画面ごと・機能ごとなど) ・処理の意図をコードコメントだけでなく、 プルリクコメントでより具体的に補足する レビューイ(レビューされる側)としての工夫
必要な情報をきちんと揃える レビューイ(レビューされる側)としての工夫
必要な情報をきちんと揃える ・仕様や設計書のリンクなど、レビューに必要な材料を揃えてプルリクに書く レビューイ(レビューされる側)としての工夫
必要な情報をきちんと揃える ・仕様や設計書のリンクなど、レビューに必要な材料を揃えてプルリクに書く ・レビュアーが見たときに、 合っている・合っていないの判断ができるように情報を整える レビューイ(レビューされる側)としての工夫
必要な情報をきちんと揃える ・仕様や設計書のリンクなど、レビューに必要な材料を揃えてプルリクに書く ・レビュアーが見たときに、 合っている・合っていないの判断ができるように情報を整える ・プルリク上で動作確認のエビデンスとして動画を添付している レビューイ(レビューされる側)としての工夫
その他 ・指摘を修正後、コミットのリンクを付けて返信 (指摘ごとにコミットを分ける) レビューイ(レビューされる側)としての工夫
・差分のサイズ ・コミットを分割 ・意味のあるまとまり ・コメントで補足 ・必要な情報を揃える etc… レビューイ(レビューされる側)としての工夫
レビューイ(レビューされる側)としての工夫 ・差分のサイズ ・コミットを分割 ・意味のあるまとまり ・コメントで補足 ・必要な情報を揃える etc… 集まった意見はすべて 「いかにレビューしやすくするか」 にフォーカスしたもの
レビューは コミュニケーションと 思いやりめっちゃ大事
Androidならではのレビュー観点
iOSと比較して端末が多種多様(性能も画面サイズも) →パフォーマンス面、UI面の考慮が必要 Androidならではのレビュー観点
パフォーマンスについて ・メインセーフなつくりになっているか ・メモリリークを起こすところが無いか (LeakCanaryなどのツールを使う) ・レイアウトの入れ子構造が深くないか Androidならではのレビュー観点
Androidならではのレビュー観点 UIについて ・画面が小さい端末や、逆に大きい端末での表示が 考慮できているか ・文字サイズや画面ズームの設定を変更しても崩れないか
その他 ・Activity破棄時・再生成時の挙動を考慮できているか ・OSバージョン間での挙動に問題がないか Androidならではのレビュー観点
〜アジェンダここまで〜
セッションの目標の振り返り コードレビューに対して ほんのちょっと 前向きな気持ちに
Special Thanks ・インタビューに応じてくださった皆さん ・このスライドをレビューしてくださった皆さん ・セッションを聴いてくださった皆さん ありがとうございました!
最終ページ