定常タスクを自動化したお話 JIRAにサブタスクを作成
藤本 拓也
定常タスクを自動化したお話 Atlassian-JIRAのサブタスクの作成
ホットペッパービューティーで開発を担当している藤本です。
今回はABテストの案件管理に利用している「JIRA」に関するお話です。
ホットペッパービューティーで実施するABテストは、1案件に対して1課題を作成しています。
そして、各担当者のタスクは課題に紐づくサブタスクを作成して、質問やメモをやり取りしたり、
作業記録を付けたりしています。
イメージはこんな感じです。
これまではこのサブタスクを毎回人力で作成して(もらって)いたのですが……。
ちりも積もればエベレスト。貴重な時間は、人間にしかできないお仕事に振り向けましょう!
というわけで自動化に取り組んでみました。
目指したこと
今回はこの3点が実現できるようにしました。
- JIRAに新しい課題が作成されたら、自動でサブタスクが追加されるようにしたい
- 作成するサブタスクの名称は、親課題から継承したい
- 作成されたサブタスクの報告者と担当者も一緒に設定したい
用意したもの
- JIRA(この文章を書いている時の社内は、6.4.11を使用)
- JIRA REST APIのドキュメント(最新版)
- HipChat
どうやった?
もともとHipChat上に常駐させていたHubotに、機能を追加しました。
1) JIRAに新しい課題が作成されたらHipChatに通知されるように設定
2) HubotでHipChatのメッセージを拾って、APIでJIRAにアクセスする
拾う条件は、こんな感じにしています。
- JIRAユーザーの投稿であること
- 正規表現で"HPB-[0-9]+“の形式を含むこと
- Reported byの文言を含むこと
3) Hubotで該当するメッセージを拾ったら、課題IDをもとにGETで情報を取得(参考:API)
1
2
3
4
curl -X GET \
-H "Content-Type: application/json" \
-H "'Basic ' + base64encode('JIRAアカウントのメールアドレス:JIRAアカウントのパスワード')" \
https://jira.example.com/rest/api/2/issue/HPB-XXXX
取得例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"expand": "renderedFields,names,schema,transitions,operations,editmeta,changelog",
"id": "XXXXXX",
"self": "https://jira.example.com/rest/api/2/issue/XXXXXX",
"key": "HPB-XXXX",
"fields": {
"summary": "ABテスト案件課題名",
"issuetype": {
"self": "https://jira.example.com/rest/api/2/issuetype/10415",
"id": "10415",
"description": "ABテスト",
"iconUrl": "https://jira.example.com/secure/viewavatar?size=xsmall&avatarId=12441&avatarType=issuetype",
"name": "ABテスト",
"subtask": false
},
"project": {
"self": "https://jira.example.com/rest/api/2/project/10707",
"id": "10707",
"key": "HPB",
}
...省略...
}
}
4) 取得したJSONを解析して、タスク名を基準に、必要なサブタスクが揃っているか確認
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
...省略...
"fields": {
"subtasks": [
{
"id":"XXXXXX",
"key":"HPB-XXXX",
"self":"https://jira.example.com/rest/api/2/issue/XXXXXX",
"fields":{
"summary":"VISUAL_ABテスト案件課題名",
}
},
{
"id":"191991",
"key":"HPB-XXXX",
"self":"https://jira.example.com/rest/api/2/issue/XXXXXX",
"fields":{
"summary":"FE_ABテスト案件課題名",
}
}
...省略...
]
}
}
5) サブタスクが足りない場合は、PUTで追加(参考:API)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
curl -X PUT \
-H "Content-Type: application/json" \
-H "'Basic ' + base64encode('JIRAアカウントのメールアドレス:JIRAアカウントのパスワード')" \
-d "{\
'fields': { \
'project' : { 'key': 'HPB' }, \ # プロジェクトの識別子
'parent' : { 'key': 'HPB-XXXX' },\ # 親の課題ID
'summary' : '接頭辞_' + '課題のタイトル', \
'description': '課題の説明', \
'issuetype' : { 'id': '5' }, \ # サブタスクに該当する課題タイプのID
'reporter' : { 'name' : '報告者に設定したい人の名前' }, \
'assignee' : { 'name' : '担当者に設定したい人の名前' } \
} \
} \
https://jira.example.com/rest/api/2/issue/HPB-XXXX
6) HTTPステータスと追加したサブタスクの情報が返却される
1
2
3
4
5
6
HTTP: 200
Body: {
"id": "191990", # 全プロジェクト通して連番
"key": "HPB-YYYY", # プロジェクトの識別子+プロジェクト内の連番
"self": "https://jira.example.com/rest/api/2/issue/YYYYYY" # そのままAPIでアクセスできるURL
}
7) 取得したレスポンス等をもとに、必要に応じて成否をHipChatへ通知する
今はこのように通知しています。
どうなった?
無事にサブタスクを生成することに成功しました。
おわりに
サブタスクの作成には、プラグインで実現する方法もあるようなのですが、
- ランニングコストがかからない!(作成とメンテの時間は掛かるけど軽微)
- 自由にカスタマイズできる!
ということから、今回はChat+Botを使った方式でやりました。
今後もJIRA、HipChatを使った自動化を進めていこうと思います。
ホットペッパービューティーは、いつでもヘア・ネイル・まつげ・リラク・エステサロンをご予約いただけるサービスです。
スマートフォンやパソコンからぜひご利用ください!(宣伝)