JIRA REST API issueを使ってタスク作成してみる

JIRA

JIRA Cloud無料版利用

  • 最大 10 人のチームでは Jira Software は永久に無料
  • 規模拡大中のチーム向け Jira Software Standard
  • Jira Software Premium によって複数チーム全体で拡張
  • エンタープライズ全体でつながって加速
  • Jira Align によるエンタープライズ アジリティ

JIRA software以外に、Confluenceも無料で使える。

しかも利用申請時に、クレジットカード不要です。

10名以内なら無料プランを使えるが、10名超えるとStandardだと月額900円/1ユーザー

JIRAでよく使う機能

  • JQLでフィルタ作成
  • ダッシュボード作成
  • ガジェット利用
  • スプレッドシートで一括編集
  • Confluenceと連動
  • REST APIで一括チケット起票/操作
  • WBSガントチャート

課題タイプデフォルト一覧

プロジェクト>設定>課題タイプ

JIRAフィルタ

親タスクのすべての子チケットをフィルタする

issue in linkedIssues( 親チケット番号, 子チケット)
参考リンク:https://www.ricksoft.jp/qa/questions/26050994/answers/26051002

サブタスクが未完了の状態に親チケットをクローズ

issueFunction in parentsOf ("issuetype = subtask AND status != closed") AND status = closed

サブタスクが完了の状態に親チケットを未クローズ

issueFunction in parentsOf ("issuetype = subtask AND status = closed") AND status != closed

参考リンク:https://www.ricksoft.jp/qa/questions/14516354/サブタスクが全て完了になったら連動して親タスクを完了したい

親タスクフィルタからサブタスクをフィルタする方法

HowTo: Filter to show sub tasks of a filtered list of parent tasks

参考リンク: https://ja.confluence.atlassian.com/jirakb/howto-filter-to-show-sub-tasks-of-a-filtered-list-of-parent-tasks-351109518.html

あるフィルタ結果のタスクが親として、サブタスクを全部フィルタする方法

  • 親タスクA
    • 子タスクB1
      • サブタスクC1
      • サブタスクC2
      • サブタスクC3
    • 子タスクB2
      • サブタスクD1
      • サブタスクD2
      • サブタスクD3
    • 子タスクB3
      • サブタスクE1
      • サブタスクE2
      • サブタスクE3
issue in subtaskIssuesFromFilter("ParentIssueFilter")

子タスクB1, B2, B3のフィルタ方法は以下となる。

issue in linkedIssues( 親タスクAの番号, 子チケット)

サブタスクC1, C2, C3, D1, D2, D3, E1, E2, E3のフィルタ方法は以下となる。

issue in subtaskIssuesFromFilter("Filter Name")
Filter Name = issue in linkedIssues( 親タスクAの番号, 子チケット)

親タスクフィルタから子タスクをフィルタする方法

  • 親タスクA
    • 子タスクB1
      • 子タスクC1
      • 子タスクC2
      • 子タスクC3
    • 子タスクB2
      • 子タスクD1
      • 子タスクD2
      • 子タスクD3
    • 子タスクB3
      • 子タスクE1
      • 子タスクE2
      • 子タスクE3

子タスクC1, C2, C3, D1, D2, D3, E1, E2, E3のフィルタ方法は以下となる。

issue in linkedIssuesFromFilter("Filter Name", 子チケット)
Filter Name = issue in linkedIssues( 親タスクAの番号, 子チケット)

参考サイト:addonrock.atlassian.net/wiki/spaces/KB/pages/557163/JQL+Functions

JIRA WBSガントチャート表示条件4000件を超えた場合の対策

WBSガントチャートに4000件表示っていう上限がありますので、上限を超えた場合は個別のフィルタを作成して、WBSガントチャートに導入する必要があり、階層を含めてたフィルタを作成できるか検討に当たって、一つの親チケット番号だけでその階層の下にある全チケットフィルタできる方法があるか検討する必要になります。

issueFunction in linkedIssueOfRecursive("issue = チケット番号", 子チケット)

