Blog

GitHub Projects(classic)のバーンダウンチャートをつくった話

この記事は、ニフティグループ Advent Calendar 2022 21日目の記事です。

はじめに

会員システムグループ 第二開発チームの川上です。普段はニフティ会員向けiOS/Androidアプリの開発や運用を担当しています。
私のチームはスクラムで開発しており、GitHub Projects(classic)でタスク管理しています。スプリント内の進捗を管理する上でプランニングポーカーでつけたポイントを可視化したいという話がありました。そこで、定期的に自動更新するバーンダウンチャートをGAS(Google Apps Script)で簡易的に用意してみました。
本記事ではこのバーンダウンチャート作成で行った実装について紹介します。

要件

  • 現時点までの残りポイントについて折れ線が表示される
  • スプリント終了日までの予測ポイントについて折れ線が表示される
    • 予測線は残日数の割合で計算
    • 休日はポイント消費しない
  • 定期的に自動更新する

構成

リソース管理や運用の手間を少なくするため、GASでタスクデータを取得してLooker Studioに表示しています。

前提

GitHubのIssueにはチーム独自の運用として下記が設定されており、一部実装はこの内容を前提としています。
  • Title
    • タスクのタイトル
    • 「:」後にポイントを記載
    • 例) 「〇〇のテストを作成する:3」、「〇〇のインターフェースを追加する:2」
  • Milestones
    • スプリントを設定
    • 例)「Sprint5」、「Sprint11」
  • Labels
    • チケットの種類を設定
    • 「PR」「Epic」以外がポイント集計対象のタスク
    • 例)「android」、「ios」、「PR」、「Epic」

実装

1. スプレッドシートを用意

スプレッドシートを新規作成してシートを追加して4つ用意します。

タスク一覧シート

  • GitHubから取得した情報を保存しておくシート

Sprint集計シート

  • タスク一覧をスプリントごとに集計したシート
  • 実際にLooker Studioから参照してバーンダウンチャート化する

設定用シート

  • スプリント期間などの情報が記載されたシート

一時計算用シート

  • GASから一時的に書き込む空のシート

2. GitHub API v4でデータ取得してスプレッドシートに収集する

GitHub API v4でデータを取得するために、下記の関数を用意します。 「graphql_query」の文字列で指定している「organization_name」と「project_name」は環境にあった文字列に置き換えてください。また、定期実行されるまでの期間に100件以上更新されることがなかったため、一回の実行でIssueの取得件数は更新日時が新しい順に100件としています。 この関数を利用してデータを取得し、データ変換とスプレッドシートへの書き込みを行います。 GASのトリガーにupdateTasks関数を定期実行するように設定します。実行後は次のようなデータがスプレッドシートに書き込まれます。

3. Sprint用のデータに変換する

タスク一覧シートにデータ取得できましたが、Looker Studioでバーンダウンチャートのようなグラフを表示するにはこのデータを元に値の加工が必要です。Looker Studio上でも値の加工はできますが、データソースにスプレッドシートを使う場合は複雑な加工ができません。そのため、スプレッドシート側の別シート(Sprint集計シート)で加工を行います。 また、タスク一覧シートの変更を即時にSprint集計シートに反映する処理が必要です。ただ、変更したデータの取得→加工→反映を愚直に実装するのは少し手間がかかるため、GASからはセルにスプレッドシート関数の文字列を書き込むことで実現します。 下記のコードは設定シートに記載された更新日を過ぎたら、次のスプリント日数分の行を追加して、各セルにスプレッドシート関数を埋め込んでいます。(実装を妥協しているので、シートのヘッダーが変わったら崩れてしまいます…) 収集処理と同様にGASのトリガーにnextSprint関数を定期実行するように設定します。実行すると次のようなデータを書き込みます。

4. Looker Studioで表示する

Sprint集計シート(下記の図ではdaily_activity)をLooker Studioのデータソースに追加して、折れ線グラフを作成します。フィルタ機能でmilestoneを設定することによりSprint単位に表示を絞ることができます。
設定を完了すると次のようなグラフが表示されます。

おわりに

今回はGAS + Looker Studioで簡易的なバーンダウンチャートを作る方法を紹介しました。バーンダウンチャートがあることで視覚的に進捗が把握しやすくなります。そして、スプリントゴールに間に合うかどうかを早めに見極めて、プロダクトオーナーへの相談や作業自体の見直しがしやすくなります。もしバーンダウンチャートを利用していない場合はぜひ導入を検討してみてください。

明日は、@penpenpenさんのお金をかけずに学ぶRustです。お楽しみに!

We are hiring!

ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!