2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JIRA REST APIで課題情報を取得(jira-client-npm を使用)

Posted at

#はじめに

  • JIRA Softwareが10ユーザーまで無料で使えるようになったため家でもJIRAを触れるようになりました。
  • ということでREST APIの勉強をしつつ、結果を記事に残していこうと思います。
  • まずは課題の情報を取得する方法から。

#実施環境

項目
JIRA バージョン JIRA Software フリープラン
プログラム言語 Node.js v12.16.2
nodeモジュール jira-client v6.16.0
認証 googleアカウント

#事前準備

  • node.jsをインストールしておく。
  • JIRAで host / username / password / issueNumber(課題key)が必要になります。
  • Googleアカウント認証を使用している人は、APIトークンを取得する必要があります。
  • 取得の仕方はJIRA画面の右上プロフィールと設定(アバターマーク) → アカウント設定 → セキュリティー → APIトークンの作成と管理 →APIトークンを作成 (一度しか表示されないようなのでご注意を)

image.png

  • jira-client-npm のインストールはプロンプト画面で作業ディレクトリまで移動し下記を実行。
$ npm install jira-client

#課題情報の取得

  • 作業ディレクトリにindex.jsファイルを作り下記内容を転記。
  • 使いそうな情報を全て載せてみましたので必要なところを適宜抜粋してご利用ください。
index.js
const JiraApi = require('jira-client');

var issueNumber = "" //keyを入力
var customfield_n = ""

// Initialize
var jira = new JiraApi({
  protocol: 'https',
  host: 'hostname.atlassian.net', //hostnameに置き換え
  username: 'username', //google認証の方はGmailアドレスに置き換え
  password: 'password', //google認証の方はAPIトークンに置き換え
  apiVersion: '3',
  strictSSL: true
});
// 課題情報の取得
jira.findIssue(issueNumber)
  .then(function(issue) {
		//customfieldの値を確認
		/*for (  var i = 10001;  i < 10100;  i++  ) {
			customfield_n = "customfield_" + i
			console.dir(customfield_n + ":" + JSON.stringify(eval("issue.fields." + customfield_n)))
		} */
//		console.dir(issue.fields) //issue.fieldsをすべて確認
		console.log('プロジェクト名: ' + issue.fields.project.name);
		console.log('要約: ' + issue.fields.summary);
		console.log('タイプ: ' + issue.fields.issuetype.name);
		console.log('優先度: ' + issue.fields.priority.name);
		console.log('ステータス: ' + issue.fields.status.name);	
		console.log('エピック名: ' + issue.fields.customfield_10011);
		console.log('エピックリンク: ' + issue.fields.customfield_10014);
		if(issue.fields.parent == null){ 
			console.log('親:なし')
		}else{
			console.log('親: ' + issue.fields.parent.key);
		}
		if(issue.fields.description != null){	
			console.log('説明:');
			console.log(issue.fields.description.content[0].content)	
		}
		if(issue.fields.assignee == null){ 
			console.log('担当者: 未割当')
		}else{
			console.log('担当者: ' + issue.fields.assignee.displayName);
		}
		if(issue.fields.reporter == null){
			console.log('報告者: 未割当')
		}else{
			console.log('報告者: ' + issue.fields.reporter.displayName);
		}
		console.log('作成日: ' + issue.fields.created);
		console.log('更新日: ' + issue.fields.updated);
		console.log('期限 : ' + issue.fields.duedate);
		if(issue.fields.components == ""){
			console.log('コンポーネント:なし')
		}else{
			for (  var i = 0;  i < issue.fields.components.length ;  i++  ) {
				console.log('コンポーネント' + i +': ' + JSON.stringify(issue.fields.components[i].name))
			}
		}
		if(issue.fields.labels == ""){
			console.log('ラベル:なし')
		}else{
			console.log('ラベル: ' + JSON.stringify(issue.fields.labels));
		}
		
		if(issue.fields.comment.total == 0){		
			console.log('コメント:なし');
		}else{
			console.log(issue.fields.comment.comments[issue.fields.comment.comments.length-1].body.content[0].content)
		}
		if(issue.fields.attachment == ""){
			console.log('添付ファイル:なし')
		}else{
			for (  var i = 0;  i < issue.fields.attachment.length ;  i++  ) {
				console.log('添付ファイル' + i +': ' + JSON.stringify(issue.fields.attachment[i].content))
			}
		}
		console.log('ウォッチ済: ' + issue.fields.watches.isWatching);
		console.log('ストーリーポイント: ' + issue.fields.customfield_10026);
		console.log('ストーリーポイント見積もり値: ' + issue.fields.customfield_10016);
		})
  .catch(function(err) {
    console.error(err);
  });

実行

$ node index.js

#おわりに

  • 今後、課題の作成・データの書き換え等の情報もアップしていこうと思います。
2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?