Slide 1

Slide 1 text

突撃!隣のコードレビュー created by Okumura / Sato Taichi

Slide 2

Slide 2 text

スピーカー紹介 合同会社DMM.com Androidエンジニア Okumura 猫が好き Sato Taichi  肉が好き

Slide 3

Slide 3 text

コードレビューは好きですか?

Slide 4

Slide 4 text

コードレビューのメリット 不具合が混入するリスクの軽減 可読性や保守性の向上 メンバーのスキル向上 など

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

レビューに時間が
 取られすぎる…

Slide 7

Slide 7 text

レビューに時間が
 取られすぎる… ギスギスする…

Slide 8

Slide 8 text

レビューに時間が
 取られすぎる… ギスギスする… … など、課題も発生

Slide 9

Slide 9 text

・弊社の開発体制について ・各チームの事例(3チーム)  ・チーム概要  ・レビューの流れ  ・チームで工夫していること  ・チームで改善したいこと ・個人の取り組み  ・レビュアーとしての工夫  ・レビューイとしての工夫  ・Androidならではのレビュー観点 話すこと(アジェンダ)

Slide 10

Slide 10 text

・弊社の開発体制について ・各チームの事例(3チーム)  ・チーム概要  ・レビューの流れ  ・チームで工夫していること  ・チームで改善したいこと ・個人の取り組み  ・レビュアーとしての工夫  ・レビューイとしての工夫  ・Androidならではのレビュー観点 話すこと(アジェンダ)

Slide 11

Slide 11 text

・弊社の開発体制について ・各チームの事例(3チーム)  ・チーム概要  ・レビューの流れ  ・チームで工夫していること  ・チームで改善したいこと ・個人の取り組み  ・レビュアーとしての工夫  ・レビューイとしての工夫  ・Androidならではのレビュー観点 話すこと(アジェンダ)

Slide 12

Slide 12 text

セッションの目標

Slide 13

Slide 13 text

セッションの目標 コードレビューに対して ほんのちょっと 前向きな気持ちに

Slide 14

Slide 14 text

・弊社の開発体制について ・各チームの事例(3チーム)  ・チーム概要  ・レビューの流れ  ・チームで工夫していること  ・チームで改善したいこと ・個人の取り組み  ・レビュアーとしての工夫  ・レビューイとしての工夫  ・Androidならではのレビュー観点 アジェンダ

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

DMMポイント クラブ DMM TV DMMブックス 開発チーム 開発チーム 開発チーム

Slide 17

Slide 17 text

・弊社の開発体制について ・各チームの事例(3チーム)  ・チーム概要  ・レビューの流れ  ・チームで工夫していること  ・チームで改善したいこと ・個人の取り組み  ・レビュアーとしての工夫  ・レビューイとしての工夫  ・Androidならではのレビュー観点 アジェンダ

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

どんなアプリを作っているか? DMMポイントクラブ →お得にさまざまなDMMのサービスを 利用できるようにする、 ポイントプラットフォームアプリ

Slide 20

Slide 20 text

チーム概要 人数  5名 開発の特徴 ・既存実装はAndroid Viewが多い ・新規実装や改修時にはJetpack Composeを採用

Slide 21

Slide 21 text

レビューの流れ プルリク 作成 CI チェッ ク レビュー 実施 マージ チェックリストに沿って セルフチェック Approveがもらえるまで 指摘→修正を繰り返す レビューしてくれた人全 員からApproveをもらえ たらマージ 問題が
 発生していたら対応

Slide 22

Slide 22 text

チームとして工夫していること 実装前に行う工夫 ・実装前に設計のレビューで実装の流れを共有 実装後に行う工夫 ・プルリクエストのテンプレートを工夫 ・チームとしてコードレビュータイムを設置

Slide 23

Slide 23 text

DMMポイントクラブのプルリクテンプレート issueのリンク 対応の概要 変更前後のスクショ

Slide 24

Slide 24 text

DMMポイントクラブのプルリクテンプレート 設計レビューでも プルリクエストを作成 セルフレビュー項目

Slide 25

Slide 25 text

セルフレビュー項目 テスト項目書も ここでセルフ チェック DMMポイントクラブのプルリクテンプレート

Slide 26

Slide 26 text

トラッキングや パフォーマンス計測の 実装についても セルフチェック項目を 用意 DMMポイントクラブのプルリクテンプレート

Slide 27

Slide 27 text

