【Python自動化】アナリストチームのJIRA&CSV周りの仕事をPythonで自動化した話
やはりスクリプト言語であるPythonを使っていると、色々なタスクの自動化の仕事が回ってきます。
過去のにも自動化のことに少し触れましたが、
今回はもっと具体的な事例を交えながら書いていこうかと思います。
さっそく今回の案件です。
前提としてうちのチームはプロジェクト管理にJIRAを使っています。
www.atlassian.com
- 環境
- 1000弱のJIRAチケットのデータの入ったCSVの読み込み
- CSVファイルから特定のデータを持ったチケットデータを取得
- そのデータを元にJIRAチケットへのコメント+ラベルを追加
- Pythonに詳しくないアナリストの人たちが週一くらいの頻度で自分で実行できるようにユーザーフレンドリーに
- ログの設定
- 最終形態
環境
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にあげるものがない。ある意味無自覚の社畜だなぁと。
なのでこれからは少しずつ載せていこうかなと。詳細は伏せて。
少しでもアウトプットしないとね!
というわけで長々かつダラダラと、にも関わらず最後駆け足になってしまいましたが、少しでもどこかの誰か、もしくは将来の自分の役に立てばというメンタリティで書かせていただきました。
お付き合いいただき、ありがとうございます!
それでは
皆さんの良きPythonライフを祈っております!
では!!
*1:Python3 をインストールしてないアナリストたちの環境に合わせてあります。