49
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アイレット株式会社Advent Calendar 2024

Day 13

JiraとGitHubを連携!PBIとSBIを自動でIssue化する方法

Last updated at Posted at 2024-12-12

はじめに ~なぜJiraとGitHubを連携させるのか?

プロジェクト管理ツールとしてJiraを使いながら、コードの管理やプルリクエストの追跡にはGitHubを使っているチームは少なくありません。しかし、JiraとGitHubを個別に管理していると、以下のような問題が発生します。

  • 2重管理による非効率さ
    • Jiraで課題を登録しても、GitHub上でも手動でIssueを作成する必要がある。これが続くと「結局どっちを見ればいいんだ?」という混乱が起こる
  • 情報の分断
    • どの課題がどのGitHub Issueに対応しているのか、いちいち手動でリンクする手間が増える。更新漏れが起きると、最新の進捗が見えなくなる
  • チーム全体の生産性の低下
    • 開発者がコーディングではなく「管理作業」に時間を取られることで、開発スピードが遅くなる

JiraとGitHub連携の全体像をざっくり解説!

本記事における定義

まずは、本記事で使用する用語の定義を整理します。JiraとGitHubでの用語が異なるため、一貫性を持たせるために以下のように対応付けを行います。

  • PBI: Jiraの課題(タスク)、 GitHubでのIssue
  • SBI: Jiraの課題(サブタスク)、GitHubのSub-Issue

全体の流れをざっくり説明

Jiraの機能であるJira Automationを活用し、課題タイプに応じてGitHub側にIssueまたはSub-Issueを自動で作成します。

必要なツールと環境設定

Jiraで必要なもの

  • Atlassian アカウント
    • Jiraを利用するための基本的なアカウント
  • GitHub Cloud を Jira に接続する

GitHubで必要なもの

Jira → GitHub Issue 自動化の手順

カスタムフィールドの追加

GitHub Issueの情報を取り込むためのカスタムフィールドをJiraの課題(タスクやサブタスク)用に作成します。

Jira Automationの全体構成

今回作成するJira Automationルールの完成形のイメージは以下のようになります。

Jira Automationのルール詳細

コンポーネント1: トリガー

  • トリガー内容
    • 課題の作成時

コンポーネント2: 条件

  • 条件内容
    • {{issue.issueType.name}} が Task と等しいかどうかを確認します
  • 動作概要
    • この条件は、課題の種類(Issue Type)が "Task" に該当するかを判定します
      条件が満たされた場合のみ、次のアクションに進みます。

コンポーネント3: アクション

  • アクション内容
    • GitHubリポジトリで新しいブランチを作成します
  • 動作概要
    • ブランチ名をfeature/{{issue.key}}の形式で作成します
    • {{issue.key}} はJira課題のキー(例: TASK-123)が自動的に挿入されます

コンポーネント4,8: アクション

  • アクション内容
    • GitHub APIを使用して、新しいIssueを作成するWebリクエストを送信します
  • 動作概要
    • Web リクエスト URL: https://api.github.com/repos/OWNER/REPO/issues
    • HTTP メソッド: POST
    • Web リクエスト本文: {"title": "【PBI】{{issue.summary}}"}
  • 補足
    • 後続の処理で、リクエストの応答を使うので以下のチェックボックスをONにします
      • 「この Web リクエストからの応答を受信するまで、後続のルール アクションの実行を遅延します」
      • 「リクエストの応答が正常でなかった場合 (200 応答でない場合) でも、ルールの実行を続行します」

コンポーネント5,9: 条件

  • 条件内容
    • Webリクエストの応答ステータスコードが 201 と等しいかどうかを確認します
  • 動作概要
    • この条件は、{{webResponse.status}}(WebリクエストのHTTPレスポンスコード)が 201 に該当するかを判定します

コンポーネント6,10: アクション

  • アクション内容
    • Jira課題のフィールドを編集し、GitHub Issueに関連する情報を追加します
  • 動作概要
    • 編集対象フィールド
      • GitHub Issue
      • GitHub Issue URL
    • 設定内容
      • Webリクエストで取得したGitHub Issueの情報(Issue番号とURL)をJira課題のフィールドに書き込みます

コンポーネント7: 条件

  • 条件内容
    • {{issue.issueType.name}} が サブタスク と等しいかどうかを確認します
  • 動作概要
    • この条件は、課題の種類(Issue Type)が "サブタスク" に該当するかを判定します
      条件が満たされた場合のみ、次のアクションに進みます。

コンポーネント11: アクション

  • アクション内容
    • GitHub APIを使用して、新しいIssueを作成するWebリクエストを送信します
  • 動作概要
    • Web リクエスト URL: https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/sub_issues
    • HTTP メソッド: POST
    • Web リクエスト本文: {"sub_issue_id": {{webResponse.body.id}}}
  • 補足
    • ISSUE_NUMBERにはタスクの「GitHub Issue」のフィールドを指定します
      • 例: {{issue.parent.customfield_10040}}

Jira Automationのルール実行結果

作成したJira Automationのルールを実際に試してみます。

  1. 課題(タスク)の作成します
    スクリーンショット 2024-12-11 18.15.24.png

  2. 自動でGithub Issuesが作成されます
    スクリーンショット 2024-12-11 18.16.04.png

  3. ブランチが自動で作成され、カスタムフィールド(GitHub Issue、GitHub Issue URL)にGitHub Issueの情報が登録されます
    スクリーンショット 2024-12-11 18.16.34.png

  4. 課題(サブタスク)の作成します
    スクリーンショット 2024-12-11 18.17.09.png

  5. GitHub Issueが自動で作成され、そのIssueを課題(タスク)のGitHub Issueにsub-issueとして紐付けされます
    スクリーンショット 2024-12-11 18.17.30.png

  6. カスタムフィールド(GitHub Issue、GitHub Issue URL)にGitHub Issueの情報が登録されます
    スクリーンショット 2024-12-11 18.18.14.png

おわりに

今回の記事では、Jira Automationを活用してJiraとGitHubを連携し、タスク管理を効率化する方法について解説しました。この設定を導入することで、手動での同期作業が不要になり、チーム全体の作業スピードや精度が向上します。
この記事が、日々のタスク管理をよりスムーズにする一助となれば幸いです。ぜひ試してみて、プロジェクトの効率化を実現してください!

49
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?