Pixelaを使ってGitHub Wikiの芝を生やした

Pixelaを使ってGitHub wiki上での作業を可視化した。

pixe.la

f:id:wifeofvillon:20181114123634p:plain
メインプロジェクトのGitHub wikiの芝

「Pixelaとは」「用途は」みたいな話は作業中にまとめたGistがあるのでそちらを参照されたい。Amazon Dashとかスマートスピーカー連携とか夢がありますね

目次

目的

手動テストをしていると

  • この画面どういう条件で出てるのかわからん
  • この機能どの設定を変えれば有効化されるのかわからん
  • このテスト項目絶対次やるときにはどうやるか忘れてる自信がある

みたいなことが割とあり、気づいたときにGitHub wikiを更新している。
ただ、GitHub wikiへのコミットはprivate repositoryと違ってGitHubアカウントの設定を変更してもcontributionsに反映されないので、モチベーションアップと他メンバーへの作業してますよアピールのためにPixelaで作業量を可視化することにした。

やったこと

とりあえずUserとBoardを用意した: 手順 (Gist)

過去データの反映

まず過去データを反映したんだけど

  • メインプロジェクトのGitHub wikiを更新しているのは(ほぼ)私だけ
  • GitHub wikiのそもそも更新件数が少ない(50件以下)
  • できるだけ工数をかけたくない

という理由から、

  1. GitHubの履歴ページをJSでパースしてTSVを生成して表示
  2. TSVをGoogle Spreadsheetで編集
  3. コマンドを生成してTerminalで流す

というベタな手順で実施した。

履歴ページのパース

GitHub wiki全体のコミット履歴は以下のURLで確認できる。

https://github.com/${author}/${repository}/wiki/Home/_history

ハッシュ、author、日時、コミットメッセージを取得してベタにTSVで出力するスクリプトを開発者ツールのコンソールで実行した。

gista45f7e2e6cf74e3b9c5883e36b2d22eb

TSVにしか対応しないならもっとシンプルなコードになるはずなんだけど、途中までJSONで取得するつもりだったので余計な手順を踏んでいる箇所がある。1

TSVの編集

f:id:wifeofvillon:20181114131753p:plain
TSVをコピペして日付でソートする

上のスクリプトで出力したTSVをコピペして日付でソートしてからコマンド生成用にデータを整形する。

  • date: YYYYMMDD形式に置換する。スクリプトで取得された時間はUTCになっているので場合2によっては変換が必要
  • quantity: 日付とハッシュ見て同日だったらインクリメントする

あとはPOST用コマンドを生成してTerminalに流せば過去データの反映は完了。

退勤時に流すスクリプトの作成

git shortlogの実行結果を読んでPOSTまでやってくれるShellを作ってcronで実行させたかったけど知識も時間もないので、日付とコミット数を入力したらcurlコマンドを生成するにとどめた。

curlを実行するとパラメータバリデーションに引っかかるのでエスケープとか必要なのかもしれない。 っていうか今思ったけど日付は自動入力にできるし、最後にcatで出力してるコマンドを変数に格納すれば普通に動くのでは……? :thinking_face:

#!/bin/sh

user_name="user_name"
token="user_token"
graph_id="graph_name"

git shortlog -sn --no-merges --since='$(date +%Y/%m/%d) 00:00:00'

echo "counted commits."

echo "input date (YYYYMMDD):"
read date
echo "input commits:"
read quantity

echo "date: ${date}, quantity: ${quantity}"
read -p "post it? (y/n)" yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac

# dateのパースに失敗するっぽい
# curl -X POST https://pixe.la/v1/users/${user_name}/graphs/${graph_id} -H 'X-USER-TOKEN:${token}' -d '{"date":"${date}","quantity":"${quantity}"}'

cat <<EOS
use it!
curl -X POST https://pixe.la/v1/users/${user_name}/graphs/${graph_id} -H 'X-USER-TOKEN:${token}' -d '{"date":"${date}","quantity":"${quantity}"}'
EOS
echo "\n"

コミットがある場合実行結果は以下のようになる。

$ sh github.wiki.pixela.sh 
     5  wifeofvillon
counted commits.
input date (YYYYMMDD):
20181114
input commits:
5
date: 20181114, quantity: 5
post it? (y/n)y
use it!
curl -X POST https://pixe.la/v1/users/wifeofvillon/graphs/test-graph -H 'X-USER-TOKEN:user_token' -d '{"date":"20181114","quantity":"5"}'

今後の課題

  • スクリプトのブラッシュアップ
  • コミット数でなくコミット量を反映させたい(git --log-sizeはなんか違う気がした)
  • 就業時間過ぎたら勝手に実行されてほしい

参考


  1. コメントアウトされている箇所を変更すればJSONを取得するスクリプトになるはず

  2. 日本の場合、0時〜9時(JST)に作業が発生する人がたぶん該当する