個人/組織のOSS貢献を可視化する

社内でOSSへの貢献をもっと奨励していきたいねと話していて, そもそも普段どれくらい貢献できているか知りたくなった. 以前, 自分のポートフォリオに貢献しているOSSのリストを出すのをやっていて, ちょっと改造したら組織内のメンバー全員のものもすぐに出せそうだったのでやってみた. (というのをずっと前にやっていたけど宣伝するのを忘れていた.)

モチベーション

OSSに(趣味にせよ仕事の一部にせよ)貢献している同僚はけっこういるけど, 「こういうのやったよ!」と宣伝してくれない限りあんまりどういう活動をしているのか知らない. 「今月はこれだけの人たちがOSS貢献してました」というのを社内の全エンジニアで眺めてわいわい盛り上がれると, 自分も何かやってみようという気になるだろうし, 「これに手をつけてみたいけど, どこから手をつけたらいいかわからないから詳しそうなあの人に聞いてみよう」となって, ありがたい.

これとは別に#oss-guildという社内Slackチャンネルが誕生して, 普段からOSS活動している人たちが集まってきて聞きたいことが聞ける状況になり, さっそく「初めてOSSに貢献しようと思うんだけど, プルリクエストの出し方に自信がないので助けてほしい」みたいな相談が寄せられたりもした. こうした, 社内のOSS貢献を盛り上げようという取り組みの一環.

どういうものか

ユーザごと

こういう感じのコマンドを叩くと,

GITHUB_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx bundle exec ruby \
    oss_contributions.rb \
    -u tarao \
    --sort=stargazers \
    --from=2020-01-01 --to=2020-10-01 \
    --render=templates/users.md.erb

こういう感じのMarkdownが出力される:

ユーザごとに貢献したリポジトリのサマリがまとめられて, <details>で折り畳まれているところを展開すれば具体的なプルリクエストの一覧も見ることができる.

リポジトリごと

組織内で貢献者の多いリポジトリがわかると面白いんじゃないかと思って, 社内のやつを出してみた(出してみたのはけっこう前なので最新の状況を反映してはいない).

自社で開発しているものや関係者がオーナーのものが上位にくるのは当然として, それ以外だとRenovateAWS CDKが上位にきていて, 社内で積極的に使っていることがわかって面白い.

使い方

基本


  • まずbundle installする
  • GITHUB_TOKEN環境変数トークンを指定して実行する
    • このトークンで見られる情報しか集めない
    • 公開情報しか必要ないはずだからOrganizationに紐づかないbotアカウントのもの等がよい
  • -uで単一ユーザを指定するか, もしくは-oでOrganizationのメンバーを一括指定できる
  • --renderで出力するMarkdownのテンプレートを指定する
    • 指定しなかった場合はJSONが出力される

あとは--helpを参照.

GitHub Actionsで半自動化

「今月はこれだけの人たちがOSS貢献してました」というのがやりたかったので, 社内勉強会にコーナーを設けて共有することにした. とはいえ, いちいちコマンドを叩いてMarkdownを貼るのだと, コマンドの仕様をよくわかっている人しかやれず, 僕がやり忘れると途絶えてしまいそう. そこで, 適当なリポジトリとissueテンプレートを作り, issueを立てると自動でコマンドを実行して結果が貼り付けられるようにした.

注意点として, 公開リポジトリでこれをやるとプルリクエスト一覧のところでトラックバックが飛びまくってお騒がせすることになるので, 必ず非公開のリポジトリでやること.

以下は実際に社内用に使ってるやつ(のOrganizationだけ直書きだったのをパラメータ化したもの).


仕組み

もともと, 自分のポートフォリオにOSS貢献を表示するために, GraphQLで情報をいろいろ取ってくるやつを書いていたので, これを流用してちょちょいと整えただけ. 複数ユーザへの対応は単にループで回しているだけだし, GraphQLで引くところで適当な件数の上限がついてるからあまりに貢献の数が多い人がいると漏れが出そうだったり, 雑な作りではある. そもそも, ここまでなんの前提もなく話を進めていたけど「OSS」と言いつつGitHubに限定しているし, 本当
OSSとして公開されているものか(ライセンスがどうなっているか)も当然見ていない.

なにか気に入らなかったらプルリクしてくれ!

感想

この取り組みによってOSS貢献する人が増えたかどうかはわからないけど, 毎月みんなが貢献している様子を見てわいわいするようにはなった. 「この人このリポジトリさわってるじゃん」「これは○○が××だったのを解決したくてやりました」「いい話」みたいな会話が生まれている.