Issueテンプレート作成する
作成手順
-
GitHubの対象リポジトリを開く
(今回はissue_templates
というリポジトリに設定する) -
"Propose changes"から変更をコミットする
以上で作成完了。
.giothub/ISSUE_TEMPLATE
配下にテンプレート用の.md
ファイルが作成されていることを確認しよう。
Issueフォームを使った使ったテンプレート作成について
入力項目に選択肢を用意するなど自由記述ではない方が都合がよい場合は、Issueフォームを使って実装するとよい。
この場合は、YAMLのフォーム定義ファイルを作成して.giothub/ISSUE_TEMPLATE
配下に格納する。
詳細は、以下のリンクより公式のドキュメントを確認してほしい。
予備情報
3種類追加した後のIssues作成画面は以下の通りで選択肢としてどのテンプレートを使うか選べるようになっている。
※テンプレート用の.md
ファイルのname:
が選択肢名になっているため、選択肢の名称を変更したかったらファイル名を変更するとよい。
プロジェクトのタスク管理用を行うため、Issueのラベルを選定する
目的:Issueを分類してタスク管理に利用できるようなラベル構成とする
GitHub既存のラベルは種類が多いうえに、discriptionまで英語で記載されており、日本人向けではないと考える。
→明確な分類を開発者全員で共有できる状態が好ましい。
Issueとして明確にしたい情報
Issueとして明確にしたい情報として以下が挙げられる。
- 優先度
- 分類
- ステータス
- 工数
Labels(ラベル)の役割としては分類を担保するものとして使うことが想定されている。
どのような分類が必要か
既存の分類
No. | ラベル名 | 説明 |
---|---|---|
1 | bug | 予期しない問題または意図しない動作を示します |
2 | documentation | ドキュメンテーションに改善や追加が必要であること を示します |
3 | duplicate | 似た Issue、pull request、ディスカッションを示しま す |
4 | enhancement | 新しい機能のリクエストを示します |
5 | good first Issue | 初回のコントリビューターに適した Issue を示します |
6 | help wanted | メンテナーが Issue もしくはプルリクエストに助けを 求めていることを示します |
7 | invalid | Issue、pull request、ディスカッションが関係なくなっ ていることを示します |
8 | question | Issue、pull request、ディスカッションにさらに情報が 必要であることを示します |
9 | wontfix | Issue、pull request、ディスカッションに対する作業が 続けられないことを示します |
既存のラベルは複数のラベルを付けることが前提の分類となっているように思える。
特にquestion
はステータスに近い分類で、プロジェクトでIssueを管理し、ステータスを付与することでラベルの管理対象外にできる。
ラベルの機能はあくまでどのようなIssueかを分類するだけのシンプルな実装とすることで、開発者間で使い方が揺れることがなくなり、訳の分からないIssueが発生することを防ぐことができるのではないかと考える。
また、今回用意するリポジトリは一部リリースが完了しており、運用+機能拡張フェーズに入っているため、基本的にIssueは問い合わせ起因で発生することを前提とする。
今回採用するラベル
今回厳選したラベルは以下の4つだ。
No. | ラベル名 | 説明 |
---|---|---|
1 | バグ | 不具合報告など改善の必要な問い合わせ |
2 | ナレッジ | ドメイン知識やノウハウ・ドキュメントの改善や追加 |
3 | 改善 | 既存機能のリファクタ・改善について示します |
4 | 問い合わせ | 追加要望など改善の必要な問い合わせ |
※この際、日本人だけで開発を行う場合、ラベルなどは日本語を使うことを推奨する。
オープンソースにする想定がある、海外のメンバーと開発を行うなどでない場合は英語を使うメリットが少ない。
コミットプレフィックスなどは英語の方が短縮できる(冗長になりにくい)面を考えて許容できるが、基本的に日本人のみの場合は日本語を使ってほしい。
Issueテンプレートの構成を行う
YAML
を使ったテンプレートサンプル
バグ
name: バグ報告
description: 不具合報告はこちら
title: "【issue_templates】"
labels: ["バグ"]
projects: []
assignees: []
body:
- type: markdown
attributes:
value: |
## バグ報告フォーム
不具合の詳細情報を記入してください。
- type: textarea
id: bug_summary
attributes:
label: 概要
description: 不具合の詳細な内容を記述してください
placeholder: "○○機能に○○ページからリダイレクトした際に××を入力するとエラーが表示される"
validations:
required: false
- type: textarea
id: reproduction_steps
attributes:
label: 再現手順
description: 不具合を再現するための手順を記述してください
placeholder: "○○機能に○○ページからリダイレクトして××を入力する"
validations:
required: false
- type: textarea
id: logs
attributes:
label: ログ
description: 関連するログファイルの内容をコピー&ペーストしてください
placeholder: "ログファイルから該当ログをコピペ"
render: shell
validations:
required: false
- type: textarea
id: supplement
attributes:
label: 補足
description: その他の補足情報があれば記述してください
placeholder: "他の遷移方法を網羅的に検証・調査したが該当遷移のみで発生する"
validations:
required: false
- type: checkboxes
id: inquiry_origin
attributes:
label: 問い合わせ起因
description: この不具合は問い合わせから発覚したものですか?
options:
- label: 問い合わせから発覚した不具合である
required: false
- type: input
id: inquiry_user
attributes:
label: 問い合わせユーザ
description: 問い合わせユーザの情報(問い合わせ起因の場合のみ)
placeholder: "userName/userId/部署名"
validations:
required: false
- type: input
id: inquiry_datetime
attributes:
label: 問い合わせ日時
description: 問い合わせがあった日時(問い合わせ起因の場合のみ)
placeholder: "yyyy/mm/dd hh:mm"
validations:
required: false
- type: dropdown
id: inquiry_method
attributes:
label: 問い合わせ方法
description: 問い合わせの方法(問い合わせ起因の場合のみ)
options:
- "選択してください"
- "口頭"
- "メール"
- "電話"
- "チャット"
default: 0
validations:
required: false
- type: textarea
id: inquiry_content
attributes:
label: 問い合わせ内容
description: 元の問い合わせ内容(問い合わせ起因の場合のみ)
placeholder: "元の問い合わせ内容を転記"
validations:
required: false
ナレッジ
name: ナレッジ
description: ドメイン知識やノウハウはこちら
title: "【issue_templates】"
labels: ["ナレッジ"]
projects: []
assignees: []
body:
- type: markdown
attributes:
value: |
## ナレッジ共有フォーム
ドメイン知識やノウハウの共有情報を記入してください。
- type: input
id: knowledge_summary
attributes:
label: ナレッジ概要
description: 共有するナレッジの概要を簡潔に記述してください
placeholder: "○○に関するドメイン知識・ノウハウの共有"
validations:
required: false
- type: textarea
id: knowledge_detail
attributes:
label: ナレッジ詳細
description: 具体的な知識内容やノウハウの詳細を記載してください
placeholder: "具体的な知識内容やノウハウの詳細を記載"
validations:
required: false
- type: textarea
id: target_area
attributes:
label: 対象領域・機能
description: このナレッジが適用される領域や機能を記述してください
placeholder: "このナレッジが適用される領域や機能"
validations:
required: false
- type: textarea
id: background
attributes:
label: 背景・経緯
description: このナレッジが得られた背景や経緯を記述してください
placeholder: "このナレッジが得られた背景や経緯"
validations:
required: false
- type: textarea
id: references
attributes:
label: 参考資料・リンク
description: 関連する資料やリンクがあれば記載してください
placeholder: "関連する資料やリンクがあれば記載"
validations:
required: false
- type: textarea
id: usage_method
attributes:
label: 活用方法
description: このナレッジをどのように活用できるかを記述してください
placeholder: "このナレッジをどのように活用できるか"
validations:
required: false
- type: textarea
id: supplement
attributes:
label: 補足
description: その他補足事項があれば記載してください
placeholder: "その他補足事項があれば記載"
validations:
required: false
改善
name: 改善リクエスト
description: 既存機能の改善・リファクタはこちら
title: "【issue_templates】"
labels: ["改善"]
projects: []
assignees: []
body:
- type: markdown
attributes:
value: |
## 改善要望フォーム
既存機能の改善・リファクタの詳細情報を記入してください。
- type: input
id: improvement_summary
attributes:
label: 改善概要
description: 改善内容の概要を簡潔に記述してください
placeholder: "○○機能の××部分を改善したい"
validations:
required: false
- type: textarea
id: improvement_detail
attributes:
label: 改善詳細
description: 具体的にどのような改善を行うか詳細を記載してください
placeholder: "具体的にどのような改善を行うか詳細を記載"
validations:
required: false
- type: textarea
id: current_issues
attributes:
label: 現状の課題
description: 現在の実装や仕様における問題点や課題を記述してください
placeholder: "現在の実装や仕様における問題点や課題"
validations:
required: false
- type: textarea
id: expected_effects
attributes:
label: 改善後の期待効果
description: 改善により期待される効果やメリットを記述してください
placeholder: "改善により期待される効果やメリット"
validations:
required: false
- type: textarea
id: target_scope
attributes:
label: 対象範囲
description: 改善対象となる機能やコンポーネントを記述してください
placeholder: "改善対象となる機能やコンポーネント"
validations:
required: false
- type: textarea
id: implementation_approach
attributes:
label: 実装方針
description: どのようなアプローチで改善を行うかを記述してください
placeholder: "どのようなアプローチで改善を行うか"
validations:
required: false
- type: textarea
id: impact_scope
attributes:
label: 影響範囲
description: 改善による他機能への影響や懸念事項を記述してください
placeholder: "改善による他機能への影響や懸念事項"
validations:
required: false
- type: dropdown
id: priority
attributes:
label: 優先度
description: この改善の優先度を選択してください
options:
- "選択してください"
- "高"
- "中"
- "低"
default: 0
validations:
required: false
- type: textarea
id: supplement
attributes:
label: 補足
description: その他改善に関する補足事項があれば記載してください
placeholder: "その他改善に関する補足事項"
validations:
required: false
問い合わせ
name: 問い合わせ
description: 追加要望など問い合わせはこちら
title: "【issue_templates】"
labels: ["問い合わせ"]
projects: []
assignees: []
body:
- type: markdown
attributes:
value: |
## 問い合わせフォーム
追加要望や質問の詳細情報を記入してください。
- type: input
id: inquiry_summary
attributes:
label: 問い合わせ概要
description: 問い合わせ内容の概要を簡潔に記述してください
placeholder: "○○に関する要望や質問"
validations:
required: false
- type: textarea
id: inquiry_detail
attributes:
label: 問い合わせ詳細
description: 具体的な要望内容や質問の詳細を記載してください
placeholder: "具体的な要望内容や質問の詳細"
validations:
required: false
- type: textarea
id: inquiry_background
attributes:
label: 問い合わせ背景
description: なぜこの要望や質問が発生したかを記述してください
placeholder: "なぜこの要望や質問が発生したか"
validations:
required: false
- type: textarea
id: desired_response
attributes:
label: 希望する対応
description: どのような対応を希望するかを記述してください
placeholder: "どのような対応を希望するか"
validations:
required: false
- type: dropdown
id: priority
attributes:
label: 優先度
description: この問い合わせの優先度を選択してください
options:
- "選択してください"
- "高"
- "中"
- "低"
default: 0
validations:
required: false
- type: input
id: deadline
attributes:
label: 期限・スケジュール
description: 対応希望時期があれば記載してください
placeholder: "対応希望時期があれば記載"
validations:
required: false
- type: textarea
id: supplement
attributes:
label: 補足
description: その他参考情報や補足事項があれば記載してください
placeholder: "その他参考情報や補足事項"
validations:
required: false
- type: input
id: inquiry_user
attributes:
label: 問い合わせユーザ
description: 問い合わせユーザの情報(外部からの問い合わせの場合のみ)
placeholder: "userName/userId/部署名"
validations:
required: false
- type: input
id: inquiry_datetime
attributes:
label: 問い合わせ日時
description: 問い合わせがあった日時(外部からの問い合わせの場合のみ)
placeholder: "yyyy/mm/dd hh:mm"
validations:
required: false
- type: dropdown
id: inquiry_method
attributes:
label: 問い合わせ方法
description: 問い合わせの方法(外部からの問い合わせの場合のみ)
options:
- "選択してください"
- "口頭"
- "メール"
- "電話"
- "チャット"
default: 0
validations:
required: false
- type: textarea
id: original_inquiry_content
attributes:
label: 元の問い合わせ内容
description: 元の問い合わせ内容を転記してください(外部からの問い合わせの場合のみ)
placeholder: "元の問い合わせ内容を転記"
validations:
required: false
.md
を使ったテンプレートサンプル
バグ
---
name: バグ報告
about: 不具合報告はこちら
title: 【issue_templates】(不具合内容)
labels: バグ
assignees: ''
---
※本コメントおよび()のコメントは作成時に削除すること
## 不具合概要
(特定ケースで○○機能にて××を入力するとエラーが表示される)
### 不具合詳細
(○○機能に○○ページからリダイレクトした際に××を入力するとエラーが表示される)
### 再現手順
(○○機能に○○ページからリダイレクトして××を入力する)
### ログ
(ログファイルから該当ログをコピぺ)
### 補足
(他の遷移方法を網羅的に検証・調査したが該当遷移のみで発生する)
(※以下は問い合わせ起因でない場合は削除すること)
---
## 問い合わせ概要
### 問い合わせユーザ
(userName/userId/部署名)
### 問い合わせ日時
(yyyy/mm/dd hh:mm)
### 問い合わせ方法
(口頭/メール/電話/チャット)
### 問い合わせ内容
(元の問い合わせ内容を転記)
ナレッジ
---
name: ナレッジ
about: ドメイン知識やノウハウはこちら
title: 【issue_templates】(ナレッジ内容)
labels: ナレッジ
assignees: ''
---
※本コメントおよび()のコメントは作成時に削除すること
## ナレッジ概要
(○○に関するドメイン知識・ノウハウの共有)
### ナレッジ詳細
(具体的な知識内容やノウハウの詳細を記載)
### 対象領域・機能
(このナレッジが適用される領域や機能)
### 背景・経緯
(このナレッジが得られた背景や経緯)
### 参考資料・リンク
(関連する資料やリンクがあれば記載)
### 活用方法
(このナレッジをどのように活用できるか)
### 補足
(その他補足事項があれば記載)
改善
---
name: 改善リクエスト
about: 改善・リファクタはこちら
title: 【issue_templates】(改善内容)
labels: 改善
assignees: ''
---
※本コメントおよび()のコメントは作成時に削除すること
## 改善概要
(○○機能の××部分を改善したい)
### 改善詳細
(具体的にどのような改善を行うか詳細を記載)
### 現状の課題
(現在の実装や仕様における問題点や課題)
### 改善後の期待効果
(改善により期待される効果やメリット)
### 対象範囲
(改善対象となる機能やコンポーネント)
### 実装方針
(どのようなアプローチで改善を行うか)
### 影響範囲
(改善による他機能への影響や懸念事項)
### 補足
(その他改善に関する補足事項)
問い合わせ
---
name: 問い合わせ
about: 追加要望など問い合わせはこちら
title: 【issue_templates】(問い合わせ内容)
labels: 問い合わせ
assignees: ''
---
※本コメントおよび()のコメントは作成時に削除すること
## 問い合わせ概要
(○○に関する要望や質問)
### 問い合わせ詳細
(具体的な要望内容や質問の詳細)
### 問い合わせ背景
(なぜこの要望や質問が発生したか)
### 希望する対応
(どのような対応を希望するか)
### 優先度
(高/中/低)
### 期限・スケジュール
(対応希望時期があれば記載)
### 補足
(その他参考情報や補足事項)
---
## 問い合わせ元情報
### 問い合わせユーザ
(userName/userId/部署名)
### 問い合わせ日時
(yyyy/mm/dd hh:mm)
### 問い合わせ方法
(口頭/メール/電話/チャット)
### 問い合わせ内容
(元の問い合わせ内容を転記)
最後に...
Issueテンプレートを作った話に至る経緯をまとめておこうと思う。
以下の3つの要因で新規にisuueテンプレートを作成することとなった。
- 案件で新規リポジトリを立ち上げるにあたり、リポジトリの整備を行う必要が発生した。
- 旧リポジトリでもIssueテンプレートを使っていたが、見出しが悪く、使い勝手の悪さを感じることが多かった。(1年近く誰にも入力されることのない項目があったり...)
- 既設のリポジトリを使うことが多く、新規でテンプレート回りをこだわったことがなかったため、やってみたい気持ちがあった。
▼作業前に建てたタスク想定
1. 今回やりたいこと
- 開発者の入力・活用しやすいIssueテンプレートの構築
- Issueテンプレートをラベルごとに作成
- ラベルに合わせて自動で切り替える挙動を実装?(できるはず)
- 次回のために作成したテンプレートを自身のリポジトリに保存する
- アウトプットとしてQiitaにまとめる
2.想定工数(4時間)
ざっくり工数計算だが今回は以下の作業フローで進行することとする
想定作業 | 作業時間 | 作業詳細 |
---|---|---|
インプット | 1時間 | 実装方法の調査・理想のテンプレートの要素出し |
作業 | 2時間 | Issueテンプレートの作成・実装 |
アウトプット | 1時間 | リポジトリ作成・Qiita用の生地の執筆・公開 |
3.作業開始前の自分の知識
- .githubディレクトリを作成して、Issueテンプレート.md(命名規則はあやふや)を突っ込めばいいはず
- GitHubの公式ドキュメントに方法が書いてあった気がする
▼実績値
1. やりたいことに対する実作業
- 開発者の入力・活用しやすいIssueテンプレートの構築
- Issueテンプレートをラベルごとに作成
→yamlのテンプレートは情報をもっと圧縮しないと見にくいissueが出来上がる
改善タスクとして追加する - ラベルに合わせて自動で切り替える挙動を実装?(できるはず)
→md側にラベル付与を設定して、自動でラベルを付ける機能だった
- Issueテンプレートをラベルごとに作成
- 次回のために作成したテンプレートを自身のリポジトリに保存する
→達成 - アウトプットとしてQiitaにまとめる
→達成
2.実工数(3時間)
今回は以下の作業割合だった。
作業自体は情報が多かったため問題なく勧められた。
想定作業 | 作業時間 | 作業詳細 |
---|---|---|
インプット | 1時間 | 実装方法の調査・理想のテンプレートの要素出し |
作業 | 1時間 | Issueテンプレートの作成・実装 |
アウトプット | 1時間 | リポジトリ作成・Qiita用の生地の執筆・公開 |
3.作業後ナレッジ
- name属性は三文字以上で設定する必要がある
- ymlファイルを使ってフォームを作成できる
- プロジェクトとの連携も可能
参考にしたサイト・ページ
Issueテンプレート作成関連
Issueラベル関連