Jasper による(データ分析系)タスクの作業ログ管理


TL;DR

  • リモートワークでより一層作業ログを残すのは重要になったが、Jasper での管理がめちゃくちゃ捗る
  • 分析系のタスクは SQL クエリだけだと情報が不十分なことが多く、作業ログに過程を残しておくと便利
  • チームで同じように作業ログを残しておくと作業追いやすいしコメントとかも随時入れられるのでよい

リモートワークがメインになって久しいが、リモートワークはスッとお布団で昼寝とかできたりして最高なので、今後もこれが自分の標準的な働き方になる(少なくとも必要な時はいつでもリモートで働けるようにする)という感じがする。

リモートワークがメインになって色々と変わったけど、その中でもこのエントリでは作業ログを残すことについて、いま自分(もしくはチーム)がどういう感じでやっているかを残しておこうと思う。

リモートワークになって作業ログを残す重要性はより一層高まった。 社内 wiki に日報を書くとか Slack に分報を書くとか色々あると思うが、自分の場合はタスク毎に GitHub の Issue に作業ログを残してそれを Jasper で管理するのがしっくりきている。 特にチケット管理をしている分析系のショットのタスクとかも相性がいいので、その辺りを中心にまとめる。

Jasper https://jasperapp.io/ って何?という人がいたら、最高 GitHub Issue reader なので使ってみてください。ドキュメントはこちら https://docs.jasperapp.io/ (自分は Jasper の回し者ですが、完全ボランティアの回し者です)。

具体的にどんな感じか?

百聞は一見に如かず、ということでどんな感じなのかキャプチャ画像をば(ほとんどモザイクかかってるけど)。
分析系のショットのタスクなど、特定のリポジトリに紐づいてないタスクはまとめて sandbox_yoheikikuta というリポジトリの Issue で管理していて、大まかに Data Science (DS) 系とか採用系とかで Label を付与している。
社内ではスクラム開発を採用していて、JIRA でチケット管理をしているので、検索しやすいようにチケット番号をタイトルに入れつつ相互にリンクを貼っている。

この Issue にはタスクを完遂するまでにやったこととか考えたことを割と細かく残すようにしている。 分析系タスクだとコードだけだと情報が不足していることも多いので、後でまた似たようなタスクをやろうとしたとき(これは未来の自分だったり同僚だったりする)に追えるようにしたいという考えからこうしている。 分析系タスクで情報が不足しがちというのはどういうことかというのは後で別セクションで書く。

ともかく、こんな感じで自分やチームの人が Issue に作業ログを残してくれていれば、Jasper を使うことで作業ログを追ったり探したりしやすいのでめちゃくちゃ管理しやすい。自分は以下のように使ってる。

  • チームの一部の人は同様の運用をしてるので、notification なしで Jasper の Stream を作成して、自分の手が空いたときとかに眺めて他人の作業を理解したりコメントしたりしている
  • これは過去に同じようなことしてたな〜ってなれば Cmd+K で jump したり JIRA のチケットから探したりして必要な情報を収集する
  • (もちろん典型的な使い方として PR のレビューとかにも使ってるが、そういう典型的な使い方はこのエントリでは詳しくは触れない)

Issue に作業ログを残すだけでは閲覧性が悪かったりして有効に活用するのが難しい。 Jasper という Issue reader が存在してくれることによってうまく機能する仕組みになっている。 ありがとう Jasper さん。

リモートワークにおける作業ログの重要性

作業ログを残していざとなったら他の人に引き継いでもらっていつでも退職できるよう(?)にしておくことはそもそも重要なんだけど、リモートになってより一層作業ログを残しておくのは重要になった。

物理出社してた時は、ふらっと集まって議論して sync したり、集中力がなくなったときに他人の作業を覗きに行って何してるか聞いてみたり、とかができるけどリモートワークではそれができない。

最初はツールでなんとかそれをできるようにしよう、ということで色々試してみたりもした。
Meet は打ち合わせするのに便利だし Discord はちょっと話そうぜってするのに便利だけど、やっぱり雑談のように話すことはできなかった。相手がどういう状態か分からないし、Discord に常にいるようにしようとか言ってもふと離席してる時に話しかけて虚空に木霊したり afk から戻し忘れたりする。 カメラを常時オンにするというツールもあるけど、これは結構嫌がる人もいるし PC への負担もバカにならなかったりする。

