Slide 1

Slide 1 text

1 © 2012-2021 BASE, Inc.     2021/05/29 PHPカンファレンス沖縄 2021 @02 リーダブルコミットのすゝめ

Slide 2

Slide 2 text

2 © 2012-2021 BASE, Inc. 自己紹介 PHPカンファレンス 2019 PHPerのためのテストコード入門 2020 テストピラミッドを意識した テストコード実装戦略 WEB+DB PRESS しっかり,きちんとPHP BankEnd Software Enginner 02 大津 和槻 :@cocoeyes02 2021/02~ BASE, Inc. Vol.121 Composer 2によるパッケージ管理 初のメジャーバージョンアップで大進化! Vol.118 PuPHPeteerでE2Eテスト PHP版Puppeteerでお手軽正常系チェック

Slide 3

Slide 3 text

3 © 2012-2021 BASE, Inc. リーダブルなコミットって何?

Slide 4

Slide 4 text

4 © 2012-2021 BASE, Inc. リーダブルなコミットって何? 書き手の意図を 爆速で理解できるコミット

Slide 5

Slide 5 text

5 © 2012-2021 BASE, Inc. アジェンダ リーダブルなコミットをする理由 1 リーダブルな       コミットメッセージ、内容のtips 2 リーダブルコミットを支える技術 3

Slide 6

Slide 6 text

6 © 2012-2021 BASE, Inc. リーダブルなコミットを する理由

Slide 7

Slide 7 text

7 © 2012-2021 BASE, Inc. 一旦コミット こんなコミットメッセージ見たことありませんか バグを直した PRで指摘されたので反映

Slide 8

Slide 8 text

8 © 2012-2021 BASE, Inc. 一旦コミット こんなコミットメッセージ見たことありませんか バグを直した PRで指摘されたので反映 コミットは他人が見るものだから、 他人が書き手の意図を理解できないと❌

Slide 9

Slide 9 text

9 © 2012-2021 BASE, Inc. ・同僚 他人とは? ・自分 ・コントリビューター

Slide 10

Slide 10 text

10 © 2012-2021 BASE, Inc. ・同僚 他人とは? ・自分 ・コントリビューター

Slide 11

Slide 11 text

11 © 2012-2021 BASE, Inc. ・同僚 他人とは? ・自分 ・コントリビューター 1.2 読みやすさの定理 > 「他の人」というのは、 > 自分のコードに見覚えのない > 6ヶ月後の「君自身」かもしれない。 過去の自分も未来の自分も、他人である

Slide 12

Slide 12 text

12 © 2012-2021 BASE, Inc. 書き手の意図がわかるコミットだと どんなメリットがあるか

Slide 13

Slide 13 text

13 © 2012-2021 BASE, Inc. 書き手の意図がわかるコミットだと どんなメリットがあるか コードを読むだけではわからない 背景がわかる 1

Slide 14

Slide 14 text

14 © 2012-2021 BASE, Inc. コードレビューの負担が減る 2 書き手の意図がわかるコミットだと どんなメリットがあるか コードを読むだけではわからない 背景がわかる 1

Slide 15

Slide 15 text

15 © 2012-2021 BASE, Inc. コードレビューの負担が減る 2 コードを読むだけではわからない 背景がわかる 1 書き手の意図がわかるコミットだと どんなメリットがあるか 書き手がコードを書いた意図を 忘れても大丈夫 3

Slide 16

Slide 16 text

16 © 2012-2021 BASE, Inc. リーダブルなコミット メッセージ、内容のtips

Slide 17

Slide 17 text

17 © 2012-2021 BASE, Inc. リーダブルなコミットメッセージ、内容のtips プレフィックスをつけよう 1 できるだけWhyを書こう 2 コミットメッセージの形を工夫しよう 3

Slide 18

Slide 18 text

18 © 2012-2021 BASE, Inc. プレフィックスをつけよう feat: ユーザの新規登録機能を実装 fix: ユーザ登録できない不具合があったので、登録バリデーションを修正 chore: 認証ライブラリを追加

Slide 19

Slide 19 text

