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
リーダブルコミットのすゝめ / Recommendation of Readable Commit
Search
02
May 29, 2021
Programming
7
5.9k
リーダブルコミットのすゝめ / Recommendation of Readable Commit
2021/05/29 PHPカンファレンス沖縄 2021 でトークした際に使用したスライドです
02
May 29, 2021
Tweet
Share
More Decks by 02
See All by 02
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
640
PHP8.4におけるJITフレームワークIRと中間表現について理解を深める
cocoeyes02
1
950
RemoveだらけのPHPUnit 12に備えよう
cocoeyes02
0
910
PHP RFC: Deprecate implicitly nullable parameter types をサクッと話す
cocoeyes02
0
800
PHPUnit 11 概論
cocoeyes02
5
2.5k
Random\Randomizer クラスで日常のあれこれを解決しよう! / Random\Randomizer class solves familiar trouble
cocoeyes02
1
1.1k
BASEにおける インシデント対応フローと工夫
cocoeyes02
0
1.2k
AWS Lambdaから始める Devチームの小さなDevOps改善 〜QCDどれも諦めない運用を目指して〜 / Start to improving small DevOps with AWS Lambda by Dev Team
cocoeyes02
0
1.4k
PHPUnit 10 概論 / Introduction of PHPUnit 10
cocoeyes02
3
9.9k
Other Decks in Programming
See All in Programming
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
170
GitHub Copilotの全体像と活用のヒント AI駆動開発の最初の一歩
74th
5
1.3k
[Codecon - 2025] Como não odiar seus testes
camilacampos
0
100
LLMは麻雀を知らなすぎるから俺が教育してやる
po3rin
3
1.9k
AI Agent 時代のソフトウェア開発を支える AWS Cloud Development Kit (CDK)
konokenj
6
1.1k
Gemini CLIの"強み"を知る! Gemini CLIとClaude Codeを比較してみた!
kotahisafuru
3
910
プロダクトという一杯を作る - プロダクトチームが味の責任を持つまでの煮込み奮闘記
hiliteeternal
0
370
はじめてのWeb API体験 ー 飲食店検索アプリを作ろうー
akinko_0915
0
180
AIに安心して任せるためにTypeScriptで一意な型を作ろう
arfes0e2b3c
0
330
Understanding Kotlin Multiplatform
l2hyunwoo
0
250
ZeroETLで始めるDynamoDBとS3の連携
afooooil
0
150
変化を楽しむエンジニアリング ~ いままでとこれから ~
murajun1978
0
660
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
328
39k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
332
22k
Raft: Consensus for Rubyists
vanstee
140
7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Six Lessons from altMBA
skipperchong
28
3.9k
Designing for Performance
lara
610
69k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Site-Speed That Sticks
csswizardry
10
750
Transcript
1 © 2012-2021 BASE, Inc. 2021/05/29 PHPカンファレンス沖縄 2021 @02 リーダブルコミットのすゝめ
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でお手軽正常系チェック
3 © 2012-2021 BASE, Inc. リーダブルなコミットって何?
4 © 2012-2021 BASE, Inc. リーダブルなコミットって何? 書き手の意図を 爆速で理解できるコミット
5 © 2012-2021 BASE, Inc. アジェンダ リーダブルなコミットをする理由 1 リーダブルな コミットメッセージ、内容のtips
2 リーダブルコミットを支える技術 3
6 © 2012-2021 BASE, Inc. リーダブルなコミットを する理由
7 © 2012-2021 BASE, Inc. 一旦コミット こんなコミットメッセージ見たことありませんか バグを直した PRで指摘されたので反映
8 © 2012-2021 BASE, Inc. 一旦コミット こんなコミットメッセージ見たことありませんか バグを直した PRで指摘されたので反映 コミットは他人が見るものだから、
他人が書き手の意図を理解できないと❌
9 © 2012-2021 BASE, Inc. ・同僚 他人とは? ・自分 ・コントリビューター
10 © 2012-2021 BASE, Inc. ・同僚 他人とは? ・自分 ・コントリビューター
11 © 2012-2021 BASE, Inc. ・同僚 他人とは? ・自分 ・コントリビューター 1.2
読みやすさの定理 > 「他の人」というのは、 > 自分のコードに見覚えのない > 6ヶ月後の「君自身」かもしれない。 過去の自分も未来の自分も、他人である
12 © 2012-2021 BASE, Inc. 書き手の意図がわかるコミットだと どんなメリットがあるか
13 © 2012-2021 BASE, Inc. 書き手の意図がわかるコミットだと どんなメリットがあるか コードを読むだけではわからない 背景がわかる 1
14 © 2012-2021 BASE, Inc. コードレビューの負担が減る 2 書き手の意図がわかるコミットだと どんなメリットがあるか コードを読むだけではわからない
背景がわかる 1
15 © 2012-2021 BASE, Inc. コードレビューの負担が減る 2 コードを読むだけではわからない 背景がわかる 1
書き手の意図がわかるコミットだと どんなメリットがあるか 書き手がコードを書いた意図を 忘れても大丈夫 3
16 © 2012-2021 BASE, Inc. リーダブルなコミット メッセージ、内容のtips
17 © 2012-2021 BASE, Inc. リーダブルなコミットメッセージ、内容のtips プレフィックスをつけよう 1 できるだけWhyを書こう 2
コミットメッセージの形を工夫しよう 3
18 © 2012-2021 BASE, Inc. プレフィックスをつけよう feat: ユーザの新規登録機能を実装 fix: ユーザ登録できない不具合があったので、登録バリデーションを修正
chore: 認証ライブラリを追加
19 © 2012-2021 BASE, Inc. プレフィックスをつけよう feat: ユーザの新規登録機能を実装 fix: ユーザ登録できない不具合があったので、登録バリデーションを修正
chore: 認証ライブラリを追加
20 © 2012-2021 BASE, Inc. プレフィックスをつけよう コミットメッセージの先頭につける • feat: 新機能追加
• fix: バグ修正 • docs: ドキュメントのみの変更 • style: コードの意味に影響を及ぼさない変更(空白、フォーマット、 セミコロンの欠落など • refactor: バグの修正も機能の追加も行わないコード変更 • perf: パフォーマンスを向上させるコード変更 • test: 存在しないテストの追加または既存のテストの修正 • chore: ビルドプロセスの変更、またはドキュメント生成などの補助ツールとラ イブラリ feat: ユーザの新規登録機能を実装 fix: ユーザ登録できない不具合があったので、登録バリデーションを修正 chore: 認証ライブラリを追加
21 © 2012-2021 BASE, Inc. プレフィックスをつけよう プレフィックスをつけるとどんな良いことがあるのか?
22 © 2012-2021 BASE, Inc. プレフィックスをつけよう プレフィックスをつけるとどんな良いことがあるのか? • どんなコミットかある程度わかるので、レビュワーの負担が減る ◦
どんなプレフィックスがあるかレビュワーに共有する必要あり
23 © 2012-2021 BASE, Inc. プレフィックスをつけよう プレフィックスをつけるとどんな良いことがあるのか? • どんなコミットかある程度わかるので、レビュワーの負担が減る ◦
どんなプレフィックスがあるかレビュワーに共有する必要あり • プレフィックス単位でコミットを分ける習慣がつく ◦ 作業の単位を意識しながらコミットすることができる ◦ 各プレフィックスの粒度もチーム内ですり合わせできると良い
24 © 2012-2021 BASE, Inc. プレフィックスをつけよう プレフィックスをつけるとどんな良いことがあるのか? • どんなコミットかある程度わかるので、レビュワーの負担が減る ◦
どんなプレフィックスがあるかレビュワーに共有する必要あり • プレフィックス単位でコミットを分ける習慣がつく ◦ 作業の単位を意識しながらコミットすることができる ◦ 各プレフィックスの粒度もチーム内ですり合わせできると良い プレフィックス単体でも効果があるが、 チーム内ですり合わせられるともっと効果を発揮する!
25 © 2012-2021 BASE, Inc. できるだけWhyを書こう
26 © 2012-2021 BASE, Inc. できるだけWhyを書こう コミットから読み取れる情報 • コミット内容 ◦
どのようにコードを変更したか • コミットメッセージ ◦ コードを変更したことで何ができるようになったか ◦ 何故コードを変更したか
27 © 2012-2021 BASE, Inc. できるだけWhyを書こう コミットから読み取れる情報 • コミット内容 →
What, How ◦ どのようにコードを変更したか • コミットメッセージ → Why, What ◦ コードを変更したことで何ができるようになったか ◦ 何故コードを変更したか
28 © 2012-2021 BASE, Inc. できるだけWhyを書こう コミットから読み取れる情報 • コミット内容 →
What, How ◦ どのようにコードを変更したか • コミットメッセージ → Why, What ◦ コードを変更したことで何ができるようになったか ◦ 何故コードを変更したか ❌ 年齢の引数を追加して購入バリデーションを修正 ⭕ 未成年が20歳以上向け商品を買えてしまう不具合があったので、 年齢の引数を追加して購入バリデーションを修正
29 © 2012-2021 BASE, Inc. できるだけWhyを書こう このWhyが上手く書けない時は、 1つのコミットメッセージに複数の作業を含んでいる可能性がある ❌ 様々なバグを直すため、変更
(抽象的すぎる、複数の変更を含んでいる) ⭕ ユーザの新規登録でエラーが発生して登録できないため、 新規登録バリデーションを修正
30 © 2012-2021 BASE, Inc. コミットメッセージの形を工夫しよう ex. perf: パフォーマンス向上のため、ユーザ一覧画面のデータ取得ロジック をリファクタリング
(空行) DBからデータを取得するロジックでN+1が発生していたので、in句を使う クエリへと修正 (空行) Issue #100
31 © 2012-2021 BASE, Inc. ex. perf: パフォーマンス向上のため、ユーザ一覧画面のデータ取得ロジック をリファクタリング (空行)
DBからデータを取得するロジックでN+1が発生していたので、in句を使う クエリへと修正 (空行) Issue #100 タイトル 本文 リンク コミットメッセージの形を工夫しよう
32 © 2012-2021 BASE, Inc. ex. perf: パフォーマンス向上のため、ユーザ一覧画面のデータ取得ロジック をリファクタリング (空行)
DBからデータを取得するロジックでN+1が発生していたので、in句を使う クエリへと修正 (空行) Issue #100 コミットメッセージが長くなってしまう場合は、本文を使おう • タイトル部分は50文字以内に納めるとGit公式で推奨(本文も72文字) • コミットメッセージは簡単に書いて、本文に詳細を書く コミットメッセージの形を工夫しよう
33 © 2012-2021 BASE, Inc. ex. perf: パフォーマンス向上のため、ユーザ一覧画面のデータ取得ロジック をリファクタリング (空行)
DBからデータを取得するロジックでN+1が発生していたので、in句を使う クエリへと修正 (空行) Issue #100 チケットやissueリンクを貼るのもあり • トラッキングしやすくなる • ビジネス要件的な背景なども追いやすくなる コミットメッセージの形を工夫しよう
34 © 2012-2021 BASE, Inc. リーダブルコミットを 支える技術
35 © 2012-2021 BASE, Inc. Conventional Commits 1.0.0 コミットメッセージの軽量規約 コミットメッセージの形、プレフィックス、複数のルールと強制度が
定められている もともとAngularの規約に触発されて生まれた経緯がある他、 electronやyargsなどで利用されている
36 © 2012-2021 BASE, Inc. PHP Commitizen Conventional Commitに準拠したコミットメッセージ作成ツール プレフィックスや本文、リンクなど文言を逐次的に入力することでできる
composerに依存するPHPプロジェクトに対して設定、使用可能であり、 非PHPプロジェクトに対してもグローバルに使用可能。
37 © 2012-2021 BASE, Inc. 最後に 今回のセッションは自戒が(多分に)含まれています。 とはいえ今回のトークを振り返ると、コミットやコミットメッセージは 書き手と読み手のコミュニケーションだと改めて感じました。 今回のトークが少しでもリーダブルなコミットを書くきっかけになれば
幸いです!
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