0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

20250927_GitHubのissueテンプレートを作成・設定したからまとめておく

Posted at

:writing_hand: Issueテンプレート作成する

作成手順

  1. GitHubの対象リポジトリを開く
    (今回はissue_templatesというリポジトリに設定する)

  2. Setting > General に遷移する
    image_01.png

  3. Features > Issues > "Set up templates"をクリック
    image_02.png

  4. "Add template: select▼"からテンプレートの用途を選んで作成する
    image_03.png

  5. "Propose changes"から変更をコミットする

以上で作成完了。
.giothub/ISSUE_TEMPLATE配下にテンプレート用の.mdファイルが作成されていることを確認しよう。

Issueフォームを使った使ったテンプレート作成について

入力項目に選択肢を用意するなど自由記述ではない方が都合がよい場合は、Issueフォームを使って実装するとよい。
この場合は、YAMLのフォーム定義ファイルを作成して.giothub/ISSUE_TEMPLATE配下に格納する。
詳細は、以下のリンクより公式のドキュメントを確認してほしい。

Issue フォームの構文

予備情報

3種類追加した後のIssues作成画面は以下の通りで選択肢としてどのテンプレートを使うか選べるようになっている。
image_04.png

※テンプレート用の.mdファイルのname:が選択肢名になっているため、選択肢の名称を変更したかったらファイル名を変更するとよい。

:label: プロジェクトのタスク管理用を行うため、Issueのラベルを選定する

目的:Issueを分類してタスク管理に利用できるようなラベル構成とする

GitHub既存のラベルは種類が多いうえに、discriptionまで英語で記載されており、日本人向けではないと考える。
→明確な分類を開発者全員で共有できる状態が好ましい。

Issueとして明確にしたい情報

Issueとして明確にしたい情報として以下が挙げられる。

  1. 優先度
  2. 分類
  3. ステータス
  4. 工数

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 問い合わせ 追加要望など改善の必要な問い合わせ

※この際、日本人だけで開発を行う場合、ラベルなどは日本語を使うことを推奨する。

オープンソースにする想定がある、海外のメンバーと開発を行うなどでない場合は英語を使うメリットが少ない。
コミットプレフィックスなどは英語の方が短縮できる(冗長になりにくい)面を考えて許容できるが、基本的に日本人のみの場合は日本語を使ってほしい。

:pencil: 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)

### 問い合わせ方法
(口頭/メール/電話/チャット)

### 問い合わせ内容
(元の問い合わせ内容を転記)

:books: 最後に...

Issueテンプレートを作った話に至る経緯をまとめておこうと思う。

以下の3つの要因で新規にisuueテンプレートを作成することとなった。

  • 案件で新規リポジトリを立ち上げるにあたり、リポジトリの整備を行う必要が発生した。
  • 旧リポジトリでもIssueテンプレートを使っていたが、見出しが悪く、使い勝手の悪さを感じることが多かった。(1年近く誰にも入力されることのない項目があったり...)
  • 既設のリポジトリを使うことが多く、新規でテンプレート回りをこだわったことがなかったため、やってみたい気持ちがあった。

▼作業前に建てたタスク想定

1. 今回やりたいこと

  1. 開発者の入力・活用しやすいIssueテンプレートの構築
    • Issueテンプレートをラベルごとに作成
    • ラベルに合わせて自動で切り替える挙動を実装?(できるはず)
  2. 次回のために作成したテンプレートを自身のリポジトリに保存する
  3. アウトプットとしてQiitaにまとめる

2.想定工数(4時間)

ざっくり工数計算だが今回は以下の作業フローで進行することとする

想定作業 作業時間 作業詳細
インプット 1時間 実装方法の調査・理想のテンプレートの要素出し
作業 2時間 Issueテンプレートの作成・実装
アウトプット 1時間 リポジトリ作成・Qiita用の生地の執筆・公開

3.作業開始前の自分の知識

  • .githubディレクトリを作成して、Issueテンプレート.md(命名規則はあやふや)を突っ込めばいいはず
  • GitHubの公式ドキュメントに方法が書いてあった気がする

▼実績値

1. やりたいことに対する実作業

  1. 開発者の入力・活用しやすいIssueテンプレートの構築
    • Issueテンプレートをラベルごとに作成
      →yamlのテンプレートは情報をもっと圧縮しないと見にくいissueが出来上がる
      改善タスクとして追加する
    • ラベルに合わせて自動で切り替える挙動を実装?(できるはず)
      →md側にラベル付与を設定して、自動でラベルを付ける機能だった
  2. 次回のために作成したテンプレートを自身のリポジトリに保存する
    →達成
  3. アウトプットとしてQiitaにまとめる
    →達成

2.実工数(3時間)

今回は以下の作業割合だった。
作業自体は情報が多かったため問題なく勧められた。

想定作業 作業時間 作業詳細
インプット 1時間 実装方法の調査・理想のテンプレートの要素出し
作業 1時間 Issueテンプレートの作成・実装
アウトプット 1時間 リポジトリ作成・Qiita用の生地の執筆・公開

3.作業後ナレッジ

  • name属性は三文字以上で設定する必要がある
  • ymlファイルを使ってフォームを作成できる
  • プロジェクトとの連携も可能

参考にしたサイト・ページ

Issueテンプレート作成関連

Issueラベル関連

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?