「アウトプットと言う名の備忘録@Texas」

日本じゃない何処かの脳筋パイソニスタによる何かしらの走り書き

【Python自動化】アナリストチームのJIRA&CSV周りの仕事をPythonで自動化した話

f:id:At_sashimi_py:20190727145046p:plain
チームのアナリストの仕事自動化スクリプト

やはりスクリプト言語であるPythonを使っていると、色々なタスクの自動化の仕事が回ってきます。
過去のにも自動化のことに少し触れましたが、

atsashimipy.hatenablog.com

今回はもっと具体的な事例を交えながら書いていこうかと思います。

さっそく今回の案件です。
前提としてうちのチームはプロジェクト管理にJIRAを使っています。
www.atlassian.com

環境

MacBook Pro (macOS Mojave)
Python 2.7
なるべく標準ライブラリだけで済ませます。
Install はJIRAのみ。
*1


とりあえずマニュアルでちまちまやっていたら時間がいくらあっても足りないので、
Pythonさんの力を借りましょう。

1000弱のJIRAチケットのデータの入ったCSVの読み込み

何はともあれまずは csvモジュール をインポート

import csv

13.1. csv --- CSV ファイルの読み書き — Python 2.7.16 ドキュメント

with open(csv_input) as f:
    reader = csv.reader(f)

CSVファイルから特定のデータを持ったチケットデータを取得

今回のCSVファイルは一番最初のコラムにプロジェクトキーそして5番目にアナリストの欲するキーワード、そのキーワードが存在する時だけ、プロジェクトキー、とキーワードを取得したい。なのでこのように書きました。

with open(csv_input) as f:
    reader = csv.reader(f)
    csv_list = [[row[0], row[4]] for row in reader if row[4] != '']

こうすることで[プロジェクトキー,キーワード]のリストが返ってきます。
これはあとでForループで回します。

そのデータを元にJIRAチケットへのコメント+ラベルを追加

PythonでJIRAを扱う為、JIRAのパッケージをインストール。

pip install jira

1. Installation — jira-python 2.0.1.0rc3.dev22 documentation
ここでJIRAにログインかつアップデート。

from jira import JIRA
from jira.client import JIRA

# jira login
options = {'server': 'your Jira URL'}
usr = 'username'
pas = 'password'

jira = JIRA(options=options, basic_auth=(usr, pas))
# print("Login!!")

def update_JIRA(your_issue_key, your_keyword):
    ticket = jira.issue(your_issue_key)
    message = "your keyword is {0}".format(
        (your_keyword))
    jira.add_comment((your_issue_key), message)
    ticket.fields.labels.append('your_tag')
    ticket.update(fields={"labels": ticket.fields.labels})
    update_message = '{0}: {1}\n'.format((your_issue_key), (your_keyword))

    return update_message

Pythonに詳しくないアナリストの人たちが週一くらいの頻度で自分で実行できるようにユーザーフレンドリーに

raw_inputでインタラクティブにアナリストの人たちがCSVファイルをドラッグ&ドロップできるように(自分、優しい笑)

csv_input = raw_input(
    '>> Type your CSV file name or Drag and drop the CSV file here: ')
csv_input = csv_input.split('/')[-1].strip()
print('>> Working on ' + csv_input)

ログの設定

Logging HOWTO — Python 2.7.16 ドキュメント

import logging
logging_message = ''
logging.basicConfig(filename="JIRA_CSV_updated.log",
                    level=logging.INFO,
                    format='%(asctime)s: \n%(message)s')

ロギングレベルはINFO
filenameで設定した"JIRA_CSV_updated.log"が生成され、

logging.info(logging_message)

のたびにログメッセージが足されていきます。(便利)

最終形態

その後、デバッグやらなんやらし、アナリスト達の意見を取り入れつつまとめ、アナリストチームに納品しました。
ソースコード例はこちら

github.com


いやー最近気づいたのですが、書くコードがほぼ全て会社関連のもので全然Githubにあげるものがない。ある意味無自覚の社畜だなぁと。
なのでこれからは少しずつ載せていこうかなと。詳細は伏せて。

少しでもアウトプットしないとね!

というわけで長々かつダラダラと、にも関わらず最後駆け足になってしまいましたが、少しでもどこかの誰か、もしくは将来の自分の役に立てばというメンタリティで書かせていただきました。

お付き合いいただき、ありがとうございます!

それでは

皆さんの良きPythonライフを祈っております!

では!!

*1:Python3 をインストールしてないアナリストたちの環境に合わせてあります。