19 © 2012-2021 BASE, Inc. プレフィックスをつけよう feat: ユーザの新規登録機能を実装 fix: ユーザ登録できない不具合があったので、登録バリデーションを修正 chore: 認証ライブラリを追加

Slide 20

Slide 20 text

20 © 2012-2021 BASE, Inc. プレフィックスをつけよう コミットメッセージの先頭につける ● feat: 新機能追加 ● fix: バグ修正 ● docs: ドキュメントのみの変更 ● style: コードの意味に影響を及ぼさない変更(空白、フォーマット、 セミコロンの欠落など ● refactor: バグの修正も機能の追加も行わないコード変更 ● perf: パフォーマンスを向上させるコード変更 ● test: 存在しないテストの追加または既存のテストの修正 ● chore: ビルドプロセスの変更、またはドキュメント生成などの補助ツールとラ イブラリ feat: ユーザの新規登録機能を実装 fix: ユーザ登録できない不具合があったので、登録バリデーションを修正 chore: 認証ライブラリを追加

Slide 21

Slide 21 text

21 © 2012-2021 BASE, Inc. プレフィックスをつけよう プレフィックスをつけるとどんな良いことがあるのか?

Slide 22

Slide 22 text

22 © 2012-2021 BASE, Inc. プレフィックスをつけよう プレフィックスをつけるとどんな良いことがあるのか? ● どんなコミットかある程度わかるので、レビュワーの負担が減る ○ どんなプレフィックスがあるかレビュワーに共有する必要あり

Slide 23

Slide 23 text

23 © 2012-2021 BASE, Inc. プレフィックスをつけよう プレフィックスをつけるとどんな良いことがあるのか? ● どんなコミットかある程度わかるので、レビュワーの負担が減る ○ どんなプレフィックスがあるかレビュワーに共有する必要あり ● プレフィックス単位でコミットを分ける習慣がつく ○ 作業の単位を意識しながらコミットすることができる ○ 各プレフィックスの粒度もチーム内ですり合わせできると良い

Slide 24

Slide 24 text

24 © 2012-2021 BASE, Inc. プレフィックスをつけよう プレフィックスをつけるとどんな良いことがあるのか? ● どんなコミットかある程度わかるので、レビュワーの負担が減る ○ どんなプレフィックスがあるかレビュワーに共有する必要あり ● プレフィックス単位でコミットを分ける習慣がつく ○ 作業の単位を意識しながらコミットすることができる ○ 各プレフィックスの粒度もチーム内ですり合わせできると良い プレフィックス単体でも効果があるが、 チーム内ですり合わせられるともっと効果を発揮する!

Slide 25

Slide 25 text

25 © 2012-2021 BASE, Inc. できるだけWhyを書こう

Slide 26

Slide 26 text

26 © 2012-2021 BASE, Inc. できるだけWhyを書こう コミットから読み取れる情報 ● コミット内容 ○ どのようにコードを変更したか ● コミットメッセージ ○ コードを変更したことで何ができるようになったか ○ 何故コードを変更したか

Slide 27

Slide 27 text

27 © 2012-2021 BASE, Inc. できるだけWhyを書こう コミットから読み取れる情報 ● コミット内容 → What, How ○ どのようにコードを変更したか ● コミットメッセージ → Why, What ○ コードを変更したことで何ができるようになったか ○ 何故コードを変更したか

Slide 28

Slide 28 text

28 © 2012-2021 BASE, Inc. できるだけWhyを書こう コミットから読み取れる情報 ● コミット内容 → What, How ○ どのようにコードを変更したか ● コミットメッセージ → Why, What ○ コードを変更したことで何ができるようになったか ○ 何故コードを変更したか ❌ 年齢の引数を追加して購入バリデーションを修正 ⭕ 未成年が20歳以上向け商品を買えてしまう不具合があったので、   年齢の引数を追加して購入バリデーションを修正

Slide 29

Slide 29 text

29 © 2012-2021 BASE, Inc. できるだけWhyを書こう このWhyが上手く書けない時は、 1つのコミットメッセージに複数の作業を含んでいる可能性がある ❌ 様々なバグを直すため、変更 (抽象的すぎる、複数の変更を含んでいる) ⭕ ユーザの新規登録でエラーが発生して登録できないため、         新規登録バリデーションを修正

Slide 30

Slide 30 text

30 © 2012-2021 BASE, Inc. コミットメッセージの形を工夫しよう ex. perf: パフォーマンス向上のため、ユーザ一覧画面のデータ取得ロジック をリファクタリング (空行) DBからデータを取得するロジックでN+1が発生していたので、in句を使う クエリへと修正 (空行) Issue #100

Slide 31

Slide 31 text

31 © 2012-2021 BASE, Inc. ex. perf: パフォーマンス向上のため、ユーザ一覧画面のデータ取得ロジック をリファクタリング (空行) DBからデータを取得するロジックでN+1が発生していたので、in句を使う クエリへと修正 (空行) Issue #100 タイトル 本文 リンク コミットメッセージの形を工夫しよう

Slide 32

Slide 32 text

32 © 2012-2021 BASE, Inc. ex. perf: パフォーマンス向上のため、ユーザ一覧画面のデータ取得ロジック をリファクタリング (空行) DBからデータを取得するロジックでN+1が発生していたので、in句を使う クエリへと修正 (空行) Issue #100 コミットメッセージが長くなってしまう場合は、本文を使おう ● タイトル部分は50文字以内に納めるとGit公式で推奨(本文も72文字) ● コミットメッセージは簡単に書いて、本文に詳細を書く コミットメッセージの形を工夫しよう

Slide 33

Slide 33 text

33 © 2012-2021 BASE, Inc. ex. perf: パフォーマンス向上のため、ユーザ一覧画面のデータ取得ロジック をリファクタリング (空行) DBからデータを取得するロジックでN+1が発生していたので、in句を使う クエリへと修正 (空行) Issue #100 チケットやissueリンクを貼るのもあり ● トラッキングしやすくなる ● ビジネス要件的な背景なども追いやすくなる コミットメッセージの形を工夫しよう

Slide 34

Slide 34 text

34 © 2012-2021 BASE, Inc. リーダブルコミットを 支える技術

Slide 35

Slide 35 text

35 © 2012-2021 BASE, Inc. Conventional Commits 1.0.0 コミットメッセージの軽量規約 コミットメッセージの形、プレフィックス、複数のルールと強制度が   定められている もともとAngularの規約に触発されて生まれた経緯がある他、      electronやyargsなどで利用されている

Slide 36

Slide 36 text

36 © 2012-2021 BASE, Inc. PHP Commitizen Conventional Commitに準拠したコミットメッセージ作成ツール プレフィックスや本文、リンクなど文言を逐次的に入力することでできる composerに依存するPHPプロジェクトに対して設定、使用可能であり、 非PHPプロジェクトに対してもグローバルに使用可能。

Slide 37

Slide 37 text

37 © 2012-2021 BASE, Inc. 最後に 今回のセッションは自戒が(多分に)含まれています。 とはいえ今回のトークを振り返ると、コミットやコミットメッセージは 書き手と読み手のコミュニケーションだと改めて感じました。 今回のトークが少しでもリーダブルなコミットを書くきっかけになれば 幸いです!

Slide 38

Slide 38 text

38 © 2012-2021 BASE, Inc. 参考文献 ● リーダブルコード――より良いコードを書くためのシンプルで実践的なテクニック https://www.oreilly.co.jp/books/9784873115658/ ● 【今日からできる】コミットメッセージに 「プレフィックス」 をつけるだけで、開発効率が上がった話 https://qiita.com/numanomanu/items/45dd285b286a1f7280ed ● t_wadaさんのツイート https://twitter.com/t_wada/status/904916106153828352?s=20 ● Git - Contributing to a Project https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#_commit_guidelines ● angular.js/DEVELOPERS.md https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#type ● Conventional Commits 1.0.0 https://www.conventionalcommits.org/ja/v1.0.0/ ● PHP Commitizen https://github.com/conventional-commits/php-commitizen ● Working with Git https://slides.com/damianopetrungaro/working-with-git