gitのissueってなんだ

<!-- gitのissueってなんだ -->

※この記事は[Udon Advent Calendar 2024 - Adventar](https://adventar.org/calendars/10764)の5日目の記事です。

## はじめに

gitを使って開発するということはよくあるんですが、issueを使ったことがあまりありませんでした。

issueを使うと、作業の進捗管理がしやすくなるほか、ブランチを多用することになるのでgitの機能を使いこなすための良い練習となります。

というわけで、issueを使った開発の手順をまとめてみました。

## gitのissueとは

issueとは「議題」とか「問題」という意味です。その名の通り、開発の途中に生じた問題などを定義し、それを解決する作業領域を作ることができる機能となっています。

例えば既存のプロジェクトで何か新しい機能を追加したいとしましょう。masterブランチで作業するのもありですが、それだと既存の仕様に影響が出て、取り返しのつかないことになってしまう可能性があります。稼働中のプロジェクトならなおさらです。

そこで、issueを使うことによって既存の機能に影響を与えない領域で、新機能追加のための作業を行うことができます。

[このページ](https://docs.github.com/ja/issues/tracking-your-work-with-issues/about-issues)によると、

> リポジトリに問題を作成して、作業の計画、議論、追跡を行うことができます。 issue は迅速に作成でき、柔軟性があり、さまざまな方法で使用できます。 issue は、バグ レポート、新機能やアイデア、およびチームに書き留めたり、話し合ったりするために必要なものなどを追跡できます。 sub-issue を追加することで作業をさらに細分化し、実行する作業の完全な階層を簡単に閲覧することもできます。

ということらしいです。

## issueの作り方・使い方

具体的にissueのうれしさを理解するには、使ってみることが一番です。

今回は、VSCodeの拡張機能、[GitHub Pull Request](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github)を使ってissueを作成してみます。事前にこの拡張機能をインストールしておきましょう。

また、例として[このリポジトリ](https://github.com/Gitudon/WebAudio-API)を使ってみます。

### issueの作成

リポジトリのディレクトリを開き、サイドバーからGitHub Pull Requestを選択すると、ISSUESのタブに以下のようにディレクトリ名が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468660/d6a3aa71-a522-5d2e-8d2a-c50ac16cc409.png)

+をクリックすると、issueの作成画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468660/1bffc837-980d-10eb-41f8-61b752b1cf42.png)

最初の行にissueのタイトルを入力します。その後、各行に以下のことを書き込んでいきます。

- Assignees: 作業を担当する人を指定
- Labels: issueにラベルをつける(例: bug, enhancement, question)
- Milestone: issueをマイルストーンに紐づける
- Projects: issueをプロジェクトに紐づける

チーム開発の場合、作業を担当する人を指定することで役割分担をすることができます。各メンバーに役割を振るといった意味でも、issueは便利な機能ということとなります。

最後の2つについてですが、別途マイルストーンやプロジェクトを作成しておく必要があります。今回は特に何もしません。

その後、Markdown記法を使いながらissueの内容を書き込みます。チェックボックスがあると便利だと思います。

できたら、右上のチェックボタンをクリックし、issueを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468660/19b18057-5bcf-b042-1e2e-955a752a33f6.png)

このように、ISSUESタブに新規issueが表示されます。

### ブランチの切り方

issueを選択すると、→が表示されるので、そこをクリックします。そうすると、issueに対応するブランチが作成され、そこに移動します。

ブランチを移動したら、そこが作業領域となります。ここで行った作業は、マージしない限りmasterブランチには反映されません。

その後、issueで定義した作業を行っていきます。

作業が進むたび、コミットを行いましょう。コミットメッセージには、以下のようにissue番号を含めると便利です。

```bash
git commit -m "issue #1: 作業内容"
```

初回のプッシュでは、リモートにもブランチを作成することとなります。

```bash
git push origin [branch_name]
```

### issueのクローズ

作業が終わったとき、issueをクローズします。コミット後、以下のようにプルリクエストを作成します。これもGitHub Pull Requestを使って行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468660/a7e9ddcd-631f-73db-5116-7b6313d5a035.png)

Createしたら、そのままVSCodeの画面でプルリクエストを承認・マージします。今回は自分だけでやっているので、承認とマージは自分で行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468660/7f3d4e06-7cea-94a7-753b-bbeb4673525b.png)

終わったら、「Delete branch」をクリックしてブランチを削除します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468660/9faa406f-22cc-a5c8-d609-e2112130c1ce.png)

これによって、issueがクローズされ、ブランチが削除されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468660/74d7cdb0-4143-b82f-ca0e-f1e8de0c2567.png)

「Source Control」を確認すると、このようにブランチがマージされ、作業が完了したことがわかります。

### 間違えたとき

いろいろ間違えた場合は、ブランチを消せばなかったことにできます。以下のコマンドをgitのディレクトリで実行してください。

```bash
git branch -d [branch_name]
```

また、リモートリポジトリにも反映させたい場合は以下のコマンドを実行してください。

```bash
git push origin :[branch_name]
```

あとはリモート上でissueを削除すれば、初期状態に戻せます。

## 終わりに

今回はissueの使い方をまとめてみました。今回は実際に運用してみましたが、実際はチーム開発などで使うので、より複雑な運用をすることとなります。

個人開発でも、issueを積極的に使うことによって効率的に進捗管理ができたり、チーム開発の練習ができたりします。

みなさんもぜひissueを使ってみてください。

今日の記事は以上となります。また明日の記事でお会いしましょう。

## 参考文献

[GitHubのissueを活用した個人アプリの開発手順を書いてみた #個人開発 - Qiita](https://qiita.com/tkmd35/items/9612c03dc60b1c516969)