自分の中での結論は、ツールを活用して物理出社してたときと同じように働くというのは無理だな、というものだった。 ある程度しっかりした議論が必要な時は時間を合わせてオンラインでやるとか、出社したときに存分にホワイトボード使ってやるとかで機会を確保していかないといけない。

物理出社してた時と比べて入ってくる情報量が少なくなるので、その分はやはり作業ログとして残して共有していくしかない。 日報だったり分報だったり色々あると思うけど、自分はやっぱり GitHub Issue が一番使いやすい。 スクラム開発でチケット単位でタスクを管理していることとの親和性も高く、タスク単位で Issue にログを残していくのはうまく機能している。

慣れてくると作業ログで非同期に共有できるのは時間を無駄にしなくて済む。
定例とかで作業内容を話されると、時間が限られてるので十分な情報が提示されずに話が進んで、コンテキストを理解してる一部の人だけがコメントをしてそうでない人は実は話を聞いてない、とかが発生しがち。 作業ログをちゃんと残してると、定例では共有すべき事実だけ共有して、詳しく追う必要がある人は Issue 見といて、という感じで終えることができる。 自分に必要な情報で時間を掛けて追いたい人は時間を作ってじっくり読めばいいし、疑問などあればコメントして回答をもらえばよい。

格好いい感じで書いたが、チーム全体で見るとまだまだできてない部分もあるので、もっといい感じに機能するようにはしていきたいね。

分析系タスクの作業ログ

分析系タスクといっても色々ある。

SQL だけで閉じずに Python のコーディングもしてガッツリ分析が必要なものに関しては、Jupyter Notebook で分析をしたものをリポジトリに push しておけばいいと思う。

そこまで重くはないけど結果を得るまでには結構色々な知識が必要となるタスク、がちと厄介となる。
結果を共有するのはいいけど、こういう系のタスクは少し時間が経った後にちょっと形を変えて再度調べたくなったりして、そのときに以前の似たタスクで最終的な結果を出す SQL クエリだけあってもコンテキストが追えないことが多い。 結果として以前の似たタスクを担当した人がやるわってなってまたそこにコンテキストが積み重なって、属人化して必要な知識が共有されないままどんどん進んでいってしまう。

よく管理されたコードベースであればコードを読めば理解できることが多いのでいいのだが、分析系のショットのタスクは当然そうではないし、そもそも SQL クエリは読むのはしんどい…
全部 Jupyter Notebook で残しておこうとかしても、めんどくさくて無理だし、やったとしてもリポジトリに大量の notebook が並んでサクサクチェックできないし死蔵される未来しか見えない。
頑張って SQL クエリにコメントをたくさん書けばいいという話でもなくて、(時間に依存しがちな)非決定的な実行結果がなぜ得られたのかとそれにどうやって対処したかの経緯を知ることが重要だったりする。

例えば、過去一週間のアプリケーションログがなんかおかしそうだからその原因を調べたいとする。
当然ながら、やりたいのは異常の有無をチェックするだけでなく、異常があったらその原因を明らかにして修正することだ。 これは明らかに以前同じタスクをやったときの SQL クエリだけあっても不十分である。 作業者の考察、アプリケーションを管理しているチームの人に聞いたときの Slack のリンク、原因と思しきプロダクションコードへの変更 PR のリンク、問題を誰とコミュニケーションしてどうやって修正したか、などなどが本質的に重要な情報となる。

Issue の作業ログにちょっとしたコメントと共にこれらの情報を残しておけば、未来の自分へも同僚へも有益な情報となる。 前回と同じような異常なら前回と同じ流れで確認すればいいし、違った種類のものであれば調べた経緯を同じように残して知見としていく。そしてそれらの知見には Jasper によって容易にアクセスできるといった次第である。

これはいまのところうまく機能していて、自分は気に入ってるし、同様の管理方法を採用しているチームメンバーの評判も結構良い。

いま考えている課題は、こういう知見をいい感じにまとめられるならまとめたいけどどうやればいいの?ということだ。
自分たちが扱っているデータの特徴というか癖みたいなものは分析をすると色々分かってくるが、それをいい感じに抽出して言語化して整理できると有用そうかもと思っている。 wiki のような形式でまとめても色々な変化に追従できなさそうだし、自分にはうまく機能しそうなものの想像がつかない。

まとめ

(分析系タスクの)作業ログを GitHub Issue に残して Jasper で管理していて最高便利。
自分たちはもっと良い方法でやってるぜっていう話があればぜひ教えてください。