Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
チームが幸せになる プルリクの作り方 受託1年目が学んだ PULL REQUEST mp 1
Slide 2
Slide 2 text
自己紹介 mp 名前 @pm99763343 Xアカウント 1年6ヶ月 バックエンドエンジニア1年目 PHP歴 温泉、ドライブ、日本酒、ビール 趣味 株式会社クルービット 所属 2
Slide 3
Slide 3 text
前提条件 ソースコード管理ツール: GitHub 工数管理ツール: Redmine 3
Slide 4
Slide 4 text
この登壇でお話しないこと commitを積むとは「物語を書く」ことである/asumikamさん https://speakerdeck.com/asumikam/commit-is-the-story 4
Slide 5
Slide 5 text
もくじ 1 そもそもチームが幸せになるプルリクとは? 2 地獄の日々 3 チームメンバが幸せになるためにプルリクを見直した 4 プルリクを変えるとどうなったか?〜そして天国へ〜 5 伝えたいこと 5
Slide 6
Slide 6 text
そもそも チームが幸せになるプルリクとは? 6
Slide 7
Slide 7 text
チームが幸せになるプルリクの定義 1. 仕様理解が深まる 2. レビュワーの負担が少ない 3. チームメンバーの実装速度が上がる(未来の自分を含む) 7
Slide 8
Slide 8 text
ストーリー 8
Slide 9
Slide 9 text
地獄の日々、、、 9
Slide 10
Slide 10 text
2022年11月 株式会社クルービットに未経験で入社 10
Slide 11
Slide 11 text
楽しいチーム開発の日々ではなく、地獄の日々 11
Slide 12
Slide 12 text
PJの進行体制 弊社は受託企業 1チーム1~4人 PLが1PJに1人 1ヶ月~半年でPJの開発〜リリースを終える プライム案件ゆえにウォータフォールのようなかっちりきまった仕様 書がない 12
Slide 13
Slide 13 text
PJの進行体制 弊社は受託企業 1チーム1~4人 PJにPLが1人 1ヶ月~半年でPJの開発〜リリースを終える プライム案件ゆえにウォータフォールのようなかっちりきまった仕様 書がない 13
Slide 14
Slide 14 text
PJの進行体制 弊社は受託企業 1チーム1~4人 PLが1PJに1人 1ヶ月~半年でPJの開発〜リリースを終える プライム案件ゆえにウォータフォールのようなかっちりきまった仕様 書がない 14
Slide 15
Slide 15 text
PJの進行体制 弊社は受託企業 1チーム1~4人 PLが1PJに1人 1ヶ月~半年でPJの開発〜リリースを終える プライム案件ゆえにウォータフォールのようなかっちりきまった仕様 書がない 15
Slide 16
Slide 16 text
プルリクの作り方が良くないと、 、 、 まずめちゃくちゃ工数の負荷が増え、 チームの雰囲気は悪くなり、 仕事は思うように進まず、 空は堕ち、大地は割れ、海は枯れ、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 16
Slide 17
Slide 17 text
プルリク プルリク プルリク 17
Slide 18
Slide 18 text
具体的にどのような問題のある プルリクをあげていたかというと、 、 、 18
Slide 19
Slide 19 text
こんなプルリクをあげてしまっていた、 、 、 説明欄にチケットのリンクのみを貼っていた 説明欄に、 「ログイン機能を実装した」や「削除機能を実装した」など の一言だけ 19
Slide 20
Slide 20 text
こんなプルリクをあげてしまっていた、 、 、 説明欄にチケットのリンクのみを貼っていた 説明欄に、 「ログイン機能を実装した」や「削除機能を実装した」など の一言だけ 20
Slide 21
Slide 21 text
こんなプルリクをあげた弊害として 1. コードをちゃんと読まないと仕様が把握できない 2. 自分の機能に関連する機能を実装したプルリクを見てさっと把握した いが、結局コードをすみずみまで見ないと把握できない 3. 差し込みのタスクを優先してしばらくたって実装途中のプルリクに戻 ると何をしなくちゃいけないのか思い出せない 21
Slide 22
Slide 22 text
こんなプルリクをあげた弊害として 1. コードをちゃんと読まないと仕様が把握できない 2. 自分の機能に関連するプルリクを見てさっと概要を把握したいが、結 局コードをすみずみまで見ないと概要が把握できない 3. 差し込みのタスクを優先してしばらくたって実装途中のプルリクに戻 ると何をしなくちゃいけないのか思い出せない 22
Slide 23
Slide 23 text
こんなプルリクをあげた弊害として 1. コードをちゃんと読まないと仕様が把握できない 2. 自分の機能に関連する機能を実装したプルリクを見て、さっと把握し たいが、結局コードをすみずみまで見ないと把握できない 3. 差し込みのタスクを優先して、しばらくたって実装途中のプルリクに 戻ると、何をしなくちゃいけないのか思い出せない 23
Slide 24
Slide 24 text
??????? ??????? ??????? 24
Slide 25
Slide 25 text
「コミットの履歴を見れば良いのでは?」 25
Slide 26
Slide 26 text
tmp tmp tmp tmp tmp tmp tmp tmp tmp tmp tmp tmp tmp tmp tmp tmp 26
Slide 27
Slide 27 text
こんなプルリクを出し続けた結果 チームはどうなったのか 27
Slide 28
Slide 28 text
PLのスイッチコストの増大 28
Slide 29
Slide 29 text
レビュー時間の増大 29
Slide 30
Slide 30 text
負のスパイラル レビューの工数が 圧迫される 開発速度が落ちる スケジュールが 圧迫される みんな 余裕が無くなる ギスギスした 雰囲気、 、 、 30
Slide 31
Slide 31 text
31
Slide 32
Slide 32 text
「良いプルリクを意識すれば 色々変わってくると思うよ」 32 ※弊社CTO
Slide 33
Slide 33 text
私はチームメンバを自分のプルリクで 不幸にしてしまっていた、 、 、 33
Slide 34
Slide 34 text
チームメンバに幸せになってもらうために 自分のプルリクを見返すことにした 34
Slide 35
Slide 35 text
1 プルリクを作る時の粒度 2 タイトルの付け方 3 説明欄に書くべきこと チームが幸せになるプルリクの作り方 35
Slide 36
Slide 36 text
1 プルリクを作る時の粒度 2 タイトルの付け方 3 説明欄に書くべきこと チームが幸せになるプルリクの作り方 36
Slide 37
Slide 37 text
プルリクを作る時の粒度 1. そもそもプルリクを作る前に適切な粒度でチケットからプルリクが切 られている 大きくしない・複数のことをしない プルリクのタイトルで「編集機能と削除機能を実装した」みた いなのはなるべく避ける 「編集機能」と「削除機能」に分けてプルリクをつくる レビュワーの負担を下げる 開発速度をあげてマージまでの時間を短くする 37
Slide 38
Slide 38 text
1.プルリクを作る時の粒度 そもそもプルリクを作る前に適切な粒度でチケットからプルリクが切 られている 大きくしない・複数のことをしない プルリクのタイトルで「編集機能と削除機能を実装した」みた いなのはなるべく避ける 「編集機能」と「削除機能」に分けてプルリクをつくる レビュワーの負担を下げる 開発速度をあげてマージまでの時間を短くする 38
Slide 39
Slide 39 text
1.プルリクを作る時の粒度 そもそもプルリクを作る前に適切な粒度でチケットからプルリクが切 られている 大きくしない・複数のことをしない プルリクのタイトルで「編集機能と削除機能を実装した」みた いなのはなるべく避ける 「編集機能」と「削除機能」に分けてプルリクをつくる レビュワーの負担を下げる 開発速度をあげてマージまでの時間を短くする 39
Slide 40
Slide 40 text
1.プルリクを作る時の粒度 そもそもプルリクを作る前に適切な粒度でチケットからプルリクが切 られている 大きくしない・複数のことをしない プルリクのタイトルで「編集機能と削除機能を実装した」みた いなのはなるべく避ける 「編集機能」と「削除機能」に分けてプルリクをつくる レビュワーの負担を下げる 開発速度をあげてマージまでの時間を短くする 40
Slide 41
Slide 41 text
1.プルリクを作る時の粒度 そもそもプルリクを作る前に適切な粒度でチケットからPRが切られ ている 大きくしない・複数のことをしない プルリクのタイトルで「編集機能と削除機能を実装した」みた いなのはなるべく避ける 「編集機能」と「削除機能」に分けてPRをつくる レビュワーの負担を下げる 開発速度をあげてマージまでの時間を短くする 41
Slide 42
Slide 42 text
1.プルリクを作る時の粒度 そもそもプルリクを作る前に適切な粒度でチケットからPRが切られ ている 大きくしない・複数のことをしない プルリクのタイトルで「編集機能と削除機能を実装した」みた いなのはなるべく避ける 「編集機能」と「削除機能」に分けてPRをつくる レビュワーの負担を下げる 開発速度をあげてマージまでの時間を短くする 42
Slide 43
Slide 43 text
1 プルリクを作る時の粒度 2 タイトルの付け方 3 説明欄に書くべきこと チームが幸せになるプルリクの作り方 43
Slide 44
Slide 44 text
2. タイトルの付け方 探しやすく端的なタイトルになっている 1つの機能にたいして複数個のPRがあるときは章見出しのように 「 【機能A】外部予約サイトの席を取得して保存できるようにした」 などと 機能見出し 実装内容 に分けて書くようにする タイトルでだらだら実装理由を書かない PRを探しやすくするため 実装理由はタイトルではなく説明欄で書く 44
Slide 45
Slide 45 text
2. タイトルの付け方 探しやすく端的なタイトルになっている 1つの機能にたいして複数個のプルリクがあるときは章見出しの ように「 【機能A】外部予約サイトの席を取得して保存できるよう にした」などと 機能見出し 実装内容 に分けて書くようにする タイトルでだらだら実装理由を書かない プルリクを探しやすくするため 実装理由はタイトルではなく説明欄で書く 45
Slide 46
Slide 46 text
2. タイトルの付け方 探しやすく端的なタイトルになっている 1つの機能にたいして複数個のプルリクがあるときは章見出しの ように「 【機能A】外部予約サイトの席を取得して保存できるよう にした」などと 機能見出し 実装内容 に分けて書くようにする タイトルでだらだら実装理由を書かない プルリクを探しやすくするため 実装理由はタイトルではなく説明欄で書く 46
Slide 47
Slide 47 text
外部予約サイトとコースの設定内容が同期されて いないとエンドユーザが混乱するためAPIを使っ てコース内容を同期させるようにした 悪い例 47
Slide 48
Slide 48 text
探しづらいタイトルになっている 実装理由がタイトルにだらだら書いてある 悪い例 48
Slide 49
Slide 49 text
外部予約サイトとコースの設定内容が同期されて いないとエンドユーザが混乱するためAPIを使っ てコース内容を同期させるようにした 悪い例 49
Slide 50
Slide 50 text
【コース設定】外部予約サイトのコース設定を〇 〇システムのコース設定と紐づける処理をした 良い例 50
Slide 51
Slide 51 text
【コース設定】外部予約サイトのコース設定を〇 〇システムのコース設定と紐づける処理をした 良い例 機能見出し 51
Slide 52
Slide 52 text
【コース設定】外部予約サイトのコース設定を〇 〇システムのコース設定と紐づける処理をした 良い例 機能見出し 実装内容 52
Slide 53
Slide 53 text
【コース設定】外部予約サイトのコース設定を〇 〇システムのコース設定と紐づける処理をした 良い例 53
Slide 54
Slide 54 text
1 プルリクを作る時の粒度 2 タイトルの付け方 3 説明欄に書くべきこと チームが幸せになるプルリクの作り方 54
Slide 55
Slide 55 text
3.説明欄に書くこと 1.チケットのリンク 2.実装内容の概要 3.レビュワーの確認事項 55
Slide 56
Slide 56 text
マークダウン必須! 56
Slide 57
Slide 57 text
3.説明欄に書くこと 1.チケットのリンク 2.実装内容の概要 3.レビュワーの確認事項 57
Slide 58
Slide 58 text
チケットのリンクが貼ってあること = 最低条件! 58
Slide 59
Slide 59 text
3.説明欄に書くこと 1.チケットのリンク 2.実装内容の概要 3.レビュワーの確認事項 59
Slide 60
Slide 60 text
2.実装内容の概要 何のどんな機能を実装したのか 何がどうなれば成功なのかレビュワーに簡潔に伝える フロントの動作を見てほしいのであれば動画を貼る モーダルの動き(例) アコーディオンメニューの動き(例) 画面遷移の様子 フロントの見た目を見てほしいのであれば画像を貼る どのみちコードのレビューはするが、ブランチに入る前に 確認できることが多く無駄なレビュー時間を省ける 60
Slide 61
Slide 61 text
2.実装内容の概要 何のどんな機能を実装したのか 何がどうなれば成功なのかレビュワーに簡潔に伝える フロントの動作を見てほしいのであれば動画を貼る モーダルの動き(例) アコーディオンメニューの動き(例) 画面遷移の様子 フロントの見た目を見てほしいのであれば画像を貼る どのみちコードのレビューはするが、ブランチに入る前に 確認できることが多く無駄なレビュー時間を省ける 61
Slide 62
Slide 62 text
2.実装内容の概要 何のどんな機能を実装したのか 何がどうなれば成功なのかレビュワーに簡潔に伝える フロントの動作を見てほしいのであれば動画を貼る モーダルの動き(例) アコーディオンメニューの動き(例) 画面遷移の様子 フロントの見た目を見てほしいのであれば画像を貼る どのみちコードのレビューはするが、ブランチに入る前に 確認できることが多く無駄なレビュー時間を省ける 62
Slide 63
Slide 63 text
2.実装内容の概要 なぜその機能を実装したのか その機能を実装することによって何が解決されたのかまで書いて あるとベスト 自分自身のプロダクト理解が深まるのでおすすめ 実装した理由が「そこにチケットがあったから」では歩兵 から抜け出せない 63
Slide 64
Slide 64 text
ー 実装した理由が「そこにチケットがあったか ら」では歩兵から抜け出せない 64
Slide 65
Slide 65 text
3.説明欄に書くこと 1.チケットのリンク 2.実装内容の概要 3.レビュワーの確認事項 65
Slide 66
Slide 66 text
3.レビュワーの確認事項 レビュワーに確認してほしいこと コードの動作を確認する前に実行して欲しいコマンドを必ず書く 実行する順番も必ずかく 「〇〇をしたら〇〇になること」のようにかならず動作と結果を セットにしてかく 66
Slide 67
Slide 67 text
3.レビュワーの確認事項 「新しくカラムを追加したので migrateコマンドの実行をお願いします。 」 67
Slide 68
Slide 68 text
3.レビュワーの確認事項 レビュワーに確認してほしいこと コードの動作を確認する前に実行して欲しいコマンドを必ず書く 実行する順番も必ずかく 「〇〇をしたら〇〇になること」のようにかならず動作と結果を セットにしてかく 68
Slide 69
Slide 69 text
プルリクを変えるとどうなったか? 〜そして天国へ〜 69
Slide 70
Slide 70 text
プルリクを変えるとどうなったか? 〜そして天国へ〜 70
Slide 71
Slide 71 text
伝えたいこと 71
Slide 72
Slide 72 text
たかがプルリク、 されどプルリク 72
Slide 73
Slide 73 text
ご清聴ありがとう ございました!!! 73