GitHubのIssueをCSVで出力する

ブログ

Blog
  1. ホームページ制作・運営はアウラ:ホーム
  2. ブログ
  3. GitHubのIssueをCSVで出力する

GitHubのIssueをCSVで出力する

GitHubのIssueをCSVで出力する

こんにちは、エンジニアの仁木です。

先日、Classi株式会社様の「リードタイムを測るシェルスクリプトを作ってチームの振り返り会を活発にした話」という記事の投稿がXで流れてきたので読んだのですが、面白い取り組みだなと感じました。

自社のプロジェクト管理にも取り入れることで、何か得られるものがあるかなと思い、
記事にあるコードを参考にして簡単なスクリプトを作成してみたので、ブログで紹介したいと思います。

作成物

最初に作成物です。
GitHubに公開したので、下記URLから確認できます。

export-issues-to-csv
https://github.com/ToshitakaNiki/export-issues-to-csv

スクリプトができること

GitHubの各リポジトリに登録されているIssueから、前日にクローズされたIssueを取得し、CSVで出力します。
Issueは作成されてからクローズされるまでの期間(リードタイム)を計測し、CSVに出力されるようになっています。

※最終的に1日毎に定期実行してDBに保存できれば、と考えているので前日にクローズされたIssueのみが出力されるようにしています。

Issueの出力方法

大まかな流れは以下の通りです。

  1. GitHub CLIで前日にクローズされたIssueを取得し、jsonファイルに保存
  2. jsonファイルに保存したIssueをNode.jsで並び替え/整形し、CSVに出力

GitHub CLIでIssueを取得する

GitHub CLIではGitHubのAPIが使えます。
APIはREST APIと Graph QLとがあり、今回はGraphQLを利用しています。

GitHub CLIとGraphQLは今回始めて利用しました。
GitHub CLIではログインやアクセストークンなどの認証まわりで苦戦し、
GraphQLでは基本的なクエリの書き方や、検索時の条件の指定に苦戦しました。

検索のクエリでは、最初は全然Issueを取得できなかったのですが、is:issueの条件を追加するとあっさり取得できたり‥

取得までできると、あとはスムーズにできました。
リクエスト時のクエリに、欲しいフィールドを追記して、必要なデータだけを取得できるので、こういう所はGraphQLは便利だなと思いました。

ログインやアクセストークンの認証はGitHubページの **Fine-grained personal access tokens** ページでトークンを生成し、そのトークンを使ってgh auth loginでログインします。
自身のアカウント上のリポジトリであれは、上記のトークン生成だけで良いのですが、組織アカウントのリポジトリの場合だと、組織側の設定画面でアクセストークンの認証ポリシーの設定が追加で必要でした。

Organization の個人用アクセス トークン ポリシーを設定する

jsonファイルに保存したIssueをNode.jsで並び替え/整形し、CSVに出力

jsonファイルに保存したIssueのデータは最後にJSで加工しCSVに出力しています。
日付のフォーマットやCSV形式への変換・出力はパッケージを利用したので、サクッと書けました。

特にCSVフォーマットの変換は csv-stringify というパッケージがあり、オブジェクトを渡すとそのままCSVとして出力できるフォーマットに変換してくれて便利でした。

まとめ

プロジェクトの管理や運用はまだまだ社内でもノウハウを貯めていきたいので、他社さんの事例など参考にして取り入れていきたいです。
今回のスクリプトは、実際の出力手順はリポジトリのreadmeに記載しているので、興味のある人は自身のリポジトリを使って試してみてください。

お電話でのお問い合わせはこちら:06-6292-8577。受付時間は平日9:30~18:30 インターネットからは24時間受付中!お問い合わせフォームはこちら
Webデザイナー、Webプログラマ募集中!