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
02
May 29, 2021
Programming
6.4k
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
580
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
560
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
2.1k
PHP8.4におけるJITフレームワークIRと中間表現について理解を深める
cocoeyes02
1
1.4k
RemoveだらけのPHPUnit 12に備えよう
cocoeyes02
0
1.4k
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.3k
Other Decks in Programming
See All in Programming
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.1k
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
280
Security issues being discussed on Web Platforms
petamoriken
0
530
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
150
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
470
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
430
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
140
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
200
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
490
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
120
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
Mobile First: as difficult as doing things right
swwweet
225
10k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
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