食べチョク開発者ブログ

食べチョクエンジニアによるプロダクト開発ブログ

Serverless Frameworkで進捗レポーティングツールを作成した話

皆さんこんにちは、エンジニアの西尾です。

今日は食べチョク開発チーム内で利用している、進捗レポーティングツールのご紹介をいたします。

TL;DR

  • 食べチョクの開発チームはJIRAを使ってタスク管理をしているが、JIRAのレポートが見づらい & 使いづらい
  • JIRAのレポートは使わずに、独自にGoogle Spreadsheet上にレポートを出力して進捗を見ている
  • Google spreadsheet上にいい感じのレポートを生成するツールをServerless Framework + Google App Scriptで作成した
  • Serverless Frameworkで作成したツールは、オープンソースで公開します(本文参照)

JIRAのレポートが見づらい & 使いづらい

食べチョクの開発チームでは、スクラムを組んで開発を行っています。 スプリント期間は1週間、短く回してなるべく素早く開発をこなすようにしています。

今回はスクラムの話は置いておいて、この開発にかかせないツールがJIRAです。 JIRAにはスクラムボード & カンバン機能など、アジャイルツールが充実しています。

JIRAはタスク管理ツールとしては申し分ないのですが、レポート機能に関しては不満があります。

たとえばベロシティチャート。各スプリントの消化ポイントはだせますが、 スプリント内でどのタスク・エピックをどのくらいこなしたのかパット見でわかりません。 開発チームでは、大きな機能の改修にはエピックをつけて進捗のトラッキングをしています。

f:id:vividgarden-tech:20190909210919p:plain
JIRAのベロシティチャート。スプリントのポイントブレブレじゃん、っていうツッコミは、なしで

ベロシティもエピック毎、担当者毎、タスク種別(バグ or not)毎に見て振り返りをしたいのですが、簡単に出力できないのが辛い。

エピックレポートもいちいち1つずつレポートを見ないといけないのですが、 これも複数タスクを俯瞰して見られたらなあという思いがありました。

欲しかったレポート

JIRAのレポートが見づらいのならば、別途Google spreadsheetなりなんなりで出力すればいいのでは。 欲しかったレポートは以下のとおりです。

ベロシティチャート (エピック毎、担当者ごと、タスク種別毎)

f:id:vividgarden-tech:20190909214614p:plain
ベロシティの内訳は? どのタスクをどのくらい消費したの?が一発でわかるグラフ

エピックの進捗

f:id:vividgarden-tech:20190909214430p:plain
このエピック、進捗悪すぎじゃない? っていうのがひと目で分かるグラフ。ごめんなさい

Serverless Frameworkでサクッとツールを作る

このくらいのレポートを出力するだけならば、 正直Google App ScriptをJIRAにつないで、ごにょごにょするだけで作れそうだなあという気がします。

でもせっかくだから、レポートの元データを作る処理を今流行りのサーバーレスアーキテクチャで作ってみようかなと思い、 以下技術を使って作ってみることにしました。

  • Serverless Framework
    • インフラメンテとかしたくないので、作るならサーバーレスかなぁ。フレームワークはメジャーっぽいやつ選んでみるか、くらいのノリで採用しました。
  • Node.js
    • ローカル環境で開発したいです。Nodeがツール周りで一番充実してそうだったので選択。
  • Typescript
    • 型がほしい
  • DynamoDB
    • ServerlessならDynamoDBだろうくらいのノリで選んだ
  • AWS
    • 食べチョクはAWSで動いている
  • Google App Script + Google Spreadsheet
    • グラフ描画を独自に作るのは辛いし、そこまで工数かけたくないので、結果出力はGoogle Spreadsheetに。

サーバーレスアプリケーション側は、シンプルに以下のようなJSONを返すような作りにしました。 Google spreadsheet(Google App Script)側では、この結果をグラフに落とし込むところだけを実装しています。

[
    {
        sprintName: "dev-sprint-66",
        epicId: "ここにエピックID",
        epicName: "ここにエピック名",
        point: 10
    },
    {
        sprintName: "dev-sprint-66",
        epicId: "別のエピック",
        epicName: "ここにエピック名",
        point: 8
    },
]

作ったツールを公開します

完成したツールは以下のとおりです。

github.com

Google App Script側のコードは公開してないのですが、レポートの元データを作り出すツール側のみ公開してます。

このツールは、弊社開発チームのレポート出力機能に特化しており、そのまま他の会社・プロジェクトで使えるものではないと思っています。 しかし、Serverless Frameworkでアプリを作るとこういう感じになるよ、というexampleにはなるかなと思い、今回公開することにしました。

おわりに

開発チーム内で使っているツールを、サーバーレスアプリケーションとして作成しました。 せっかく作ったので、サーバーレスでアプリ作るとこうなるよ、というサンプルには使えるかなと思い、ソースも公開することにしました。

サーバーレスアプリケーションは、インフラ管理の手間もなく、サクッとアプリを作れるのは楽だなと感じました。 今後簡単な社内ツールは、サーバーレスで作っていけたらなと思っています。