社内で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>
で折り畳まれているところを展開すれば具体的なプルリクエストの一覧も見ることができる.
使い方
基本
- まず
bundle install
する GITHUB_TOKEN
環境変数にトークンを指定して実行する-u
で単一ユーザを指定するか, もしくは-o
でOrganizationのメンバーを一括指定できる--render
で出力するMarkdownのテンプレートを指定する- 指定しなかった場合はJSONが出力される
あとは--help
を参照.
GitHub Actionsで半自動化
「今月はこれだけの人たちがOSS貢献してました」というのがやりたかったので, 社内勉強会にコーナーを設けて共有することにした. とはいえ, いちいちコマンドを叩いてMarkdownを貼るのだと, コマンドの仕様をよくわかっている人しかやれず, 僕がやり忘れると途絶えてしまいそう. そこで, 適当なリポジトリとissueテンプレートを作り, issueを立てると自動でコマンドを実行して結果が貼り付けられるようにした.
注意点として, 公開リポジトリでこれをやるとプルリクエスト一覧のところでトラックバックが飛びまくってお騒がせすることになるので, 必ず非公開のリポジトリでやること.
以下は実際に社内用に使ってるやつ(のOrganizationだけ直書きだったのをパラメータ化したもの).
仕組み
もともと, 自分のポートフォリオにOSS貢献を表示するために, GraphQLで情報をいろいろ取ってくるやつを書いていたので, これを流用してちょちょいと整えただけ. 複数ユーザへの対応は単にループで回しているだけだし, GraphQLで引くところで適当な件数の上限がついてるからあまりに貢献の数が多い人がいると漏れが出そうだったり, 雑な作りではある. そもそも, ここまでなんの前提もなく話を進めていたけど「OSS」と言いつつGitHubに限定しているし, 本当
にOSSとして公開されているものか(ライセンスがどうなっているか)も当然見ていない.
なにか気に入らなかったらプルリクしてくれ!