初めてのJira 〜その２：CSVを用いてIssue作成を自動化しよう〜

##はじめに
前回の記事
[初めてのJira 〜その１：Project作成からSlack連携まで〜](https://qiita.com/AIM-Z/items/7a312a6424b33c9810fa)
の続編。

前回の記事の終盤でIssue（課題）を作成したが、あれを一つ一つJira上でちまちまと作成するのは骨が折れる。そこで今回はCSVをImportしてIssueを自動生成する方法をまとめる。

やること自体は単純なのだが、初期設定のままではうまくいかないことが多く苦労したので同じことで苦しんでいる人はぜひ参考にしてほしい。

##できるようになること
こんな感じで、サブタスクがぶら下がったStoryをCSVから自動生成できるようになる。
また、StoryのStoryPoints（以下SP）を、サブタスクのSPの合計になるような自動化も作成する。
![スクリーンショット 2021-05-08 23.27.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/e3c5af8d-366f-1067-b133-cc79827db846.png)

##ハンズオン

基本的にはこの公式Docを参考にして進めている（読みにくいけど）
[CSVからのデータのインポート](https://ja.confluence.atlassian.com/adminjiracloud/importing-data-from-csv-776636762.html)
### Issue作成のためのCSVを作成

下図の赤線を引いた部分が課題フィールドの一例
このそれぞれのフィールドに値を流すCSVフォーマットを作成する
![スクリーンショット 2021-05-08 23.59.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/64c4091b-db65-3359-f5d5-a5ce91d20aea.png)

今回は下記のようなtest.csvを作成した。自動生成したいフィールドに応じて列は追加してほしい。
CSVの1行目の見出しはなんでもいいが、Jiraのフィールドと名前を合わせておいた方がわかりやすい。
また日本語だと文字コードによっては文字化けするので英語名が無難。

親Issue、もしくは子Issueを持たない単一のIssueはIssueIDにIDを記載。
<font color="Red">IssueIDはCSV内で一意にすること。</font>

子として親にぶら下げたいIssueは<font color="Red">IssueIDを空白にして、ParentIDを、親にしたいIssueのIssueIDにする</font>

<font color="Red">最終行以降に罫線のみ引かれた空行などが存在するとエラーになるので、ExcelなどでテーブルからCSVに変換する場合は注意</font>

下図の例ではFirstIssueがSecond〜FourthIssueの親となる
また、CSVの構造上、親のSP計算をCSV上で行うのは複雑になるためJira側で自動化を作成する。
そのため、今回は親IssueのSPは空白にし、子IssueにのみSPを記入する。
![スクリーンショット 2021-05-09 0.14.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/16e5edcf-65c2-44e1-98cb-1fcb0bb16da2.png)

###課題レイアウトの変更
デフォルトでは課題に表示されないフィールドもあるので、チームの文化に合わせて課題のレイアウトをアレンジしておくと良い

左タブのプロジェクト設定　＞　課題レイアウト　から編集できる
から変更できる。下図は今回実施した一例。
![スクリーンショット 2021-05-09 1.15.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/2cc91864-39f5-cc24-5f83-100f0b743305.png)

###カスタムフィールドの設定変更
課題をCSVからインポートする際に、CSVの列をどのJiraフィールドに対応させるかを設定する場面がある。
Jiraフィールドをプルダウンから選択するのだが、初期設定ではSPがプルダウンに現れなかった。
このように、自分が操作したいフィールドが表示されないことがよくあるため、フィールドの設定を変更する。

左タブのプロジェクト設定　＞　フィールド
右のペンマークボタンをタップすると各フィールドの設定が編集できる。
![スクリーンショット 2021-05-09 1.13.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/baf97d47-b732-c17b-0351-2695cb7378ee.png)

StoryPointを検索し、「画面」をタップ
![スクリーンショット 2021-05-09 1.20.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/3ab38650-fcb4-ed42-d2db-e9fbb19f5889.png)

ここで、プルダウンに表示されてほしい画面にチェックを入れて変更を反映する。
今回は全部チェックを入れた。
![スクリーンショット 2021-05-09 1.20.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/9b1df254-cc3d-5926-f36d-43b20710388a.png)

### 親のSPの値を子のSPの合計にする自動化を作成
英語が苦手じゃない方は元の記事をどうぞ。
[How can you automatically sum the story points of all subtasks?](https://community.atlassian.com/t5/Marketplace-Apps-Integrations/How-can-you-automatically-sum-the-story-points-of-all-subtasks/qaq-p/863364)

自動化は　プロジェクト設定　＞　自動化から作成

トリガーはSPが変更されたとき
![スクリーンショット 2021-05-09 1.27.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/603bc21e-55bc-6e4a-25cb-0f410db72ff5.png)

発動条件はそのIssueに親が存在するとき
![スクリーンショット 2021-05-09 1.27.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/96b4ae05-317e-6bac-bf86-bd3bd3056026.png)

アクションの実行は親に対して行う
![スクリーンショット 2021-05-09 1.27.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/7dd84e4d-595e-0e40-8e81-33e89fa68b3d.png)

まずは変更前の親のSPを変数に格納しておく
![スクリーンショット 2021-05-09 1.27.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/15e49974-37da-aeb1-9379-1c2d37a3007b.png)

親のSPを子のSPの合計にする
![スクリーンショット 2021-05-09 1.27.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/cbd94090-fcb2-8b9d-504d-b23934be0d77.png)

変更があったことを通知する。（これは任意）
前回の記事のようにSlackに通知もできる
![スクリーンショット 2021-05-09 1.27.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/d37c4fe3-43e4-59a2-eaa9-200b7e7f0745.png)

###CSVをインポートする
準備が整ったのでCSVからインポートしていく。
左タブの課題をクリックし、右の三点リードから「CSVから課題をインポート」を選択
![スクリーンショット 2021-05-09 1.39.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/2507d447-f0ac-60a8-9d51-27b40e948241.png)

ここで作成したCSVを選択
![スクリーンショット 2021-05-09 1.40.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/f7878ef7-ea24-d08a-e584-3422cec573a0.png)

インポート先のプロジェクトやその他設定を選んで次へ
![スクリーンショット 2021-05-09 1.41.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/48f3e816-8068-a50e-3640-d5b50c7f5315.png)

CSVのフィールドとJiraフィールドの対応付けを行う。デフォルトの設定ではこのJiraフィールドのプルダウンにSPが表示されなかったため、あらかじめフィールドの設定を変更しておいたのである。
適切にマッピングを行い右のチェックを入れたら次へ
![スクリーンショット 2021-05-09 1.43.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/1e144e1d-24e8-8bb4-d6de-7cf6fe4cfd02.png)

続いて値のマッピングを行う
![スクリーンショット 2021-05-09 1.46.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/a1f9a483-174f-3029-1728-b447022c7772.png)

要約や説明のようにテキストで自由に入力できるJiraフィールドの場合は特に気にしなくても良いが、
<font color="Red">課題タイプや担当者などJira側で入力のフォーマットがある程度決まっているものは適切にマッピングを行わないとインポートが失敗するので注意が必要。</font>
![スクリーンショット 2021-05-09 1.48.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/0acb1141-f66d-778e-3d6f-48e7b2be9a57.png)

ここまでできたら「インポートの開始」をタップ。心配な人は「検証」で確認してから行うと良い。
成功すると以下のような画面になるので、「作成された課題をチェックします」を選択
![スクリーンショット 2021-05-09 1.51.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/efe1a350-cd4c-f00d-7174-1aa2671cd2bc.png)

無事課題が作られた。
![スクリーンショット 2021-05-09 1.52.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/d1936041-3702-0d2c-72e1-e0c9ef68470a.png)

課題の親子関係もしっかり再現されており、親のSPも子のSPの合計になっている（これは自動化のおかげ）
![スクリーンショット 2021-05-09 1.52.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712635/46614fb6-737e-098e-3052-439c87b631d6.png)

###終わりに
次回以降何を書くかは未定だが、外部ツールとの連携など便利な方法を調べていこうと思う。

ここまで読んでいただきありがとうございました。
この記事が何かのお役に立てれば幸いです。