上記のフィルタだと親チケット以下のリンクしてあるすべてのチケットが複数回帰してフィルタできる方法です。ただし、サブタスクはフィルタ対象外となる。もしサブタスクの起票があれば、条件追加となる。

APIコマンド

APIコマンドでタスクチケットの作成を検証し、レビュー指摘など大量起票を想定し、一括起票ツール開発する前に、事前にAPI疎通する。

POST /rest/api/3/issue

curl --request POST \
  --url 'https://your-domain.atlassian.net/rest/api/3/issue' \
  --user 'email@example.com:<api_token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
  "update": {},
  "fields": {
    "summary": "Main order flow broken",
    "parent": {
      "key": "PROJ-123"
    },
    "issuetype": {
      "id": "10000"
    },
    "components": [
      {
        "id": "10000"
      }
    ],
    "customfield_20000": "06/Jul/19 3:25 PM",
    "customfield_40000": {
      "type": "doc",
      "version": 1,
      "content": [
        {
          "type": "paragraph",
          "content": [
            {
              "text": "Occurs on all orders",
              "type": "text"
            }
          ]
        }
      ]
    },
    "customfield_70000": [
      "jira-administrators",
      "jira-software-users"
    ],
    "project": {
      "id": "10000"
    },
    "description": {
      "type": "doc",
      "version": 1,
      "content": [
        {
          "type": "paragraph",
          "content": [
            {
              "text": "Order entry fails when selecting supplier.",
              "type": "text"
            }
          ]
        }
      ]
    },
    "reporter": {
      "id": "5b10a2844c20165700ede21g"
    },
    "fixVersions": [
      {
        "id": "10001"
      }
    ],
    "customfield_10000": "09/Jun/19",
    "priority": {
      "id": "20000"
    },
    "labels": [
      "bugfix",
      "blitz_test"
    ],
    "timetracking": {
      "remainingEstimate": "5",
      "originalEstimate": "10"
    },
    "customfield_30000": [
      "10000",
      "10002"
    ],
    "customfield_80000": {
      "value": "red"
    },
    "security": {
      "id": "10000"
    },
    "environment": {
      "type": "doc",
      "version": 1,
      "content": [
        {
          "type": "paragraph",
          "content": [
            {
              "text": "UAT",
              "type": "text"
            }
          ]
        }
      ]
    },
    "versions": [
      {
        "id": "10000"
      }
    ],
    "duedate": "2019-05-11",
    "customfield_60000": "jira-software-users",
    "customfield_50000": {
      "type": "doc",
      "version": 1,
      "content": [
        {
          "type": "paragraph",
          "content": [
            {
              "text": "Could impact day-to-day work.",
              "type": "text"
            }
          ]
        }
      ]
    },
    "assignee": {
      "id": "5b109f2e9729b51b54dc274d"
    }
  }
}'

Talend API Tester Chrome拡張機能追加

Talend API Tester – Free Edition Chrome拡張機能追加

JIRA REST API POST送信

METHOD

POSTを選択

URL

https://{ホスト名}.atlassian.net/rest/api/3/issue

HEADERS

  • X-Atlassian-Token:no-check
  • Authorization:Basic {mail}:{token}
  • Content-Type:application/json
  • Accept:application/json
  • User-Agent:dummy

Atlassianの以下のページからAPI Tokenを作成.
Atlassian API Tokenの作成

BODY

{
	"update": {},
	"fields": {
		"project": {
			"key": "TRAIN"
		},
		"summary": "REST ye merry gentlemen.",
		"description": null,
		"issuetype": {
			"name": "バグ"
		},
      "assignee": {
			"accountId": "624ee7ee699649006aeb6e51"
      }
      
	}
}

accountIdなどの情報はAPIからデータ取得できる

  • https://{ホスト名}.atlassian.net/rest/api/3/issue/createmeta
  • https://{ホスト名}.atlassian.net/rest/api/3/issue/{issueIdOrKey}

APIから取得した情報をJSON整形し、必要な情報だけTalend API Testerに入力する。

Online JSON整形

Online JSON整形

整形したJSONファイルをtxt形式のエディタに張り付け、利用したい情報を探す

SENDの実行結果

Response 201成功

VBAでJIRAチケットを作成してみる

