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
- 子タスクB1
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
- 子タスクB1
子タスク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疎通する。
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整形
整形したJSONファイルをtxt形式のエディタに張り付け、利用したい情報を探す
SENDの実行結果
Response 201成功
VBAでJIRAチケットを作成してみる
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
コメント