GitHubで極力全てを完結させる

みなさまは、開発現場においてGitHubはどれほど有効活用できていますか？
特に、非エンジニアであるメンバーをうまくGitHubに巻き込めていますか？

筆者は以下のようになっているプロジェクトを経験しました。

#### タスク管理
- Trello
- Notion
- その他カンバンが使えるツール


#### ドキュメント管理
- Notion
- Google Workspace
- Confluence
- その他エクセルやワードが格納できたりメモ書きができるツール

#### コード管理
- GitHub

みなまさも上記のような構成は経験したことがあるのではないのでしょうか？

上記の構成では、3点問題があります。

1. GitHubのタスクがissueベースでできない（Notionはまだそこまでの連携ができないため）
1. issueで管理をしたくなった場合、タスク管理ツールとGitHubで二重起票が必要になってしまう
1. 進捗確認を細かくしたい場合、かなり手間がかかる

ただし、上記の問題は「GitHubはコードの管理だけを行う」と振り切って仕舞えば多少解決しますが、やはり実際に作業をするGitHubからその他の管理が分離するので煩わしさは残ると思います。

そこで、全てGitHubで管理するための活用方法を紹介します。

## タスク管理
タスク管理は基本GitHub Projectsの機能を利用します。
なお、用意するプロジェクトは2つ用意します。

1つは非エンジニアのメンバーがアイディアや要望を記載するためのものです。
もう1つは直接リポジトリに紐付けた具体的なステータス管理をするためのものです。

### アイディア・要望用プロジェクト

プロジェクトの設定画面では、以下のようにカスタムフィールドの設定をすることができます。
![スクリーンショット 2024-12-15 10.47.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/735195/29726eeb-6b4e-2a4a-bc4a-c71cc03a2c57.png)

| 項目 | 内容 |
|:-:|:-:|
| Status  | バックログ・開発中・デプロイ待ちなどのステータスの管理 |
| DesignDocリンク | 主となるドキュメントのリンク |
| タスク開始日 | エンジニア側にボールが渡り、スタートした日 |
| リリース予定・希望 | ビジネス都合によるゴール地点 |
| 関連URL | その他参考リンク |
| Slackリンク | タスクの背景となるスレッドのリンク |

GitHubプロジェクトに起票する時、必ずしもissueとして起票する必要はなく、いわゆるDraft的に起票することができます。

![スクリーンショット 2024-12-15 10.56.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/735195/d945f0d1-3bcc-5beb-be13-ac9b807d8cbc.png)

そうして起票したタスクは、メニュー右下の`Convert to issue`によりリポジトリのissueとしてパスすることができます。


![スクリーンショット 2024-12-15 10.57.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/735195/b373c450-475e-de21-43e1-7293febbe3f1.png)


これだけでも、タスク管理ツールのサードパーティーの欠点であったGithubとリンクできないという課題を解消してくれるので導入価値はあると思っています。

### 開発側プロジェクト

次に、リポジトリに紐づいている側のプロジェクトの設定になります。

![スクリーンショット 2024-12-15 11.14.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/735195/d6e219cd-b493-9972-8482-6a7218ae723b.png)

GitHub ProjectsにはEpic機能がまだありません。
出るところにはベータ版で出ている？っぽいのですが2024年12月現在では確認できませんでした。

https://github.com/github/roadmap/issues/837

しかしEpic機能は便利なものです。これをどう実現するかについて試行錯誤しないといけないのですが、例えばマイルストーン機能を用いるという手段もありますね。

実際にロードマップビューでもマイルストーンでグループ分けができます。

![スクリーンショット 2024-12-15 11.20.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/735195/422d7127-ca94-f8df-303a-a66b3fc67a62.png)

しかし、今回はカスタムフィールドで対応したいと思います。
Epicフィールドには以下のようなものを設定します。

- バグ修正
- リファクタリング
- 機能改修
- XXX（機能名）

上位の3つに関しては、Epicで持つほどでもない些細なものに対するグループ分けとして扱います。
それ以外については大きくEpic管理するために使用します。


## ドキュメント管理

ドキュメントについての手段は以下の記事で紹介しています。

https://qiita.com/kurogoma939/items/dcc2cdc2f4309ace8b51

しかし、GitHubはマークダウンという縛りがあるため完全に全てのドキュメントを集約することは苦しいです。
個人的には、Google Workspaceはドキュメント同士のリンクも見やすいUIなのでおすすめです。

## コード管理

GitHubでコードのコミットの作業をする中でもひと手間加えると管理がしやすくなります。

### 1. コミットをissueと紐付ける

コミットをする際、コミットメッセージの中に`#12`のようにissueの番号を紐づけることで、
issue上でタスクに対してどんな作業がされたかわかります。

### prefixをつける

prefixをつけることで大枠でどういった作業をしたかがグループ分けしやすいです。

https://qiita.com/muranakar/items/20a7927ffa63a5ca226a


また、いつからかわかりませんがprefixがコミット履歴でハイライトされるようになりました。

![スクリーンショット 2024-12-15 12.00.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/735195/625e01e0-b782-ed1f-a1ba-2ed7eb9c42ca.png)

以上です！

作業をする中でなかなかエンジニアの状況をマネジメント・営業メンバーが把握するのは難しいと思います。
また、GitHubについても導入ストレスはあるかと思いますが、ツールが集約することで効率は良くなると思います！
どんなツールも慣れなのでぜひチャレンジしてみてください！