engineers_blogこんにちは。マネーフォワード福岡拠点でインターンをしています長島です。普段は『マネーフォワードクラウド経費』のサーバーサイドの開発を担当しています。最近マネーフォワード社内で、エンジニアの日々の「開発の調子」や「アウトプット量」を可視化してみたいという話がありました。そこで、ちゃんとしたダッシュボードなどを作る前に、ひとまずデータの中身を覗いてみようという事でちょっとやってみました。やるエンジニアの開発の調子をどう測るという話ですが、やはりまず思いつくのはGitのログを見る事かなと。Guide)が非常に充実しており、コミット履歴プルリク履歴デプロイ履歴などをリポジトリ単位で簡単に取得できるようになっています。上記のいずれの項目もエンジニアの日々の開発の調子を測る上で重要な指標になりそうですが、最終的に各コミットの編集内容レベルまで追跡していきたい気持ちがあったので今回はコミット履歴について調べていくことにしました。notebookを利用しました。エンジニア以外のメンバーがデータをいじりたい時の事を考えるとGASを使う手もあったのですが、分析用データの前処理でPythonのPandasが使えると何かと助かるという事もあって今回はこの環境でいってみようと思います。可視化用のスクリプトの例まずは会社(Organization)の全レポジトリの名前を確認しておきましょう。tokenを発行して該当部分に埋め込んでください。pd.DataFrame(dict_org_repositories)print(df_org_repositories["name"])続いて今名前を取得したレポジトリ達の中からいくつか選んで、直近52週間の1週間毎のコミット回数の推移を可視化していきます。df_weekly_commits一旦ここまででデータの中身を確認します。weekly_commits_dfs["repo_a"].head()days列はリストになっていますが、これは要素の一つ一つが日曜から土曜の各曜日における合計コミット数を表しています。このままでも必要なカラムを取り出せばグラフは作れるのですが、今回は全レポジトリのコミット数の推移をPandasのdf.plotが提供する積み上げ棒グラフでまとめて表示するために新たなDataFrameを用意します。中身はこんな感じaccum_bar_df.head()ここまで来ればもうプロットするだけです。コミット回数の推移は以下のような感じで。)ax.set_xlabel("")ax.set_ylabel("Commits")plt.show()変化率は普通に折れ線グラフで表示しましょう。(%)")plt.show()普通にmatplotを使う場合と比べ、Pandasのdf.plotを利用すると沢山の項目をまとめて可視化する場合のスクリプトが非常に簡潔になるので良いですね。普通に折れ線でプロットするとこうなります。コミットされていましたが、最近は徐々にrepo_bとcの方の開発にウェイトが置かれ始めているのが見て取れます。続いて上のグラフと同期間で時間帯によるコミット数の大小や曜日毎のコミット回数の差がないかを調べてみました。大体同じような手順になるのでコードは割愛して結果だけお見せします。月水木はrepo_aに似たダブルピークがある火水のコミット回数が他の曜日より明らかに多いこちらは朝から夕方にかけて単調に増えていく。repo_aの開発チームより夜型の人が多いのかな...?と、こんな感じで各プロダクトチームのエンジニアの生態が見えてきました。それぞれのチーム毎に開発が捗る時間帯や曜日に微妙に差があるようなので、そういったゴールデンタイムにはエンジニアの皆さんにあまり会議など入れないようにして開発に集中させてあげた方が良いかもしれませんね。APIを利用して各レポジトリへのコミット数に関するデータを取得・可視化し、各プロダクトチームの開発の調子を見たり、開発が捗っている曜日・時間帯などを知る事が出来ました。request回数、デプロイ回数、etc)が手に入ります。今回のようなレポジトリ単位で集計されたデータだけでなくエンジニア一人一人についてのGitの使用履歴にまで分解し、コミットが生成される平均的な時間間隔などを計算できれば「Aさんは今月のコミット時間間隔が先月比で5%短くなっているので開発スピードが上がってきている」などといったエンジニアの開発力の伸び具合を定量的に知ることが出来るかも知れません。今後はそういったより詳細な分析に手を伸ばしていこうと思います。最後にマネーフォワードでは、エンジニアを募集しています。ご応募お待ちしています。