GitHub, GAS, Google Data Studioを活用した週替わり運用・カイゼン担当の仕組み

各種ライブラリのバージョンアップや軽微な修正など出来ていますか？

STORESのフロントエンドチームは、週替わりで運用・カイゼン担当者を割り当てています。
担当になった人は、日々の上がってくる不具合の調査や対応、手が回りにくい技術的負債の返済などのカイゼンを行っています。

サービス開発をしつつ、不具合対応やカイゼンをどう回しているのか、ひとつの事例として参考になれば幸いです。

※ 本記事は [STORES.jp Advent Calendar 2019 - Adventar](https://adventar.org/calendars/4549) の3日目の記事です。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35595/72a3542a-e824-271e-c046-ae4fa0e5b2fe.png)

<!--
https://www.lucidchart.com/documents/edit/cc74461e-5194-438e-a093-550e1692f9f4/0_0?beaconFlowId=3F6E72F781796B39
-->



## カイゼン担当は持ち回りで行う！ :football:
カイゼン担当は1週間ごとに持ち回りで行うようにしています。
つまり常に誰かしらがカイゼンを行い続ける状態にしています。

通常のサービス開発と切り離し、全員で行うメリットは次のような点です。

+ カイゼンを止めない
  + 常にカイゼン用の人を確保し、技術的負債の返済をする
+ サービス開発を止めない
  + サービス開発時の工数見積もりはカイゼン週の作業があることを考慮する
  + 本番環境で発生した不具合を直す作業をする
+ カイゼンを属人化させない

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35595/982b8695-2754-c0e1-d919-3aa1fa1624d2.png" width="600px">



## チケットの管理にはGitHubプロジェクトを利用！ :octocat: 
チケットの管理ってどこでするか悩みますよね。RedMine？Jira？Asana？GitHub？etc？
次の条件にマッチするものを考えると、GitHubプロジェクトが手軽で良いかなと判断しました。

+ 無料
+ カンバン形式
+ オンラインで利用可能
+ API がある
+ 使い慣れている
+ GitHub の Issue と紐付け可能

GitHubプロジェクトは Organization 直下に作り、複数のリポジトリのIssueを統合できるようにします。
GitHubのIssueは開発用のIssueもあるので、プロジェクトに紐付けて埋もれないようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35595/e82b6d82-f8b5-1ff3-dd2b-13d542e29936.png)


## カンバンの列（カラム）は8つに分類！ :hammer_pick:

GitHubプロジェクトでは、次の8カラムを用意しました。

|カラム|用途|
|---|---|
|New Issues|カイゼン Issue はすべてここから始まる|
|Ignore|※|
|Icebox|要検討の Issue|
|Backlog|カイゼンすると判断した Issue|
|In progress|着手している Issue|
|Review in progress|レビュー中の Issue|
|Reviewer approved|レビュー完了した Issue|
|Done|マージ（リリース）した Issue|

※ STORESではエラー通知にSentryを導入していて、原則すべてのエラーをSlackに流しています。
しかし、再現性がなく対処が難しいエラーに関しては一時的に除外して、Slackの通知を見て新しいエラーを発見しやすいようにしています。この除外したエラーをIssue化してIgnoreカラムで管理しています。



それぞれの Issue のステータスは次のように遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35595/7e01cfaa-32a5-fca7-4d67-bf00d6f39dcc.png)

ポイントは次のようなところです。

+ **いつでもだれでも改善の Issue を切れる**
  + 「やる、やらない」は気にしなくていい
+ **プロダクトオーナーが改善 Issue の管理・切り分けを行う**
  + 誰かしらが切り分けをやらないと `New Issues` が溜まり続ける<br>
    カイゼンをプロダクトとして捉えてプロダクトオーナーを置く
  + 基本プロダクトオーナーが「やる、やらない」や優先順位を決めるが、迷ったらチームに相談



# カイゼンを見える化！ :eyes: 
GitHubプロジェクトも作ったし、フローも考えた。完璧！！
ではありません。**カイゼンも一つのプロジェクトとして扱い、見える化まではセットでやります。**

チーム開発実践入門に次のような記述があります。

>筆者の経験上、「うまくいかない、終わらない」プロジェクトには以下のような共通する特徴があると思えます。
・プロジェクトの見える化ができていない
・タスクの整理、進捗の管理、情報の共有などができていない
出典元：[チーム開発実践入門 - https://gihyo.jp/book/2014/978-4-7741-6428-1](https://gihyo.jp/book/2014/978-4-7741-6428-1) 

そこで見える化をするために、Google Apps Script（GAS）, SpreadSheets と DataStudio を使っています。

## GAS, SpreadSheets, DataStudio で進捗を自動でグラフ化！ :chart_with_upwards_trend: 

流れとしては次のような形です。

1. GAS にトリガーを設定して毎日起動
2. GASは GitHub の API を叩いてカイゼンプロジェクトの Issue を取得し、スプレッドシートに書き込む
3. スプレッドシートを Data Studio のデータソースにして各種グラフを描画
4. 適宜グラフを見て状況を確認


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35595/a876f87b-db88-3660-41d0-5c07db02f85d.png)




表は色々あるのですが、一部チラ見せします。
※ 見た目は [uknmr/gas-webpagetest](https://github.com/uknmr/gas-webpagetest) で使われているものを流用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35595/d2690066-87e0-b812-1f31-c5600f32ecb1.png)


## おわりに
実際に運用・カイゼン担当を導入してみて数ヶ月ですが、少しずつ技術的負債や小さな改善が進められる用になってきました。
しかしサービス開発の方のリミットが近づくと、どうしても後回しになることもあります。（完全に運用・カイゼンのみという形にはできていません）

まだまだカイゼンの仕組みは完全に構築できていませんが、よりカイゼンを進められるように整えていきたいと思っています。

明日のSTORES.jp AdventCalendarの担当は [dexia2](https://twitter.com/dexia2) の [Webエンジニアが効率よく成長をするために心がけるべきこと](http://howitworks.hatenablog.jp/entry/2019/12/04/074042) です！