GitHub Contributions Graphを使ったクリエイティブなテクニック
GitHubのcontributions graphは、単なる活動記録の受動的な表示以上のものです。開発者プロフィールの最も閲覧されるページの1つに表示される、ライブデータの可視化です。適切な設定を行えば、アニメーション化され、テーマが適用され、自動更新される、本当に興味深いものに変えることができます。フロントエンド開発者がどのように実現しているか、ご紹介します。
重要なポイント
- GitHubは、検証済みメールアドレスに紐づいたデフォルトブランチまたは
gh-pagesブランチへのコミット、およびforkでないリポジトリでのissue、PR、discussionのみをcontributionとしてカウントします。 - SVGはプロフィールカスタマイズの基盤です。クリーンにスケールし、CSSスタイリングをサポートし、ネイティブでアニメーションを埋め込めます。
- GitHub snakeアニメーションは、日次のGitHub Actionsワークフローによって動作し、contribution calendarを自動更新されるアニメーショングラフィックに変換します。
github-readme-stats、github-readme-streak-stats、github-profile-summary-cardsなどのツールは、プロフィールREADMEに直接埋め込めるライブSVGカードを生成します。- GitHub Actionsを介して生成ロジックをセルフホスティングすることで、サードパーティサービスの障害からプロフィールビジュアルを保護できます。
Contributions Graphの実際の仕組み
カスタマイズを始める前に、ルールを正しく理解しましょう。コミットがカウントされるのは、GitHubアカウントにリンクされた検証済みメールアドレスに関連付けられており、リポジトリのデフォルトブランチまたはgh-pagesブランチに反映された場合のみです。issue、pull request、discussionは、forkでないリポジトリでのみカウントされます。contributionのタイムスタンプはソースに依存します。コミットはコミットメタデータ内のタイムゾーンを使用し、GitHub上で作成されたissueやpull requestはブラウザのタイムゾーンを使用します。プライベートcontributionは、プロフィール設定で有効にしない限り、デフォルトで非表示になります。
このグラフは実際の活動を反映しています。スコアではなく、操作すべきものでもありません。以下で紹介するテクニックは、その実データをよりクリエイティブに表現するためのものです。
GitHub Contributions Graph SVG:カスタマイズの基盤
SVGは、GitHub contributions graphのカスタマイズを可能にするフォーマットです。SVGはベクターベースであるため、どのサイズでもクリーンにスケールし、CSSスタイリングをサポートし、ネイティブでアニメーションを埋め込むことができます。プロフィールビジュアルを生成するツール(統計カード、streak カウンター、contribution graph)は、ほぼすべてこの理由でSVGを出力します。
GitHubプロフィールREADMEにSVGを埋め込むと、本質的にはMarkdownページに自己完結型のスタイル可能なグラフィックを直接注入することになります。これが、他のすべてが構築される技術的基盤です。
GitHub Snakeアニメーションの設定
GitHub snakeアニメーションは、最も広く使用されているGitHub contributions graphのトリックです。contribution calendarを読み取り、セルを食べていくヘビのアニメーションSVGを生成します。実際のcontributionデータがゲームに変わります。
これを自動化するGitHub Actionsワークフローは以下の通りです:
name: Generate Snake Animation
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
generate:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: Platane/snk@v3
with:
github_user_name: ${{ github.repository_owner }}
outputs: |
dist/github-snake.svg
dist/github-snake-dark.svg?palette=github-dark
- uses: crazy-max/ghaction-github-pages@v4
with:
target_branch: output
build_dir: dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
デプロイ後、プロフィールREADMEに以下のように埋め込みます:

ワークフローは毎日スケジュール実行されるため、手動更新なしでアニメーションが最新の状態を保ちます。
Discover how at OpenReplay.com.
追加する価値のあるGitHub Profile READMEビジュアライゼーション
snake以外にも、プロフィール用のクリーンで自動更新されるSVGカードを生成するツールがいくつかあります:
- github-readme-stats — 統計カードとトップ言語の表示。複数の組み込みテーマと、URLクエリ文字列によるカスタムカラーパラメータをサポートします。
- github-readme-streak-stats — 現在および最長のcontribution streakに特化。URLパラメータで高度に設定可能です。
- github-profile-summary-cards — リポジトリと言語別のcontribution graph内訳を含む、一連のサマリーカードを生成します。
これらはすべて、SVGを返すホストされたサービスを指すURLを埋め込むことで機能します。READMEに画像を配置するだけで、自動的に更新されます。
ビジュアルを正確かつ最新に保つ
最もクリーンなアプローチは、GitHub Actionsをスケジュール(日次または週次)で使用して、自分でホストするアセットを再生成することです。サードパーティサービスの場合、SVGは動的に提供されますが、GitHubの画像キャッシュにより表示の更新が遅れる可能性があります。また、サービスがオンラインであり続けることに依存します。
完全な制御が必要な場合は、GitHub Action内で生成ロジックをセルフホストし、出力SVGを専用ブランチにプッシュします。これにより、外部サービスがダウンしてもプロフィールビジュアルが壊れることはありません。
避けるべきこと
コミットの日付を遡らせたり、contribution数を人為的に水増ししたりするテクニックは避けてください。不正確であるだけでなく、プロフィールをレビューする人に対して実際の作業を誤って伝えることになります。目標は、実データのクリエイティブな表現であり、捏造された記録ではありません。
まとめ
contributions graphは小さなキャンバスですが、毎日自動更新されるものです。snakeアニメーション、streakカード、またはテーマ付き統計表示の設定には午後の時間がかかりますが、無期限に実行されます。実際に見る価値のあるプロフィールを作るには、妥当なトレードオフです。
よくある質問
デフォルトでは表示されません。プライベートcontributionは公開プロフィールから非表示になっています。プロフィール設定に移動してPrivate contributionsオプションをチェックすることで有効にできます。これにより、リポジトリ名や詳細を明らかにすることなく、活動数が表示されます。
はい、snakeアニメーションはcontributionの数に関係なく生成され、実行されます。contribution calendar上に存在するデータを単純に反映します。疎なグラフは短いアニメーションを生成しますが、正しく機能します。
github-readme-statsやgithub-readme-streak-statsなどのほとんどのツールは、URLクエリ文字列を通じて直接テーマ選択とカスタムカラーパラメータをサポートしています。ソースコードをforkしたり変更したりすることなく、背景色、テキスト色、リング色などを設定できます。
いいえ。ワークフローは、GitHub Actionsがすべてのリポジトリに自動的に提供する組み込みのGITHUB_TOKENシークレットを使用します。ワークフローのスコープ外の他のアカウントやプライベートリポジトリのデータにアクセスする必要がない限り、追加のトークン設定は不要です。
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.