JiraとGitHubのコメントを全自動で双方向同期する方法
はじめまして、がっちゃん(@gatchan0807)といいます。
今回はタスク管理ツールJira(チケット)とソースコード管理ツールGitHub(Issue)を自動的に双方向連携する方法を書いていきます。
今回使うツールはこちら。
Unito(ゆにーと)です。
これを導入することで、ほぼリアルタイムにJira チケット⇔GitHub Issueのコメント欄のやり取りやチケット・Issue概要欄が同期され、施策の内容を知るためにJiraを見たり、GitHubを見たり複数タブを開いてごちゃごちゃになる悲惨な事故を防ぐことが出来ます。
Jira ・GitHub Issue間でコメントが同期されている様子
Jira・GitHub Issue間で施策の内容が同期されている様子
(※GitHubのスクリーンショットは2020/06/04撮影)
一応、公式ドキュメントはこちら(英語なので読むのは大変かと思うので↓で解説します)
これを使うことで出来ること
・コメントの自動同期
・チケット / Issueのフィールド・説明部分の自動同期
・Issue→チケット (はたまた) チケット→Issueへの双方向内容コピー
その結果得られるもの
・Jira ⇔ GitHub Issue ⇔ GitHub Pull Requestのシームレスな連携
・複数のGitHubリポジトリにまたがる施策(例えばWebとアプリどちら側にも関わる施策など)のスケジュール・ステータスを一箇所で管理・確認
・統一のテンプレートでの施策に係る情報の管理
使うための前提条件
・Jiraにアカウントを持っており、Jira内アプリをインストールできる権限を持っている or その権限を持っている人と一緒に作業が出来る
・GitHubのアカウントを持っていて、GitHubアプリをインストールできる
・Unitoのアカウントを持っている
やることイメージ
料金プラン・1年近くUnitoを社内運用している人間のTips等は記事の最後に書いています!
設定手順(ここからはPCで実際に確認しながら読まれる状態を想定して書かれております)
①JiraにUnito接続用のアプリをインストールする
Jira用のマーケットプレース(Atlassian Marketplace)から下記のSync Jira to Work Tools with Unito(UnitoとJiraのコネクター)をインストールする
※過去はWebhookで接続していたのですが、今はUnito公式が提供しているMarketplace Appでお手軽に設定できるようになっています
②GitHubとの接続用のアカウントにUnito接続用のアプリをインストールする
※Jiraと同様に過去はGitHub個人のアカウントにアプリケーションを設定して、そのアカウント経由でUnitoが同期実行をしていたのですがこちら側もアップデートがかかり、Marketplace AppをGitHub Organizationに設定することで、Syncの設定を共有出来るようになりました
③コネクターをUnito側から認識させる
③-a. Unitoにログインし、ヘッダー部分のConnectorsからコネクター一覧を表示する
③-b-1. Jiraの設定 : JiraのURLを下記に入力する
URLの内、ドメイン部分だけを入力してください
https://[最初に設定したサブドメイン].atlassian.net/
例:
https://gatchan0807.atlassian.net/
③-b-2 Jiraの設定 : JiraコネクターがJiraへ接続することを許可する
※注意点として、このタイミングでログインして認証したJiraユーザー(アカウント)でJiraのプロジェクトに対してチケットの追加やコメントを行うため、「同じ人が何件も投稿している」ということが起きる可能性あります。
そのため、できればJiraに「Unito連携用アカウント」のようなものを作成してログインした方が良いです
③-b-3 Jiraの設定 : 完了
③-c-1 GitHubの設定 : GitHub App連携済みのGitHubアカウントにログインした状態だと、下記のような画面が表示される
③-c-2 GitHubの設定 : 接続したいリポジトリがあるOrganization or アカウントを選択
※こちらも同様に、このタイミングでログインして認証したGitHubユーザー(アカウント)でGitHubのリポジトリに対してチケットの追加やコメントを行うため、「同じ人が何件も投稿している」ということが起きる可能性あります。
そのため、できればGitHubにも「Unito連携用アカウント」のようなものを作成して共通アカウントとしてログインできるようにした方が良いです
③-c-3 GitHubの設定 : 完了
④Sync(同期)を作成してUnitoから接続するJiraプロジェクトとGitHubリポジトリを選択する
④-1 コネクターと対象のプロジェクト・リポジトリを選択する
下部のSync directionは双方向・単方向を選択する事ができる
④-2 フィルターとステータスのトラッキングを設定する
Add filtersで特定の条件に一致したものを同期するように設定できる
Jira側のフィルター(一部)
・特定のラベルが設定された場合に同期する(同期しない)
・特定のユーザーがアサインされている場合に同期する
・特定のステータスの間(複数ステータス選択可)だけ同期する
GitHub側のフィルター(一部)
・特定のラベルが設定された場合に同期する(同期しない)
・特定のユーザーがアサインされている場合に同期する
・Pull Requestだけ同期する(特定のIssue Typeだけ同期する)
Configure task status and progressでステータスの変更を同期するように設定できる。
チケットが「完了」ステータスになったタイミングでIssueを「Close」する。など。詳細なステータスの設定はホバーした時に表示される歯車マークから変更できる
④-3 マッピングするフィールド・同期の方向を選択する
JiraからGitHubへの同期の場合、初期設定されているフィールド以外は多くのフィールドをGitHub側が受け付けられないため Description footerに連携する形になります。
フィールドごとに同期できる方向が詳しくまとまっているのはこちら
https://guide.unito.io/en/articles/3478437-jira-github-integration
④-4 最後にSync開始時の設定を選択してSyncを作成する
Test ModeはSync作成後にFilter条件に一致するチケット・Issueが作成された場合にだけ同期するため、テスト時に最適です
(過去に作成された条件に一致するチケット・Issueも合わせて一気に同期されてしまって既存のフローをしっちゃかめっちゃかにしてしまう事件を防ぐことができます)
テスト完了後、Offにすることをおすすめします
Auto Syncは文字通り、自動的に同期してくれる機能(これをOnにしていない場合、Unitoの管理画面からSync nowボタンを押すことで同期されます)
これですべての同期設定は完了です!
最後に料金プランだけ書いておくと、下記のような感じです
今回紹介した機能は(カスタムフィールドの連携を除いて)Personalプランで使うことが出来ますので、大体月額2000円ぐらい(年間払いだと月額1100円ぐらい)になります。
自動同期は10分に1回、Sync数5個までですが、初期導入時のチェックには問題ないシステム感です
まずスモールに試して、他のリポジトリ・プロジェクト間も自動同期したい!となってきたら、プランをアップグレードしていくのが良さそうです。
うまく自動同期を設計することで、ビジネスサイドとエンジニアサイドのツールを変えて改めて学習コスト・フロー整備コストを払うこと無く、ディレクターの負荷軽減や開発スピードの向上が見込めるツールですので、月2000円分の人件費は簡単にペイできるものだと思います!
ここからはUnitoを実際に使っている人間からのTips
自分が働いている会社ではUnitoを使ってJiraプロジェクトとGitHubリポジトリをかなりの数自動同期しています。(確認したら31syncs運用してました)
その中で、このあたり工夫してるな!と言える部分をいくつかPickupして書いていきます
①Jira側のラベルで連携先のリポジトリを選択できるようにする
社内では横断したひとつの組織が、複数のサービスを管理・施策の運用などを行っており、組織ごとにJiraのプロジェクトを立てているため、特定のリポジトリ指定でチケット・Issue同期ができる必要があったためにラベルを使ってリポジトリを指定するように設計しました
これにより、組織内で担当している施策のステータスや情報をサービス横断で一元管理が可能になっています(Jiraのカンバンを使ってステータスやアサイニーの可視化にも役立っています)
②GitHub側からもIssueに対してラベルを設定することでJiraプロジェクトを指定してチケットにコピーすることができる
Jira(Unito)を導入する前までは、GitHubのIssueや個別のスプレッドシート(Excel)、Trelloなどでタスク管理していました。
なかでも、GitHubのIssueでのタスク管理はマイルストーン管理やPull Requestとの連携・管理のしやすさもあって、まだ組織・サービスによっては主流で使われています。
ただ、横断の組織側から見ると、ステータスが一括で確認できないため、横断組織所属メンバーのタスク状況がJiraから見えなくなってしまいます。
それを防ぐために、GitHubで作成したIssueに横断組織所属メンバーがアサインされた場合、ラベルを設定することで特定のJiraプロジェクトに同じ内容をチケットとして簡単にコピーすることができるようにしました。(基本的にはGitHub IssueのDescription部分とコメントをJiraに蓄えることができるようにするため)
最初は特定のユーザー指定を条件に、同期するようなフィルターを考えていたのですが、Jiraプロジェクト側も複数あり、選択の必要があることがあったため、GitHub側もラベルで指定できるように設計しました。
Unitoを使う時の注意(失敗談)
便利なUnitoですが、一年も使っていると失敗も起きるもので、今回は一つだけやらかして、実際に使う時に発生するかも?な失敗をここに書いて、記事の締めとしたいと思います。
1チケットが5分後に3チケットに増殖する事件
Unitoを導入して、JiraとGitHubを同期し、利便性が上がった!とルンルン気分で仕事をしていた時に、ふと、自分が書いたチケットが別の組織用のJiraプロジェクトにあったり、明らかに別組織用のJiraチケットが自分がいる組織のチケットとして追加されていました。
最初のうちは、誰かが間違えて作ってしまったのかな?と、気にしていなかったのですが、よくよく見てみるとIssueにコピーしたすべてのチケットが共通されているではありませんか!
焦って原因特定をはじめました。
結果、原因はJiraから作成されたIssueに同じGitHub Labelを設定していたため、組織B / 組織C用のUnito Syncがコピーしないといけないものだ!と勘違いし、GitHubのIssueの内容をそのままコピーしてしまっていたことでした。
そのため、GitHub側のIssueに設定するラベルも組織ごとに切り替えるように設定し、事なきをえました。
まとめ
久しぶりの記事でつい使い方や特徴などなど全部盛りで長々と書いてしまいましたが、少しでもUnitoの便利さが伝わっていれば嬉しいです!
これを使ってぜひ、煩雑になってしまったビジネスサイド・エンジニアサイドのやり取りやタスク管理を少しでも楽にしてみてください!
また、よければTwitterのフォローもよろしくおねがいします!
これからアウトプットを積極的にやっていきますので、フォローしていただいて、明日から使えるお役立ち情報を見つけていただければと!