入社してから書いていた分報の行数を眺めてみる

この記事ははてなエンジニア Advent Calendar 2021 の4日目の記事です。

昨日は同期のid:gurriumくんでした。MOD Pythonで色々できるんだ...。僕も趣味で好きなゲームに色々コード書いて楽しんでますが、それは社のアドベントカレンダーには書けないゲームなのでまたの機会に書こうと思います。

社ではScrapboxを使っていて、僕は分報の置き場として色々書いています。個人的にはTwitter感覚で使っています。 分報は以下のフォーマットで基本書いています。

anatofuznote 2021/11/29 - 12/03
[anatofuznote 2021/11/22 - 11/26]  <=> [anatofuznote 2021/12/06 - 12/10]

#anatofuz #anatofuznote
[** 2021/12/3]

実際には↓の用な感じでScrapbox上は見れる f:id:anatofuz:20211204183001p:plain

忙しいときはツイート数が減っている気がしていて、逆になんか盛り上がっているときはツイート数が多いかなとなんとなく感じています。 つまりツイート数で自分の状態が測れるのではと思っています。 せっかくなので、本当にそうなのか調べてみました!!! 分報なのでツイート数==scrapboxの行数として考えてみます。

準備

APIを使ってかっこよくやるとかは頭になく、素朴にざっくりと外観が知られればいいので、雑スクリプトで集計します。 分報は先程例示したフォーマットで書いているので、[** 2021/%m/%d]に囲まれている間の行数を雑にカウントする方法でやってみます。

データはどうやって持ってくるかというと、コピペですね。はい。素朴にやるのが早いねんな。 ということで次のようなPerlスクリプトを書きました。

use strict;
use warnings;
use Time::Piece;

my $current_date = undef;
my $result = {};

while (my $line = <DATA>) {
  if ($line =~ /^\A\s*\[\*.+\s*(2021.*)\]/) {
      $current_date = $1;
  }
  $result->{$current_date}++;
}


my @sorted_date = sort {  Time::Piece->strptime($a, '%Y/%m/%d') <=>  Time::Piece->strptime($b, '%Y/%m/%d') } keys %$result;

for my $date (@sorted_date) {
    print "$date $result->{$date}\n";
}


__DATA__
[** 2021/12/3]
  今日も
  1日
[** 2021/12/2]
   オハヨッ
....

Perl__DATA__以下に書いたテキストを<DATA>で読めるので、Scrapboxからかき集めた分報をDATA以下にコピっています。 それを素朴な集計方法で数え上げて、最後に日付順にソートして表示します。

実行するとこんな感じ

❯ perl note.pl | head -4
2021/4/8 503
2021/4/9 11
2021/4/12 260
2021/4/14 256

これをグラフ化したいので、学生時代から慣れ親しんでいるgnuplotでシュッとグラフを作ります。matplotlib? 俺はgnuplotのほうが慣れてるんだ...。

❯ gnuplot

        G N U P L O T
        Version 5.4 patchlevel 2    last modified 2021-06-01

        Copyright (C) 1986-1993, 1998, 2004, 2007-2021
        Thomas Williams, Colin Kelley and many others

        gnuplot home:     http://www.gnuplot.info
        faq, bugs, etc:   type "help FAQ"
        immediate help:   type "help"  (plot window: hit 'h')

Terminal type is now 'qt'
gnuplot> set term svg

Terminal type is now 'svg'
Options are 'size 600,480 fixed enhanced font 'Arial,12' butt dashlength 1.0 '
gnuplot> set output 'out.svg'
gnuplot> set xdata time
gnuplot> set timefmt '%Y/%m/%d'
gnuplot> plot '<perl note.pl' using 1:2 with line
gnuplot> exit

ということでできたのがこれです。

GnuplotProduced by GNUPLOT 5.4 patchlevel 2 0 100 200 300 400 500 600 04/01/21 05/01/21 06/01/21 07/01/21 08/01/21 09/01/21 10/01/21 11/01/21 12/01/21 01/01/22 '<perl note.pl' using 1:2 '<perl note.pl' using 1:2

見ていると入社当時は盛り上がっていたものの、9月から口数が少なくなり、11月は一般人みたいなツイート数になってましたね..。 最近ツイート数が上がってきているので盛り上がってきているという感じなきがする。 初期が長めなのは環境構築のログがはられていたりするからっぽかった。

可視化してみると色々見れて便利ですね。ここまで書いてmackerelのサービスメトリックに日毎に送信すると面白いのでは? みたいな気持ちになったので、調べたところ、過去のデータは送信できなさそう? なので次回にご期待ください。

明日はid:mizdraさんです。