0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【JavaScript】Jiraタスクを取得するコマンドを作ってみる

Posted at

はじめに

前回業務開始時に役立ちそうなJavaScriptコードをコマンドで実行する方法について書かせていただきました。

今回は、少し派生してJiraのTodoを取得できるようなサンプルを作成してみようと思います!

Jiraとは

Atlassian社が提供するタスク管理ツールです。

メールアドレスを登録するだけで、無料で簡単に使用することができます。(有料プラン有り)

※今回の記事では、Jiraの使い方や、Jiraのプロジェクトの作成方法などは割愛させていただきます。

目標

前回作成したwrkコマンドに、'jira'を追加して以下のように実行するサンプルを作成します。

wrk jira today

こちらを実行すると・・・

📋 [username] の今日のJiraタスク一覧(2025-03-27)

🚧 PROJ-102 | バックエンドのテスト修正中
📝 PROJ-103 | AWS構成図をアップデート(未着手)

こんな感じで、Todoとなっているタスクを表示するサンプルを考えてみます。

準備

JiraでAPIトークン発行

まずは、Jiraで認証するためのAPIトークンを発行します。
Jiraの「アカウント設定」 -> 「セキュリティ」の、「APIトークン」からトークンを発行します。
スクリーンショット 2025-03-27 10.51.01.png
適当名前を入力して、「作成」ボタンを押すとトークンが発行されます。
トークンは後で使用するので、どこかに控えておいてください。

パッケージの追加

API通信を実現させるためのaxiosパッケージと、.envファイルから環境変数を取り込むためdotenvを使用します。

npm install axios dotenv

lib/jira.js

import axios from "axios";
import dotenv from "dotenv";
dotenv.config();

export async function fetchTodayTasks(){
  //アクセスに必要な情報を.envファイルから取得
  const baseURL = process.env.BASE_URL;
  const email = process.env.EMAIL;
  const token = process.env.API_TOKEN;
  const username = process.env.USER_NAME;

  // basic認証に必要なオブジェクト作成
  // オブジェクトのヘッダーにemailとtoken情報を詰め込む。
  const auth = Buffer.from(`${email}:${token}`).toString("base64");

  // JQL(今日の担当タスク)
  const jql = `assignee=currentUser() AND statusCategory != Done ORDER BY priority DESC`;

  try {
    // Jiraタスク取得
    const res = await axios.get(`${baseURL}/rest/api/3/search`, {
      headers: {
        Authorization: `Basic ${auth}`,
        Accept: "application/json"
      },
      params: {
        jql: jql,
        maxResults: 10,
        fields: "summary,status,key"
      }
    });
    // レスポンスで帰ってきたissues情報
    const issues = res.data.issues;
    console.log(`📋 [${username}] の今日のJiraタスク一覧(${new Date().toISOString().slice(0,10)})\n`);

    for (const issue of issues) {
      // taskのID
      const key = issue.key;
      // summaryはチケットのタイトル。
      const summary = issue.fields.summary;
      // 現在のステータス。"To Do", "In Progress", "Done"
      const status = issue.fields.status.name;

      const icon = {
        "To Do": "📝",
        "進行中": "🚧",
        // その他、カスタムなステータスを追加できる。
      }[status] || "📄";

      console.log(`${icon} ${status} ${key} | ${summary}`);
    }
  } catch (err) {
    console.error("❌ Jiraタスク取得エラー:", err.message);
  }
}

このうち、以下の "/rest/api/3/search" の部分は「Jiraの課題をクエリで検索して取得する」という処理になります。

const res = await axios.get(`${baseURL}/rest/api/3/search`{
    // ヘッダー情報などを記載
}

Jiraの公式docsにも使い方が記載されているので、確認しましょう!

.envにユーザー情報を記述

JIRA_BASE_URL=https://your-org.atlassian.net
JIRA_EMAIL=your-email@example.com
JIRA_API_TOKEN=your_api_token
JIRA_USER_NAME=your_name

index.js

#!/usr/bin/env node

import { runStartCommand } from "./lib/start.js";
import { fetchTodayTasks } from "./lib/jira.js";

const command = process.argv[2];

switch (command) {
    case "start":
        runStartCommand();
        break;
    // 前回作成した"start"の下に新しく"jira"を作成する。
    case "jira":
        const subcommand = process.argv[3];
        if (subcommand === "today") {
        fetchTodayTasks();
        } else {
        console.log("🔍 使い方: wrk jira today");
        }
        break;
    default:
        console.log("❓ 未知のコマンドです。例: wrk start");
}

実行結果

% wrk jira today
📋 [username] の今日のJiraタスク一覧(2025-03-27)

🚧 進行中 SCRUM-7 | 環境構築

これで、jiraからタスクを取得することができるようになりました!

スクリーンショット 2025-03-27 11.00.47.png

ちなみに、jiraでは以上のように表示されています。
進行中となっている「環境構築」(SCRUM-7)だけが取得できていることがわかります。

まとめ

今回はJiraのAPIを使用してTaskを取得する処理を作成してみました!JiraのAPIを使ったのは初めてでしたが、応用すればもっといろんなことができるので、上手く使えばかなり業務効率化に使えそうだなと思いました。
また色々試してみようと思います✨

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?