JiraとGithubの連携 -チケットステータスとブランチをAutomationで同期する-



# はじめに
Jiraのチケット管理機能[^3]を使うことでチーム開発のタスク管理を効率化することができますが[^1][^2]，Githubなどの[SCM](https://developer.mozilla.org/ja/docs/Glossary/SCM)との自動連携は追加設定が必要です．今回はこの過程と実際の開発環境での使用方法を解説します．

Jiraのチケット管理機能とGithubの連携によって以下のような恩恵が得られると考えています．
![スクリーンショット 2024-07-25 3.44.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/af66ec75-6728-f260-693c-5a85d5d6529f.png)

### 背景
　私は自律走行ロボットのチーム開発を行なっています．チームではJiraを用いたタスク管理を行なっていました．
　Jiraだけでもタスク管理はできていたのですが，①タスクの粒度が曖昧で，チケットと実装機能の対応関係が判然としないため，②打ち合わせで作成したタスク表の内容と実装の粒度が一致しない．その結果，③Jiraのタスクボードと実装の進捗が一見してもわからない（実情と不一致）．
　最終的にJiraの利用が面倒になってしまう．という問題が発生しました．

　解決策として「1ブランチにおいて1機能を追加実装する」というGitの原則をJiraでのタスク管理に適応させることで，チケットが持つべきタスクの粒度を明確にすることが考えられます．
　その手段として今回の**JiraとGithubの連携**を行います．
 
（[Git ワークフロー](https://zenn.dev/goldsaya/articles/956175c23489e2)や[Gitのブランチモデルについて](https://qiita.com/y-okudera/items/0b57830d2f56d1d51692)はこちら）

[^1]:[Jiraの活用事例　～課題管理編～ #jira - Qiita](https://qiita.com/ikedahideya/items/b21c535a7db0aa03395c)
[^2]:[【6分で解説】タスク管理ツール「Jira」の使い方【基本操作4選】 - YouTube](https://www.youtube.com/watch?v=V7YQzeQ2UuM)
[^3]:[Jiraなどの「チケット」ってなあに？プロジェクト管理・タスク管理ツールも解説！ #IT企業転職あるある](https://note.ricksoft.jp/n/n9489c1b00de7)
によると本来「チケット」ではなく「課題」と呼ぶそうです🙇


![スクリーンショット 2024-07-25 1.53.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/e3edd358-9f6d-5bd0-b391-b17ded52fac3.png)




### 0.事前準備　Jiraと Githubの連携
Jiraのアカウントと，Githubのアカウントおよび作成済みのリポジトリは必須です．どちらも管理者権限が必須です．Jiraでもプロジェクトがすでに作成されていることを前提として進めます．

これらが用意できたら，[GitHub Cloud を Jira に接続する |アトラシアン サポート](https://support.atlassian.com/ja/jira-cloud-administration/docs/integrate-with-github-cloud/)を参考にしてJiraとGithubを接続します．

# 1. 自動化の手順

## 1.1 ワークフローの設定

右側のリストから**プロジェクト設定**→**課題タイプ**をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/7a866721-556c-f056-7155-3903dcbe52e2.png" width=20%>

さらに右上の**ワークフローの編集**をクリックして，チケットのステータスを変更します．

![スクリーンショット 2024-07-25 23.09.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/09ce43e4-2a2f-466e-9411-e6c4ebd32710.png)



ワークフローの編集方法は他の記事に任せます[^4]．はじめに述べたように，**チケットはGithubのブランチに紐付ける**ため，チケットのライフタイムは，**ブランチを作成→開発→プルリクエストの作成→マージ**に合わせたいです．

チケットのステータスは，
1.ブランチを切る:DOTO → WIP　（Work In Progress）
2.開発する:WIP
3.プルリクエスト:WIP → REVIEW
4.実装内容がマージされる:REVIEW → DONE
としてワークフローを編集しました．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/677dfc34-d03d-0d7d-2ce7-dd8070f6eba2.png)


[^4]:[【最終更新日2023年12月】Jira（クラウド版）のワークフローをテンプレからカスタマイズしてみた - リックソフトブログ](https://www.ricksoft.jp/blog/articles/001458.html)





## 1.2 自動化の設定
Automationを設定することで，Githubでブランチを作成したり，プルリクを出す度にチケットステータスが自動で変更されるようになります．

1.1と同様の右側のリストから**プロジェクト設定**→**自動化**をクリック
→右上の**ルールを作成**をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/fe14e365-ebf3-043e-a32c-196549e6ae6c.png)

ここで先ほど定義したワークフローの繊維に合わせて
1.ステータスがTODOの時にブランチが作成されたらステータスをWIPに移動する
2.ステータスがWIPの時にブランチが作成されたらステータスをREVIEWに移動する
3.ステータスがREVIEWの時にブランチが作成されたらステータスをDONEに移動する
の3つの自動化ルールを作成していきます．

※詳しいやり方→[Jira 自動化ルールを作成して編集する | アトラシアン サポート](https://support.atlassian.com/ja/cloud-automation/docs/create-and-edit-jira-automation-rules/)

#### ルール1: ステータスがTODOの時にブランチが作成されたらステータスをWIPに移動する
![スクリーンショット 2024-07-25 23.36.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/11068295-69aa-4c49-e106-0c1910fa519d.png)

#### ルール2: ステータスがWIPの時にブランチが作成されたらステータスをREVIEWに移動する
![スクリーンショット 2024-07-25 23.38.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/98308538-92d7-fc09-b12b-24d963439b2b.png)

#### ルール3: ステータスがREVIEWの時にブランチが作成されたらステータスをDONEに移動する
![スクリーンショット 2024-07-25 23.39.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/3a17f75b-32fa-ded5-184e-c4711163413e.png)

ここまで設定を行えば，自動化が完了です．次に実際どのように使うのか見ていきましょう．


# 2. 使い方
自動化の設定が完了したので，開発フローの中でどのように使うのか見ていきましょう．
## 2.1 チケットからブランチを作成する：TODO→WIP
打ち合わせなどで自分のタスクが決定し，Jiraに自分のタスクが割り当てられているとします．リモートリポジトリはすでに存在していて，チケットに対応する機能の開発を始めます．
まずチケットを開いてブランチを作成しましょう．

チケットを開いて，
![スクリーンショット 2024-08-09 20.52.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/c09821b9-272d-8edd-b64f-c6de5e3a3464.png)

ブランチの作成をクリック
![スクリーンショット 2024-08-09 20.53.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/88029fe2-117b-cd44-b371-bbea424c9b67.png)

すると以下のような画面に遷移するので，対象のリポジトリを選び，branch nameを決めます．branch nameは任意の命名ではなく，チケットのIDを含む物でなくてはなりません．今回は``ARCDEV-20``という文字列を含むものにする必要があるので，文字列の後に，``EdgeDetection``を追加して開発内容を明示します．
![スクリーンショット 2024-08-09 20.54.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/a0f96daf-6ea7-3de0-ab9a-075e3b498d74.png)

するとその名前でブランチが作成されます． Githubの画面でも確認できますね．
あとは開発を行なって，最終的にはプルリクエストを作成することになります．
**この段階で，タイムラインではチケットのステータスがWIP（開発中）に切り替わっていることがわかります**．
![スクリーンショット 2024-08-09 20.58.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/a738ea43-1252-8260-6a17-24559fa37e78.png)

TODOからWIPに変わっている！！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/556ddbb2-0039-67c0-7ab9-e7726c0e69d6.png" width=50%>

## 2.2 開発する：WIP
ガリガリ開発しましょう！！！

## 2.3 プルリクエストを作成する：WIP→REVIEW
さて，実装が済んだらメインブランチなどにプルリクエストを出します．こちらは Githubで作業します．

![スクリーンショット 2024-08-09 21.11.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/346db42d-3dbf-146b-ef4e-af0f9869bd69.png)

プルリクを出すと，チケットのステータスが``レビュー``へと自動的に変わっていますね．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/d3e68092-a1c1-861b-4805-4a0d2694c9ca.png" width=50%>


## 2.4 マージする:REVIEW→DONE


さらにレビューが完了して，マージされると，チケットのステータスは``完了``へ遷移しました．これで実装が完了し，開発フローの工程が終了しました！！
　この流れでタスク割り当てと実装を行うことによって，チーム内での会議の効率から，個々の開発時の作業を効率化できるのではないでしょうか．
![スクリーンショット 2024-08-09 21.14.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665619/7d0c1a4a-6123-780c-75c2-17e1df71f0f2.png)



# 3.終わりに
今回は僕たちのチームの開発フローに合わせて自動化を行っています．1チームの工夫に過ぎないのでチームごとに開発フローやタスクの粒度に合わせて自動化フローを決めると良いと思います．

#### やったこと
チケットのステータス遷移のオートメーションの利用により，Githubを用いた開発フローを効率化した．このフレームワークを確立し，それに従ってチケット割り当てを行うことで，タスク割の粒度も実装単位に整理される．

#### タスクの粒度について
　チケット1つはあるリポジトリで行っている開発の1機能に対応させる必要があります．タスクをメンバーに振り分ける時，チケットに対応する追加機能が複数だったり，ひとつ未満だったりすることは避けるように工夫する必要があります．
　一方タスク割り当てに無駄に制約がかかってしまう場合もあります．一つの参考にしていただけると幸いです．