JSON変換ライブラリ

VBA-JSON

ダウンロードして、解凍する。
ダウンロード先 → https://id.atlassian.com/manage-profile/security/api-tokens

VBA-JSON-2.3.1\JsonConverter.basをExcel開発モードのVBエディタのモジュールに導入する。

Json変換モジュールを導入後に、下記のサンプルコードを参照し、コーディングする。

Dim Json As Object
Set Json = JsonConverter.ParseJson("{""a"":123,""b"":[1,2,3,4],""c"":{""d"":456}}")

' Json("a") -> 123
' Json("b")(2) -> 2
' Json("c")("d") -> 456
Json("c")("e") = 789

Debug.Print JsonConverter.ConvertToJson(Json)
' -> "{"a":123,"b":[1,2,3,4],"c":{"d":456,"e":789}}"

Debug.Print JsonConverter.ConvertToJson(Json, Whitespace:=2)
' -> "{
'       "a": 123,
'       "b": [
'         1,
'         2,
'         3,
'         4
'       ],
'       "c": {
'         "d": 456,
'         "e": 789  
'       }
'     }"

チケット発行コード

JIRAチケット作成用のメインコード

Function g_CreateIssue_Jira(ByVal strIssueJSON As String) As Boolean
    
    Dim JiraCreateIssue As Object
    Set JiraCreateIssue = CreateObject("msxml2.xmlhttp")

    '// JIRAタスクを作成する
    With JiraCreateIssue
        .Open "POST", g_JiraLoginUrl & "rest/api/3/issue", False
        .setRequestheader "Content-Type", "application/json"
        .setRequestheader "Accept", "application/json"
        .setRequestheader "Authorization", "Basic " & strBase64
        .setRequestheader "X-Atlassian-Token", "no-check"
        .setRequestheader "User-Agent", "dummy"
        .send strIssueJSON
        sRestAntwort = .responseText
        sStatus = .Status & " | " & .statusText
    End With
    
    If JiraCreateIssue.Status = 201 Then
        g_CreateIssue_Jira = True
    Else
        g_CreateIssue_Jira = False
    End If

End Function

strIssueJSONデータ作成用のコード

Sub Main()
     '---------------------------------
     ' リクエストパラメタ生成
     '---------------------------------
     Dim JsonObject As Object
     Set JsonObject = New Dictionary
     
     Dim strIssueJSON As String
     Dim resultFlag As Boolean
    
     JsonObject.Add "update", New Dictionary
    
     JsonObject.Add "fields", New Dictionary
     JsonObject("fields").Add "project", New Dictionary
     JsonObject("fields").Item("project").Add "key", "TRAIN"
     
     JsonObject("fields").Add "summary", "2022/6/9 REST API TEST"
     JsonObject("fields").Add "description", Null
     
     JsonObject("fields").Add "issuetype", New Dictionary
     JsonObject("fields").Item("issuetype").Add "name", "バグ"
     
     JsonObject("fields").Add "assignee", New Dictionary
     JsonObject("fields").Item("assignee").Add "accountId", "624ee7ee699649006aeb6e51"
        
    strIssueJSON = JsonConverter.ConvertToJson(JsonObject, Whitespace:=2)
    Debug.Print strIssueJSON
    
    resultFlag = g_CreateIssue_Jira(strIssueJSON)
    'Debug.Print resultFlag
End Sub

Debug.Print strIssueJSON ログ出力してみた

{
  "update": {
  },
  "fields": {
    "project": {
      "key": "TRAIN"
    },
    "summary": "2022/6/9 REST API TEST",
    "description": null,
    "issuetype": {
      "name": "\u30D0\u30B0"
    },
    "assignee": {
      "accountId": "624ee7ee699649006aeb6e51"
    }
  }
}

JIRAチケット作成結果を確認する

課題タイプ:バグのチケットを作成されていることを確認した。

参考サイト

  • https://qiita.com/ktr1211/items/c16cb4f99f91b998af46
  • https://qiita.com/AIM-Z/items/b11b9d6797fb0a7585f4
  • JIRA Cloud Reference

コメント

タイトルとURLをコピーしました