Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
リーダブルコミットのすゝめ / Recommendation of Readable Commit
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
02
May 29, 2021
Programming
6.5k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
リーダブルコミットのすゝめ / Recommendation of Readable Commit
2021/05/29 PHPカンファレンス沖縄 2021 でトークした際に使用したスライドです
02
May 29, 2021
More Decks by 02
See All by 02
なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは 見送りだったか / Why array_value_first and array_value_last was declined, then why array_first and array_last was accpeted?
cocoeyes02
0
600
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
570
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
2.1k
PHP8.4におけるJITフレームワークIRと中間表現について理解を深める
cocoeyes02
1
1.4k
RemoveだらけのPHPUnit 12に備えよう
cocoeyes02
0
1.5k
PHP RFC: Deprecate implicitly nullable parameter types をサクッと話す
cocoeyes02
0
1.1k
PHPUnit 11 概論
cocoeyes02
5
4k
Random\Randomizer クラスで日常のあれこれを解決しよう! / Random\Randomizer class solves familiar trouble
cocoeyes02
1
1.5k
BASEにおける インシデント対応フローと工夫
cocoeyes02
0
1.4k
Other Decks in Programming
See All in Programming
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.5k
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
contenteditable と日本語入力に向き合う
colorful12
0
180
AWSに止められる覚悟してますか?
morizo_1984
2
520
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
140
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
280
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
130
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
160
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
160
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
200
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.6k
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
160
Featured
See All Featured
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
ラッコキーワード サービス紹介資料
rakko
1
5.2M
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Curious Case for Waylosing
cassininazir
1
560
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
980
Are puppies a ranking factor?
jonoalderson
2
4k
Raft: Consensus for Rubyists
vanstee
142
7.7k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
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