コードレビュータイムについて 元々は1回 30分のレビュータイムを1日に2回実施 その時間で全員が集中的にレビューを行う ②15:00〜15:30 ①11:00〜11:30 勤務開始 勤務終了

Slide 28

Slide 28 text

それでもレビュー工数がかさみ、 各メンバーの週の目標タスクが達成できない… 課題 コードレビュータイムについて

Slide 29

Slide 29 text

午前のコードレビュータイムで 口頭でのコミュニケーションを実施するように (例)・タスクの状況・プルリクエストの内容を説明    ・タスクや実装についての困りごとを相談 コードレビュータイムについて 改善!

Slide 30

Slide 30 text

改善の結果… ・日が浅いメンバーの相談ハードルが下がった ・レビューを進めやすくなった ・コミュニケーション取りやすくなった コードレビュータイムについて

Slide 31

Slide 31 text

これから改善したいこと 模索 スプリント終盤に溜まるレビューの消化

Slide 32

Slide 32 text

スプリント終盤に溜まるレビューの消化 偏りがちなレビュアーの分散 チーム内におけるレビュー品質の均一化 これから改善したいこと 模索

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

どんなアプリを作っているか? DMM TV →オリジナルの番組や
 漫画原作のドラマ、 アニメが視聴可能な動画配信サービスを
 利用できるアプリ

Slide 35

Slide 35 text

チーム概要 人数  8名 コードの特徴  KMP(Kotlin Multiplatform)で  iOS/AndroidTVと一部を共有

Slide 36

Slide 36 text

レビューの流れ プルリク 作成 CI チェッ ク レビュー 実施 マージ code ownerの承認が得 られたらマージ 特にみてほしいところ や対応issue、差分を 確認する PFへの影響判断 ラベルでauto assign CIで静的解析

Slide 37

Slide 37 text

チームとして工夫していること 1プルリクの修正量  500行を目処 ビルドチェック  行いたい時にコマンドをプルリク上でコメントすることで  各PFのビルドチェックを行う

Slide 38

Slide 38 text

レビューのリマインド  各PFのレビュー対象プルリクが多いため、
  open状態のプルリクがある場合は
  定期的にSlackでレビュアー向けにメンションを飛ばす チームとして工夫していること

Slide 39

Slide 39 text

DMM TVのプルリクテンプレート レビュー観点 issueチケット

Slide 40

Slide 40 text

変更デザイン プルリクで
 やったこと プルリクで
 やってないこと DMM TVのプルリクテンプレート

Slide 41

Slide 41 text

変更前後のスクショ 影響範囲 レビューイの
 最終確認項目 DMM TVのプルリクテンプレート

Slide 42

Slide 42 text

AndroidTV
 確認項目 動作 確認項目 iOS 確認項目 DMM TVのプルリクテンプレート

Slide 43

Slide 43 text

チームとして改善したいこと 課題 レビュアーの偏り 特定分野の修正でレビュワーの偏りがある

Slide 44

Slide 44 text

チームとして改善したいこと レビュアーの偏り 特定分野の修正でレビュワーの偏りがある レビューされるプルリクの偏り 修正内容がパッと解らないプルリクは放置され気味 課題

Slide 45

Slide 45 text

レビューされやすいプルリクを作るようにするを目標に
 「差分を500行以下にする」や
 「プルリクのスコープを狭める」などを行なっている。 またプルリクに背景知識を書いておくなどを検討中。 課題の解消 改善中

Slide 46

Slide 46 text

その他 CI/CD環境 iOSのビルド等を考慮に入れてBitriseを選定。 今後はコスパを考えて
 定期的に調査することを視野に入れる。 展望

Slide 47

Slide 47 text

チームC(ブックス)

Slide 48

Slide 48 text

DMMブックス 電子書籍リーダー →DMMブックスで購入した電子書籍を
 Android端末で閲覧するための
 公式ビューアアプリ どんなアプリを作っているか?

Slide 49

Slide 49 text

チーム概要 人数  5名 開発の特徴  アジャイル開発  ほぼKotlinでアーキテクチャはMVVM

Slide 50

Slide 50 text

開発の特徴  現在はリファクタリングが比較的多いフェーズ  JetpackComposeへの移行を視野に入れている チーム概要

Slide 51

Slide 51 text

レビューの流れ プルリク 作成 CI チェッ ク レビュー 実施 マージ 最低2人から Approveをもらえたら マージ Slackでレビュー依頼を 投げる。 レビュアーはチーム全員 チェックリストに 沿ってセルフ チェック。 手元での動作確認 中はDraftで作成 問題が
 発生していたら対応

