GitHub の芝生(Contribution Graph)に関する資料が意外と見当たらなかったので、自身の勉強も兼ねてまとめてみることにしました。
対象読者
- 「芝生」「草を生やす」の意味がわからない方(「入門」あたりを読んでください)
- 「リポジトリ」「ブランチ」など基本は知っていると仮定します(解説しません)
- 芝生に関する小ネタを読みたい方(知っているところは読み飛ばしてください)
芝生入門
芝生とは?草を生やすとは?
まず、GitHub には Contributions という「過去一年間でこれだけ活動したよ」を可視化する機能があります。
出典: Viewing contributions on your profile - User Documentation
ここは毎日熱心に活動しているとキレイな緑色が並びます。その見た目が芝生みたいにカラフルだからか、日本では 芝生 と呼びます(正確な起源や由来はわかりません)。
この芝生に緑色を増やすには、Contribution(GitHub上での活動のうち芝生に反映される活動)を行う必要があります。この行為を 草を生やす といいます。
草を生やすにはどうしたらいい?
では、GitHub 上で何をすれば草が生えるのでしょうか。詳細は GitHub のヘルプ Viewing contributions on your profile - User Documentation に書いてありますが、ざっくり言うと、
- master ブランチあるいは gh-pages ブランチへのコミット
- Issue や Pull Request の新規
です。
XX contributions in private repositories. って何?
芝生の緑色マスをクリックすると「その日はこんなリポジトリにn回コミットしたよ」的な情報が表示されますが、たまに「2 contributions in private repositories.」みたいな情報が表示されることがあります。
これは「詳細は伏せるけどプライベートリポジトリで2回ほど草生やしたよ」という意味です。プライベートなので詳細は何も公開したくない、でも芝生には反映したいという心理を汲み取ってくれる機能です。
この機能は、デフォルトでは無効になっています(つまり芝生にすら反映されません)。有効にするには設定が必要です。これもヘルプ Publicizing or hiding your private contributions on your profile - User Documentation に書いてありますが、簡単に書いておくと、
- 右上のアバターアイコン部分 → Settings → Contributions
の Include private contributions on my profile にチェックを入れることで有効になります。
芝生応用
入門はこのくらいにして、ここからは芝生に関するネタを雑多に取り上げます。
芝生が禿げる時
リポジトリを削除すると、そこに紐付いていた Contribution もなくなります。つまり 芝生が禿げます。
(詳細は後述しますが)芝生アートを消したい場合は、このテクニックを使います。芝生アート用のリポジトリを作って、散々楽しんだらリポジトリ毎消してやることで元通りです。
黄色い芝生
芝生が黄色になる時があります。ハロウィンです。詳しくは Twitter で当時の状況を見てみてください。
黄色だと草とは呼べませんね。何と呼びましょうか。落ち葉?
芝生アート
Ascii Art や Emoji Art があるように、芝生で絵を描く遊びもあったりします。正式な用語は知らない(たぶん無い)のですが、便宜上 芝生アート と書くことにします。
芝生アートを描くツールはいくつか存在します。
- gelstudios/gitfiti: abusing github commit history for the lulz
- taichi/gontributions: GitHub Contribution Graph Hack
- jbranchaud/commitart: Modifying the commit history of git repositories in order to write messages in GitHub's contribution graph.
-
ben174/git-draw: Allows you to draw in your github heatmap
- 芝生に直接草を描いて、最後に Render ボタンを押すとその絵を反映するコマンドがエクスポートされるという Chrome 拡張
どうやって実現しているかですが、最後の git-draw を見た感じだと、過去の日付でコミットするみたいです。でも草の濃さはどうやって調整するんでしょう?……コードリーディングの題材としても面白いかもしれませんね。
ちなみに、GitHub への反映は即時ではないようです(?)。 gitfiti の README を引用すると、
Wait... Seriously, you'll probably need to wait a day or two for the gitfiti to show in your commit graph.
とあります。
草を絶やさない方法
ズラリと草を敷き詰めた芝生に憧れるものですが、忙しかったりすると簡単に空いちゃいます。白マスがスカスカ表示されてると格好悪いです。
草を絶やさない方法は色々あると思いますが、たとえばこんな方法があります。
1回だけ Commit と Push を行うスクリプトを作っておいて、それをジョブスケジューラ(cronとか)で毎日流すようにする、というアイデアのようです。
芝生を画像化したい
PNG 画像で出力してくれるサービスがあります。
ちなみに 解説記事 と ソース(GitHub) もあります。
芝生が SVG で取得できることが肝のようです。その気になれば色々応用できそうですね。
GitHub ガチ勢はどんな芝生を持っているのか
調べてみたら普通に見つかりました。
Follower 636 人以上のユーザー限定(芝生で遊んでる勢がヒットしないよう弾いてる?)で Contributions 上位 256 位を算出した記事です。
1位は 11088 Contributions。単純計算で 1日30Contributions の年中無休です。(芝生遊び等でズルしてないのだとして)どんな生活をしたらそうなるんでしょうか。想像もつきません。
そもそも芝生で遊ぶのって OK なん?
私も早速芝生で遊んでみようと思ったのですが、そもそも GitHub が許してくれているのかが不明です。改めて Terms of Service に目を通してみました。
芝生遊びを直接的に禁じる文言は無さそうですが、間接的には 3. Conduct Restrictions の
use our servers for any form of excessive automated bulk activity (for example, spamming), or relay any other form of unsolicited advertising or solicitation through our servers, such as get-rich-quick schemes;
このあたりでしょうか。たとえば「Contributions の値をカンストさせたいので Commit と Push を行う処理を無限ループで回して放置しとく」「何ならマルチスレッドやら複数起動やらでブーストさせる」行為は該当しそうですね。
また G. API Terms にて API の Abuse と Overuse も禁止しているので、API を使いまくって芝生をいじるのもダメでしょう。
ちなみに芝生アートについては、(上述したものは)Push は一回だけで済むため問題は無いと思います。
おわりに
芝生ネタを取り上げてみました。色々遊んでみたくなりますね。