はじめに
GitHubでPull Request(PR)をマージしたときに、関連するIssueを自動的に閉じることができる便利な機能があります。
Closes #10
Fixes #123
Resolves #456
このようなキーワードを使いますが、「close」「fix」「resolve」って何が違うの?と疑問に思ったことはありませんか?
この記事では、それぞれのキーワードの違いと使い分けをわかりやすく解説します。
結論:機能は全部同じ!
先に結論をお伝えすると、どのキーワードを使っても動作は全く同じです。
PRがマージされると、指定したIssueが自動的にクローズされます。
では何が違うのか?それは 「英語としての意味・ニュアンス」 です。
使えるキーワード一覧
| キーワード | 意味 |
|---|---|
close / closes / closed
|
閉じる |
fix / fixes / fixed
|
修正する |
resolve / resolves / resolved
|
解決する |
close・fix・resolveの違い
🔵 close(閉じる)
「このIssueはもう対応不要なので閉じます」 というニュアンスです。
最も汎用的で、どんな場面でも使えます。
closeが適している場面
- 新機能の追加
- ドキュメントの更新
- 議論や質問への対応完了
- 「やらない」と決めたIssueを閉じる
例
# 新機能:ダークモードを追加
ユーザー設定画面にダークモードの切り替え機能を追加しました。
Closes #42
🟢 fix(修正する)
「壊れていたものを直しました」 というニュアンスです。
何かが「正しく動いていなかった」状態を「正しく動く」状態にしたときに使います。
fixが適している場面
- バグの修正
- 誤字脱字の修正
- 表示崩れの修正
- エラーの修正
例
# ログインボタンが反応しない問題を修正
クリックイベントが正しくバインドされていなかったのを修正しました。
Fixes #128
🟣 resolve(解決する)
「問題や課題に取り組んで解決しました」 というニュアンスです。
単純な修正ではなく、調査や検討が必要だった問題を解決したときに使います。
resolveが適している場面
- パフォーマンス問題の解決
- セキュリティ問題への対応
- 設計上の課題の解決
- 複数の原因が絡む複雑な問題の解決
例
# ページ読み込みが遅い問題を解決
原因を調査した結果、N+1クエリが発生していました。
Eager Loadingを導入し、読み込み時間を3秒から0.5秒に改善しました。
Resolves #256
わかりやすい比較表
| 状況 | 適したキーワード | 理由 |
|---|---|---|
| ボタンが動かないバグを直した | Fixes |
壊れていたものを修正した |
| 新しいAPIエンドポイントを追加した | Closes |
新機能の追加(何かが壊れていたわけではない) |
| メモリリークの原因を特定して対処した | Resolves |
調査して問題を解決した |
| READMEの誤字を直した | Fixes |
間違いを修正した |
| 「〇〇機能が欲しい」という要望に対応した | Closes |
要望への対応完了 |
| 本番環境でのみ発生するエラーを解決した | Resolves |
複雑な問題を解決した |
日常会話に例えると
もっとイメージしやすいように、日常会話に例えてみます。
fix = 「直す」
「テレビのリモコンが動かなかったから、直したよ」(電池を交換した)
壊れていたものを元通りにするイメージです。
resolve = 「解決する」
「エアコンの調子が悪い問題を解決したよ」(原因を調べたらフィルターの汚れだったので掃除した)
原因を調査して、問題に対処するイメージです。
close = 「終わりにする」
「この件は終わりにしよう」
対応が完了したので、話を閉じるイメージです。
文法形の違い(closes / close / closed)
同じ単語でも3つの形がありますが、これは英語の文法の違いです。
| 形 | 文法 | 使用例 |
|---|---|---|
closes |
三人称単数現在形 |
This PR closes #10(このPRは#10を閉じる) |
close |
命令形 |
Close #10(#10を閉じろ) |
closed |
過去形 |
Closed #10(#10を閉じた) |
どれを使っても動作は同じなので、好みで選んでOKです。
よく使われるのは以下のパターンです:
Fixes #123 ← 三人称単数形(人気)
Fixed #123 ← 過去形(人気)
Fix #123 ← 命令形
複数のIssueを閉じる場合
複数のIssueを一度に閉じることもできます。
Fixes #1, fixes #2, fixes #3
または
Fixes #1
Fixes #2
Fixes #3
別リポジトリのIssueを閉じる場合
別のリポジトリのIssueを閉じるには、オーナー名/リポジトリ名#Issue番号 の形式を使います。
Fixes octo-org/octo-repo#100
迷ったときのおすすめ
正直なところ、チームで統一されていなければ、以下のルールで十分です。
| 場面 | おすすめ |
|---|---|
| バグを直したとき | Fixes #番号 |
| それ以外 | Closes #番号 |
シンプルに使い分けるなら、これだけ覚えておけばOKです!
まとめ
- close / fix / resolve はすべて同じ動作(PRマージ時にIssueを自動クローズ)
- 違いは 英語のニュアンス のみ
- fix = バグや誤りを「修正」したとき
- resolve = 複雑な問題を「解決」したとき
- close = 汎用的に使える「閉じる」
- 迷ったら Fixes(バグ修正)か Closes(それ以外)でOK
チーム内でルールを決めておくと、PRを見ただけで「これはバグ修正だな」「これは新機能だな」とわかりやすくなるメリットもあります。
ぜひ活用してみてください!