Slide 52

Slide 52 text

チームとして工夫していること プルリクサイズの小型化  平均変更行数200行前後。  レビューにかかる時間が少なくて済む。  観点が限定されて見逃しがしにくい。

Slide 53

Slide 53 text

設計を重めに取る  設計段階で仮実装を利用して設計レビューを行い
  チーム内に相談して、レビュー観点や改修点を共有。  設計では全体のプロセス説明やクラス図、
  変更前後のコードスニペットなどを記載する。 チームとして工夫していること

Slide 54

Slide 54 text

チームとして工夫していること レビューで起きる問題 コードレビューで問題が起きる場合、
 実際には設計プロセスやコミュニケーションの不足などの
 レビューとは別の問題が、
 コードレビューで露呈して起きると考えています。

Slide 55

Slide 55 text

レビュー工数の軽量化  要検討項目は資料で合意済みの状態を作った上で、
  実装が資料通りの実装がなされているかを確認。  更にレビューイがプルリクにコメント記載して
  意図を追記。 チームとして工夫していること

Slide 56

Slide 56 text

DMMブックスのプルリクテンプレート 対応の概要 プルリクの
 要点や観点

Slide 57

Slide 57 text

変更前後の スクショや動画 対応の懸念点 DMMブックスのプルリクテンプレート

Slide 58

Slide 58 text

レビュアーが
 変更を確認するため の方法 レビューイの
 最終確認項目 DMMブックスのプルリクテンプレート

Slide 59

Slide 59 text

チームとして改善したいこと 1. 現在少人数で回しているので、
 人数が増えたらやり方が継続できるか不明瞭 2. 動作確認の質を自動化などで均一化できておらず
 工数もそれなりにある 課題

Slide 60

Slide 60 text

QAチームと共同でシナリオテストを作成中。 各画面の確認すべきことを文書化して、動作確認の際に品 質を安定化させたい。 レビュー品質の均一化 改善中

Slide 61

Slide 61 text

DMMポイントクラブ DMM TV DMMブックス 取り組みについての小まとめ

Slide 62

Slide 62 text

チームごとの取り組みについての小まとめ 工夫 プルリクは小さく作る  プルリクの変更行数を出来るだけ少なくし て、 見やすいものにする CIをしっかり利用  レビュー前にCIを利用して細かいミスは排除する

Slide 63

Slide 63 text

チームごとの取り組みについての小まとめ 課題 レビュアーの偏り  レビュー対応するレビュアーが偏ってしまう レビュー品質の偏り  チーム内でのレビュー精度に偏りが出て
  品質が均一化出来ていない

Slide 64

Slide 64 text

チームごとの取り組みについての小まとめ 展望 メンバーを教育  実装やアーキテクチャの思想を
  設計やレビューを通して、
  メンバー全員が共通の認識を持てるようにしていく

Slide 65

Slide 65 text

・弊社の開発体制について ・各チームの事例(3チーム)  ・チーム概要  ・レビューの流れ  ・チームで工夫していること  ・チームで改善したいこと ・個人の取り組み  ・レビュアーとしての工夫  ・レビューイとしての工夫  ・Androidならではのレビュー観点 アジェンダ

Slide 66

Slide 66 text

レビュアーとしての工夫

Slide 67

Slide 67 text

よく挙がった観点 ・認識をきちんと合わせる ・プルリクを記録やナレッジとして活用できるようにする ・スムーズなレビューを目指す ・心地よいコミュニケーションを心がける レビュアー(レビューする側)としての工夫

Slide 68

Slide 68 text

レビュアー(レビューする側)としての工夫 認識をきちんと合わせる

Slide 69

Slide 69 text

レビュアー(レビューする側)としての工夫 認識をきちんと合わせる ・ちょっとした疑問でも聞く

Slide 70

Slide 70 text

レビュアー(レビューする側)としての工夫 認識をきちんと合わせる ・ちょっとした疑問でも聞く ・プルリク上でのやりとりが3往復以上になりそうな場合は、
  対面レビューやモブレビューなどを実施し早期解決に努める

Slide 71

Slide 71 text

レビュアー(レビューする側)としての工夫 認識をきちんと合わせる ・ちょっとした疑問でも聞く ・プルリク上でのやりとりが3往復以上になりそうな場合は、
  対面レビューやモブレビューなどを実施し早期解決に努める ・コメントをした背景や理由をより具体的に明記しておく

