新入社員におくるGitHubでのプロジェクト管理の初歩

4月に入り、新しく会社や部署に入った人も多いのではないでしょうか？
私が新入社員の頃に部署に配属されて困ったことは、
「どうやってプロジェクト管理されてるかわからない！作法ってあるの！？」
ということです。

そこで本投稿ではGitHubを用いたプロジェクト管理の初歩をご紹介します！

※ 内容はあくまでもプロジェクト管理の一例ですので、みなさまの状況にあわせてお使いください。

# Project
まずGitHubでプロジェクト管理をするためには、Projectを作成します。
このProjectはいわゆるカンバンです。
作成はタブのProjectsから「Create a project」を押します。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/208988/c90d2398-6f4d-e8e1-e5ce-e68f81fd0d33.png)

nameやdescriptionを入力して作成。(後から変更もできます)

![3.png](https://qiita-image-store.s3.amazonaws.com/0/208988/d53a9329-2153-b687-3ca0-5c6b93ca694e.png)

Projectを作成するとこのようなページが表示されます。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/208988/abd3d655-fed0-9023-0ccf-06563744a897.png)

「Add a column」ボタンからカラムを作成していきましょう。
はじめは以下のような構成をおすすめします。

![5.png](https://qiita-image-store.s3.amazonaws.com/0/208988/4f591acf-de45-43d6-a1f3-8f07542e3409.png)

まずは「To do」カラム。
このカラムにはやるべきタスクが配置されるようにします。
上の画像のようにAutomationをチェックしておくと、IssueとPull requestが新しく作られた、または再オープンしたとき自動的にこのカラムへ追加されます。

![6.png](https://qiita-image-store.s3.amazonaws.com/0/208988/4704abc9-a26b-9c5e-a761-b979111fe12b.png)

次に「Developing」「Reviewing」カラムを作成します。
ここにはそれぞれ開発中とレビュー中のタスクを配置します。

![7.png](https://qiita-image-store.s3.amazonaws.com/0/208988/75770256-bb59-d7b0-6422-c85b64abc572.png)

最後に「Done」カラムです。
こちらは終了したタスクが配置されます。
ここでも画像のようにAutomationを設定しておくと、IssueとPull requestがclose、またはマージされたときに自動でこちらに移動します。

Automationはすごく便利なので、設定しておくことをおすすめします。
くわしくは[About automation for project boards](https://help.github.com/articles/about-automation-for-project-boards/)をご覧ください。

以上でProject(カンバン)が完成しました。
ここへ後述するIssue(タスク)を貼っていきます。

![8.png](https://qiita-image-store.s3.amazonaws.com/0/208988/0fc10eb7-614e-3c20-1315-ea70934e6f8b.png)

# Milestone
MilestoneはIssue(タスク)をどの期日までに行うか管理するものです。
リリーススケジュールやアジャイルのスプリントと対応させるとよいでしょう。
IssueタブのMilestonesから作成することができます。

![9.png](https://qiita-image-store.s3.amazonaws.com/0/208988/a8c0c1fb-b8bc-3e68-5dc0-3d720de10e44.png)

![10.png](https://qiita-image-store.s3.amazonaws.com/0/208988/286ebeeb-45e6-59ae-5ef8-1f713668c7a6.png)

作成すると以下のようにどのぐらいのタスクがあり、進捗率はどのくらいかが把握できるようになります。

![11.png](https://qiita-image-store.s3.amazonaws.com/0/208988/64097b64-315f-7cdb-b5ee-1ed4b4928416.png)

# Issue
Issueはプロジェクトのタスクや課題を管理するためのものです。
新しい機能の相談や不具合の報告など使われ方は多岐に渡ります。(正直Issueの粒度は一番悩ましいとこです)
今回は以下のように作成していきます。

![12.png](https://qiita-image-store.s3.amazonaws.com/0/208988/528a85cb-15fd-9092-6f76-cfb6d9f0f854.png)

![13.png](https://qiita-image-store.s3.amazonaws.com/0/208988/f2b20cb5-6495-0b14-57fa-825e91268a89.png)

Issueのdescriptionにはどのようなタスク、課題、要件なのかということを詳細に記述しておくとよいです。
また、このIssueに紐づく粒度の小さいタスクはタスクリストとして記述しておきましょう。

右カラムではこのIssueに関連する情報を紐づけることができます。
AssigneesにはこのIssueを行う人を、ProjectsやMilestoneは先程作成したものを登録しておきましょう。
Labelsはbugやenhancementなど任意のラベリングをしておくと、Issueを管理しやすくなります。

作成したIssueは以下のように表示されます。
![14.png](https://qiita-image-store.s3.amazonaws.com/0/208988/07a7f0bf-c3cf-849b-7e03-f1be5d22df2e.png)

作成したIssueはProjectを紐づけておいたので、ProjectのTo doカラムにIssueが登録されています。(べんり！)

![15.png](https://qiita-image-store.s3.amazonaws.com/0/208988/1e27aa39-fd8a-dbf6-6c1c-0a6b4f791e42.png)

なにかタスクを開始する際には必ずProjectのIssueを移動させましょう。

![16.png](https://qiita-image-store.s3.amazonaws.com/0/208988/c64cfadf-702b-ff96-26cf-c803548bf851.png)

こうすることで、誰がどのIssue(タスク)に取り組んでいるかがひと目でわかるようになります。

なお、Issueのタスクリストの達成度がProject上に表示されるため、Issue内の進捗がどれぐらいなのか把握することができます。

![21.png](https://qiita-image-store.s3.amazonaws.com/0/208988/a4e7999f-c7f1-1939-bfb8-5ab592b010d1.png)

# Pull request
Pull requestは自分が実装したコードや行った変更を他者にレビューしてもらう機能です。

IssueをDevelopingに移動したら、開発、Commit、Pushしましょう。
Commitの粒度についてはこちらのスライドが非常に参考になります。
参考：[きれいなcommit, pull requestを知りたい/作りたい方のためのgit勉強会](https://speakerdeck.com/imaizume/zuo-ritaifang-falsetamefalsegitmian-qiang-hui)

それでは自分が開発したものをレビューしてもらうためにPull requestを作成します。

![17.png](https://qiita-image-store.s3.amazonaws.com/0/208988/c0a4144e-0ea8-bad6-33f4-6c8bfc1bc2d6.png)

![20.png](https://qiita-image-store.s3.amazonaws.com/0/208988/c2f96a68-47dd-07b9-746f-bc30099817fb.png)

Issueに詳しい要件などが書いてあれば、Pull requestのdescriptionにはIssueの番号を書いておくだけでよいとおもいます。
こうすることでIssueとPull requestが紐づきます。

右カラムのReviewersにはレビューして欲しい人を割り当てましょう。
また、右カラムのProjectsはこのPull requestをProject(カンバン)に載せたいときは登録するとよいでしょう。
一方で、このIssueだけ載っていればよく、Pull requestまで載せる必要ないのであれば、登録しないほうがよいです。

レビュー待ちのときはIssueをReviewingのカラムへ移すことをお忘れなく。

![22.png](https://qiita-image-store.s3.amazonaws.com/0/208988/4997b261-1204-43a3-d4ef-a0d08abd7070.png)

# CloseとReopen
すべてのタスクリストが完了したら、IssueをCloseしましょう。
該当Issueの最下部に「Close issue」ボタンがあります。

![24.png](https://qiita-image-store.s3.amazonaws.com/0/208988/69149220-5764-06d3-2662-af62b35add6c.png)

また、Pull requestのdescriptionやCommit messageに"fix"や"close"といったキーワードを入れると、マージされたときに一緒にIssueもCloseすることができます。
参考：[Closing issues using keywords](https://help.github.com/articles/closing-issues-using-keywords/)
CloseしたIssueはProjectのDoneカラムへと自動的に移動されています。(べんり！)

![25.png](https://qiita-image-store.s3.amazonaws.com/0/208988/8a9f8910-2f93-4ab2-4d00-c12bf4707bbb.png)

このIssueに紐づいていたMilestoneも更新されています。

![27.png](https://qiita-image-store.s3.amazonaws.com/0/208988/c4a5ef28-9e19-433b-e34a-2b004a95bcd0.png)

もし新たなタスクが生まれた場合は新しいIssueをつくる、もしくはIssueをReopenして管理していきましょう。
CloseしたIssue最下部のコメント欄に「Reopen issue」ボタンがあります。

![26.png](https://qiita-image-store.s3.amazonaws.com/0/208988/e0bee6ca-94fa-a46a-4a97-620b9499389c.png)

ReopenしたIssueはDoneからTo doカラムへと自動的に移されます。

![28.png](https://qiita-image-store.s3.amazonaws.com/0/208988/09842166-343b-3744-b738-9ba8ab1fbac4.png)

これにてタスク作成から終了までの一連の流れは終了です！

# おわり
冒頭にも述べましたが、本投稿内容はあくまでもプロジェクト管理の一例ですので、みなさまの状況にあわせてお使いください。
一番大切なことはIssue, Pull request, Commitなどの粒度をどうするか、どのようにラベルを活用するかなど、プロジェクト内で認識をあわせておくことだと思います。
新入社員の方は先輩にガンガン質問するとよいでしょう！

こういう管理の方法もあるよ！など気軽にコメントいただけると幸いです。
それではプロジェクト管理を円滑にし、よい開発生活を！