GitHub

GitHub 芝生入門/芝生応用

GitHub の芝生(Contribution Graph)に関する資料が意外と見当たらなかったので、自身の勉強も兼ねてまとめてみることにしました。

対象読者

  • 「芝生」「草を生やす」の意味がわからない方(「入門」あたりを読んでください)
    • 「リポジトリ」「ブランチ」など基本は知っていると仮定します(解説しません)
  • 芝生に関する小ネタを読みたい方(知っているところは読み飛ばしてください)

芝生入門

芝生とは?草を生やすとは?

まず、GitHub には Contributions という「過去一年間でこれだけ活動したよ」を可視化する機能があります。

contributions_graph

出典: 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 があるように、芝生で絵を描く遊びもあったりします。正式な用語は知らない(たぶん無い)のですが、便宜上 芝生アート と書くことにします。

芝生アートを描くツールはいくつか存在します。

どうやって実現しているかですが、最後の 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 は一回だけで済むため問題は無いと思います。

おわりに

芝生ネタを取り上げてみました。色々遊んでみたくなりますね。