Slide 72

Slide 72 text

レビュアー(レビューする側)としての工夫 記録やナレッジとしてプルリクを活用

Slide 73

Slide 73 text

レビュアー(レビューする側)としての工夫 記録やナレッジとしてプルリクを活用 ・口頭で確認したこともプルリクのコメントで残す

Slide 74

Slide 74 text

レビュアー(レビューする側)としての工夫 記録やナレッジとしてプルリクを活用 ・口頭で確認したこともプルリクのコメントで残す ・指摘に対して修正コミットを入れるだけではなく、
  返信・Resolveされているかまで確認する

Slide 75

Slide 75 text

レビュアー(レビューする側)としての工夫 記録やナレッジとしてプルリクを活用 ・口頭で確認したこともプルリクのコメントで残す ・指摘に対して修正コミットを入れるだけではなく、
  返信・Resolveされているかまで確認する ・レビューコメントを読んだ人が今後のレビューをする・
  されるときに役立つように詳細に書く

Slide 76

Slide 76 text

レビュアー(レビューする側)としての工夫 スムーズなレビューを目指す

Slide 77

Slide 77 text

レビュアー(レビューする側)としての工夫 スムーズなレビューを目指す ・自分のタスク < コードレビュー

Slide 78

Slide 78 text

レビュアー(レビューする側)としての工夫 スムーズなレビューを目指す ・自分のタスク < コードレビュー ・なるべくすぐ見る

Slide 79

Slide 79 text

(人やチームによって方針は要検討) } レビュアー(レビューする側)としての工夫 スムーズなレビューを目指す ・自分のタスク < コードレビュー ・なるべくすぐ見る ・指摘の優先度がわかりやすいように頭に分類をつけている
  →例:[MUST][IMO][nits]

Slide 80

Slide 80 text

レビュアー(レビューする側)としての工夫 心地よいコミュニケーションを心がける

Slide 81

Slide 81 text

レビュアー(レビューする側)としての工夫 心地よいコミュニケーションを心がける ・固すぎずゆるい感じの文体でコメントする

Slide 82

Slide 82 text

レビュアー(レビューする側)としての工夫 心地よいコミュニケーションを心がける ・固すぎずゆるい感じの文体でコメントする ・柔らかい口調にする

Slide 83

Slide 83 text

レビュアー(レビューする側)としての工夫 心地よいコミュニケーションを心がける ・固すぎずゆるい感じの文体でコメントする ・柔らかい口調にする ・自分の書き方の好みを押し付けない

Slide 84

Slide 84 text

レビュアー(レビューする側)としての工夫 心地よいコミュニケーションを心がける ・固すぎずゆるい感じの文体でコメントする ・柔らかい口調 ・自分の書き方の好みを押し付けない ・指摘だけではなく、良いと思ったところもコメントする

Slide 85

Slide 85 text

レビュアー(レビューする側)としての工夫 その他

Slide 86

Slide 86 text

レビュアー(レビューする側)としての工夫 その他 ・レビューしたコードを他の人にも説明できるくらいに責任を持つ

Slide 87

Slide 87 text

レビュアー(レビューする側)としての工夫 その他 ・レビューしたコードを他の人にも説明できるくらいに責任を持つ ・自分が実装するならどうするかというのを意識して、
  違っている点を質問・コメントして自己学習やコード改善につなげている

Slide 88

Slide 88 text

レビューイとしての工夫

Slide 89

Slide 89 text

差分のサイズを小さくする レビューイ(レビューされる側)としての工夫

Slide 90

Slide 90 text

差分のサイズを小さくする ・プルリクの粒度が大きくなりそうな場合、
  「テストは別プルリクで作成」など申し送り事項を設定しスコープを狭める レビューイ(レビューされる側)としての工夫

Slide 91

Slide 91 text

差分のサイズを小さくする ・プルリクの粒度が大きくなりそうな場合、
  「テストは別プルリクで作成」など申し送り事項を設定しスコープを狭める ・一瞬でわかるプルリクが理想なので、
  プルリクのスコープや影響範囲を狭くして、
  本筋以外の修正は含めない レビューイ(レビューされる側)としての工夫

Slide 92

Slide 92 text

差分のサイズを小さくできなくても・・・ レビューイ(レビューされる側)としての工夫

Slide 93

Slide 93 text

