はじめに
この記事では、実績工数のJiraとExcelの二重管理から脱却する3つのアプローチを紹介します。
課題整理
まず、なぜJiraとExcelの二重管理が発生するのか整理します。
よくある運用パターン
1. Jiraでタスク管理・時間記録(Time Tracking)
↓
2. 週次/月次でJiraから実績工数をコピペ
↓
3. Excelで集計・グラフ化
何が問題なのか
- 手作業によるコピペミス: 数値の転記ミスが発生しやすい
- 時間のムダ: 毎週/毎月、同じ作業を繰り返す
- データの不整合: JiraとExcelでデータが乖離する可能性
- リアルタイム性の欠如: 最新の状況を把握するのに時間がかかる
- 属人化: Excelファイルの数式や構造を理解している人が限られる
特に、複数プロジェクトを横断した集計や、特定期間のデータ抽出を行う際に、この問題は顕著になります。
アプローチ1: Jira標準機能の活用
最もシンプルなアプローチは、Jiraの標準機能を最大限活用することです。
Jiraのレポート機能
Jiraには、以下のようなレポート機能が標準で用意されています。
Time Tracking Report
ユーザーごと、プロジェクトごとの工数を可視化できます。
プロジェクト設定 → レポート → Time Tracking Report
表示できる情報:
- ユーザーごとの作業時間
- 課題ごとの見積もり時間 vs 実績時間
- 期間指定によるフィルタリング
カスタムダッシュボード
ダッシュボードにガジェットを配置することで、リアルタイムな工数状況を可視化できます。
活用できるガジェット:
- Pie Chart: プロジェクトごとの工数割合
- Two Dimensional Filter Statistics: ユーザー×プロジェクトのマトリクス
- Average Age Chart: タスクの滞留時間
実装例
ダッシュボードの作成手順:
1. ダッシュボード → 新規作成
2. ガジェットを追加 → "Filter Results"を選択
3. JQLでフィルタを作成:
project = PROJECT_KEY
AND worklogDate >= startOfMonth()
AND worklogDate <= endOfMonth()
4. グルーピング: assignee (担当者別)
5. 統計タイプ: Time Spent (消費時間)
メリットとデメリット
メリット:
- 追加コストなし(標準機能のため)
- 学習コスト低い
- データの一元管理
デメリット:
- Excelほど自由なレイアウト・集計ができない
- 複雑な集計やクロス集計は困難
- エクスポート形式が限定的
こんな現場におすすめ
- Jiraの利用に慣れているチーム
- シンプルな工数集計で十分な場合
- まずは小さく始めたい場合
アプローチ2: Jira API + 自動化ツール
もう少し柔軟な集計や、既存のワークフローとの統合が必要な場合は、Jira APIを活用します。
Jira REST APIの基本
Jira Cloud/Data Centerには、豊富なREST APIが用意されています。
認証方法
# Basic認証(Jira Cloud)
curl -u email@example.com:api_token \
https://your-domain.atlassian.net/rest/api/3/myself
# Personal Access Token(Jira Data Center)
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-domain.com/rest/api/2/myself
工数データの取得
特定期間のworklogを取得するAPIエンドポイント:
GET /rest/api/3/issue/{issueIdOrKey}/worklog
Python実装例
JiraのworklogデータをGoogle Sheetsに自動転記するスクリプト例:
import requests
from datetime import datetime, timedelta
import gspread
from oauth2client.service_account import ServiceAccountCredentials
# Jira設定
JIRA_URL = "https://your-domain.atlassian.net"
JIRA_EMAIL = "your-email@example.com"
JIRA_API_TOKEN = "your-api-token"
# 今月のworklogを取得
def get_monthly_worklogs(project_key):
jql = f'project = {project_key} AND worklogDate >= startOfMonth()'
# JQLで課題を検索
search_url = f"{JIRA_URL}/rest/api/3/search"
headers = {"Accept": "application/json"}
query = {
"jql": jql,
"fields": "worklog,summary,assignee"
}
response = requests.get(
search_url,
headers=headers,
auth=(JIRA_EMAIL, JIRA_API_TOKEN),
params=query
)
issues = response.json()["issues"]
# worklogを整形
worklogs = []
for issue in issues:
if "worklog" not in issue["fields"]:
continue
for log in issue["fields"]["worklog"]["worklogs"]:
worklogs.append({
"issue_key": issue["key"],
"summary": issue["fields"]["summary"],
"author": log["author"]["displayName"],
"time_spent": log["timeSpentSeconds"] / 3600, # 時間に変換
"date": log["started"][:10]
})
return worklogs
# Google Sheetsに書き込み
def write_to_sheets(worklogs):
scope = ["https://spreadsheets.google.com/feeds"]
creds = ServiceAccountCredentials.from_json_keyfile_name(
"credentials.json", scope
)
client = gspread.authorize(creds)
sheet = client.open("工数管理").sheet1
# ヘッダー
sheet.update("A1:E1", [[
"課題キー", "サマリー", "担当者", "工数(h)", "日付"
]])
# データ挿入
rows = [[
w["issue_key"],
w["summary"],
w["author"],
w["time_spent"],
w["date"]
] for w in worklogs]
sheet.update(f"A2:E{len(rows)+1}", rows)
# 実行
worklogs = get_monthly_worklogs("PROJ")
write_to_sheets(worklogs)
print(f"{len(worklogs)}件のworklogを転記しました")
Google Apps Script実装例
Google Sheetsから直接Jiraデータを取得する方法:
function fetchJiraWorklogs() {
const JIRA_URL = 'https://your-domain.atlassian.net';
const JIRA_EMAIL = 'your-email@example.com';
const JIRA_API_TOKEN = 'your-api-token';
// Basic認証のヘッダー
const headers = {
'Authorization': 'Basic ' + Utilities.base64Encode(
JIRA_EMAIL + ':' + JIRA_API_TOKEN
),
'Content-Type': 'application/json'
};
// 今月の工数を取得するJQL
const jql = 'project = PROJ AND worklogDate >= startOfMonth()';
const url = `${JIRA_URL}/rest/api/3/search?jql=${encodeURIComponent(jql)}&fields=worklog,summary,assignee`;
const response = UrlFetchApp.fetch(url, { headers: headers });
const data = JSON.parse(response.getContentText());
// Sheetに書き込み
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.clear();
// ヘッダー
sheet.appendRow(['課題キー', 'サマリー', '担当者', '工数(h)', '日付']);
// データ整形
data.issues.forEach(issue => {
if (!issue.fields.worklog) return;
issue.fields.worklog.worklogs.forEach(log => {
sheet.appendRow([
issue.key,
issue.fields.summary,
log.author.displayName,
log.timeSpentSeconds / 3600,
log.started.substring(0, 10)
]);
});
});
Logger.log('工数データの取得完了');
}
// 毎日自動実行する設定
function createTrigger() {
ScriptApp.newTrigger('fetchJiraWorklogs')
.timeBased()
.everyDays(1)
.atHour(9)
.create();
}
定期実行の設定
GitHub Actionsでの自動化
name: Sync Jira to Sheets
on:
schedule:
- cron: '0 0 * * 1' # 毎週月曜日0時
workflow_dispatch: # 手動実行も可能
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: |
pip install requests gspread oauth2client
- name: Run sync script
env:
JIRA_EMAIL: ${{ secrets.JIRA_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }}
run: python sync_jira.py
メリットとデメリット
メリット:
- 完全自動化が可能
- 既存のExcelフォーマットを維持できる
- 複雑な集計ロジックも実装可能
- 他システムとの連携も容易
デメリット:
- 開発・メンテナンスコストがかかる
- API仕様変更への対応が必要
- 認証トークンの管理が必要
こんな現場におすすめ
- 既存のExcelフォーマットを変えたくない
- 複数システムと連携したい
- 開発リソースを確保できる
アプローチ3: サードパーティツールの活用
開発コストを抑えつつ、より高度な工数管理を実現したい場合は、専用ツールの導入を検討します。
Tempo Timesheets
JiraのMarketplaceで最も人気のある工数管理プラグインです。
主な機能:
- より詳細なworklog入力UI
- 承認ワークフロー
- 予算管理
- 高度なレポート機能
- CSVエクスポート
料金: 10ユーザーで$10/月〜
インストール:
Jira設定 → アプリを探す → "Tempo Timesheets"で検索
Clockify
Jira連携が可能な無料のタイムトラッキングツールです。
特徴:
- Jiraの課題に直接時間記録
- ブラウザ拡張機能で簡単入力
- 無料プランでも基本機能が利用可能
- Excelエクスポート対応
連携設定:
1. Clockifyアカウント作成
2. Integrations → Jira
3. Jira URLとAPI Tokenを入力
4. プロジェクトをマッピング
Tableau/Power BIとの連携
BIツールを使ってJiraデータを可視化する方法もあります。
Tableau連携例:
-- Jiraコネクタを使用したカスタムSQL
SELECT
i.key AS issue_key,
i.summary,
w.author,
w.timeworked / 3600 AS hours,
DATE(w.startdate) AS work_date
FROM
jiraissue i
JOIN worklog w ON i.id = w.issueid
WHERE
w.startdate >= CURRENT_DATE - INTERVAL '30 days'
メリットとデメリット
メリット:
- 開発不要で即導入可能
- プロフェッショナルなUI/UX
- サポート体制が整っている
- 継続的なアップデート
デメリット:
- ランニングコストが発生
- ベンダーロックインのリスク
- カスタマイズに制限がある
こんな現場におすすめ
- すぐに導入したい
- 開発リソースがない
- 予算を確保できる
比較表
それぞれのアプローチを、主要な観点で比較します。
| 観点 | Jira標準機能 | API自動化 | サードパーティ |
|---|---|---|---|
| 初期コスト | 無料 | 低〜中 | 中〜高 |
| ランニングコスト | 無料 | 低 | 中〜高 |
| 開発工数 | なし | 中〜高 | なし |
| カスタマイズ性 | 低 | 高 | 中 |
| メンテナンス | 不要 | 必要 | ベンダー任せ |
| 導入スピード | 即日 | 1週間〜 | 即日〜数日 |
| 学習コスト | 低 | 中 | 低〜中 |
まとめ
JiraとExcelの二重管理から脱却するための3つのアプローチを紹介しました。
再掲:
- Jira標準機能の活用: コストをかけずにすぐ始められる
- API自動化: 柔軟なカスタマイズと完全自動化
- サードパーティツール: 開発不要で高機能