差分のサイズを小さくできなくても・・・ ・修正量が多い時はコミットを分けて、
  コミットを追うことで修正内容がわかりやすいようにする レビューイ(レビューされる側)としての工夫

Slide 94

Slide 94 text

差分のサイズを小さくできなくても・・・ ・修正量が多い時はコミットを分けて、
  コミットを追うことで修正内容がわかりやすいようにする ・どうしても大きくならざるを得ないプルリクは、
  本当に見てほしいところをコメントでピックアップする レビューイ(レビューされる側)としての工夫

Slide 95

Slide 95 text

読みやすいプルリクにする レビューイ(レビューされる側)としての工夫

Slide 96

Slide 96 text

読みやすいプルリクにする ・意味のあるまとまりでプルリクを作成する
  (ドメイン層などのレイヤーごと・画面ごと・機能ごとなど) レビューイ(レビューされる側)としての工夫

Slide 97

Slide 97 text

読みやすいプルリクにする ・意味のあるまとまりでプルリクを作成する
  (ドメイン層などのレイヤーごと・画面ごと・機能ごとなど) ・処理の意図をコードコメントだけでなく、
  プルリクコメントでより具体的に補足する レビューイ(レビューされる側)としての工夫

Slide 98

Slide 98 text

必要な情報をきちんと揃える レビューイ(レビューされる側)としての工夫

Slide 99

Slide 99 text

必要な情報をきちんと揃える ・仕様や設計書のリンクなど、レビューに必要な材料を揃えてプルリクに書く レビューイ(レビューされる側)としての工夫

Slide 100

Slide 100 text

必要な情報をきちんと揃える ・仕様や設計書のリンクなど、レビューに必要な材料を揃えてプルリクに書く ・レビュアーが見たときに、
  合っている・合っていないの判断ができるように情報を整える レビューイ(レビューされる側)としての工夫

Slide 101

Slide 101 text

必要な情報をきちんと揃える ・仕様や設計書のリンクなど、レビューに必要な材料を揃えてプルリクに書く ・レビュアーが見たときに、
  合っている・合っていないの判断ができるように情報を整える ・プルリク上で動作確認のエビデンスとして動画を添付している レビューイ(レビューされる側)としての工夫

Slide 102

Slide 102 text

その他 ・指摘を修正後、コミットのリンクを付けて返信
  (指摘ごとにコミットを分ける) レビューイ(レビューされる側)としての工夫

Slide 103

Slide 103 text

・差分のサイズ ・コミットを分割 ・意味のあるまとまり ・コメントで補足 ・必要な情報を揃える etc… レビューイ(レビューされる側)としての工夫

Slide 104

Slide 104 text

レビューイ(レビューされる側)としての工夫 ・差分のサイズ ・コミットを分割 ・意味のあるまとまり ・コメントで補足 ・必要な情報を揃える etc… 集まった意見はすべて 「いかにレビューしやすくするか」 にフォーカスしたもの

Slide 105

Slide 105 text

レビューは コミュニケーションと 思いやりめっちゃ大事

Slide 106

Slide 106 text

Androidならではのレビュー観点

Slide 107

Slide 107 text

iOSと比較して端末が多種多様(性能も画面サイズも) →パフォーマンス面、UI面の考慮が必要 Androidならではのレビュー観点

Slide 108

Slide 108 text

パフォーマンスについて  ・メインセーフなつくりになっているか  ・メモリリークを起こすところが無いか
   (LeakCanaryなどのツールを使う)  ・レイアウトの入れ子構造が深くないか Androidならではのレビュー観点

Slide 109

Slide 109 text

Androidならではのレビュー観点 UIについて  ・画面が小さい端末や、逆に大きい端末での表示が
   考慮できているか  ・文字サイズや画面ズームの設定を変更しても崩れないか

Slide 110

Slide 110 text

その他  ・Activity破棄時・再生成時の挙動を考慮できているか  ・OSバージョン間での挙動に問題がないか Androidならではのレビュー観点

Slide 111

Slide 111 text

〜アジェンダここまで〜

Slide 112

Slide 112 text

セッションの目標の振り返り コードレビューに対して ほんのちょっと 前向きな気持ちに

Slide 113

Slide 113 text

Special Thanks ・インタビューに応じてくださった皆さん ・このスライドをレビューしてくださった皆さん ・セッションを聴いてくださった皆さん ありがとうございました!

Slide 114

Slide 114 text

最終ページ