{"id":49270511,"url":"https://github.com/4okimi7uki/self-reposcope","last_synced_at":"2026-04-25T13:25:50.514Z","repository":{"id":297778380,"uuid":"997854742","full_name":"4okimi7uki/self-reposcope","owner":"4okimi7uki","description":"Gain insights into your GitHub repos, public or private — powered by Rust and token auth.","archived":false,"fork":false,"pushed_at":"2026-03-30T01:50:25.000Z","size":2353,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-30T05:12:26.378Z","etag":null,"topics":["analyzer","github","private-repository","repository-stats","rust","stats"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/4okimi7uki.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-07T10:33:38.000Z","updated_at":"2026-03-30T01:50:28.000Z","dependencies_parsed_at":"2025-06-29T11:18:35.353Z","dependency_job_id":"713f0896-a4a3-41c7-90cc-2f30c656d1b9","html_url":"https://github.com/4okimi7uki/self-reposcope","commit_stats":null,"previous_names":["4okimi7uki/self-reposcope"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/4okimi7uki/self-reposcope","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4okimi7uki%2Fself-reposcope","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4okimi7uki%2Fself-reposcope/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4okimi7uki%2Fself-reposcope/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4okimi7uki%2Fself-reposcope/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/4okimi7uki","download_url":"https://codeload.github.com/4okimi7uki/self-reposcope/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4okimi7uki%2Fself-reposcope/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32263544,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T09:15:33.318Z","status":"ssl_error","status_checked_at":"2026-04-25T09:15:31.997Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analyzer","github","private-repository","repository-stats","rust","stats"],"created_at":"2026-04-25T13:25:48.761Z","updated_at":"2026-04-25T13:25:50.493Z","avatar_url":"https://github.com/4okimi7uki.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Self-Reposcope 🔍\n\n![Badge](https://hitscounter.dev/api/hit?url=https%3A%2F%2Fgithub.com%2F4okimi7uki%2Fself-reposcope\u0026label=Visitors\u0026icon=suit-heart-fill\u0026color=%23d63384)\n![Rust](https://img.shields.io/badge/Language-Rust-orange?logo=rust)\n[![License](https://img.shields.io/github/license/4okimi7uki/self-reposcope)](https://github.com/4okimi7uki/self-reposcope/blob/main/LICENSE)\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/4okimi7uki/self-reposcope/blob/main/output/full_languages.svg\" alt=\"stats\"/\u003e\n\u003c/p\u003e\n\n-   GitHub の **言語使用量を SVG で可視化**する CLI ツール（Rust 製）  \n    _A lightweight CLI tool built with Rust to visualize your GitHub language stats as SVG charts._\n-   **プライベートリポジトリ**にも対応  \n    _Supports **private repositories**_\n\n## What's New\n\n-   Added support for excluding specific languages via `--excluded-languages` or `EXCLUDED_LANGUAGES` 🎉 (Thanks @Snootic, PR #21)\n\n## できること / Features\n\n-   GitHub API を用いて、自分のリポジトリを網羅的に集計  \n    _Aggregates all your repositories using the GitHub API_\n\n-   各言語の使用量（バイト数）を積み上げ棒グラフで SVG 出力  \n    _Outputs an SVG stacked bar chart based on language usage (in bytes)_\n\n-   **プライベートリポジトリ**も対象（アクセストークン使用）  \n    _Supports **private repositories** (with access token)_\n\n-   GitHub Actions での自動集計＆更新  \n    _Automatically updates via GitHub Actions_\n\n## 背景 / Background\n\nGitHub の使用言語統計を可視化する「Stats 系」リポジトリは多く存在します。  \nしかし、その多くは **public リポジトリ限定**だったり、**導入手順が複雑**だったりと、気軽に使えるものが少ないと感じていました。\n\nたとえば、会社アカウントと個人アカウントを使い分けている開発者にとっては、  \n**private リポジトリ中心の活動が可視化されない**という課題があります。  \n自分の技術スタックをもっとアピールしたいけど、それができない ——\n\nそこで、**private リポジトリにも対応し、安全かつ「1 クリックで導入できる」ような体験を提供すること**を目指して、このツール（self-reposcope）を開発しました。\n\n---\n\nThere are many \"GitHub Stats\" repositories out there that visualize language usage in your repositories.  \nHowever, most of them are **limited to public repositories** or have **complex installation steps**,  \nwhich makes them less accessible for casual use.\n\nFor developers who use both personal and company accounts,  \n**activity in private repositories often goes unrepresented** —  \neven though that’s where most of their work happens.  \nYou might want to showcase your real tech stack — but you simply can’t.\n\nSo I built **self-reposcope**,  \na tool that supports **private repositories** and offers a **safe, one-click setup experience**.\n\n## 使い方 / Usage\n\n### 🚀 GitHub Actions で自動更新（おすすめ）/ Automatic Updates via GitHub Actions (Recommended)\n\nRepository にて、下記のように設定すると`./output`を生成し、SVG を出力します。  \n_By setting up the following workflow in your GitHub repository, self-reposcope will automatically generate SVG files in the `./output` directory._\n\n1. Repository の `Settings \u003e Secrets and variables \u003e Actions \u003e [Repository secrets] \u003e [New repository secret]` で  \n   Name: `REPOSCOPE_TOKEN`, Secret: `ghp_XXXXXXXXXXXXXXX`  \n   (`repo` 権限付き GitHub Token) を追加  \n   _Go to `Settings \u003e Secrets and variables \u003e Actions \u003e [Repository secrets]`,  \n   then add a new secret with:_\n\n    - _**Name**: `REPOSCOPE_TOKEN`_\n    - _**Value**: your personal access token (with `repo` scope)_\n\n2. [`.github/workflows/reposcope.yml`](https://github.com/4okimi7uki/self-reposcope/blob/main/.github/workflows/reposcope.yml) を作成し、以下のように記述：  \n   _Create a workflow file at `.github/workflows/reposcope.yml` with the following content:_\n\n```bash\nname: Update Language Stats\n\non:\n    schedule:\n        - cron: \"0 0 * * 1\" # Every Monday\n    workflow_dispatch:\n\njobs:\n    build:\n        runs-on: ubuntu-latest\n        permissions:\n            contents: write\n\n        steps:\n            - name: Checkout target repo\n              uses: actions/checkout@v3\n\n            - name: Download self-reposcope binary from GitHub Release\n              shell: bash\n              run: |\n                  curl -L https://github.com/4okimi7uki/self-reposcope/releases/latest/download/self-reposcope -o self-reposcope\n                  chmod +x ./self-reposcope\n\n            - name: Run self-reposcope CLI\n              shell: bash\n              run: |\n                  mkdir -p output\n                  ./self-reposcope --token ${{ secrets.REPOSCOPE_TOKEN }}\n\n            - name: Commit and Push updated SVGs\n              shell: bash\n              env:\n                  GH_PAT: ${{ secrets.REPOSCOPE_TOKEN }}\n              run: |\n                  git config --global user.name 'github-actions[bot]'\n                  git config --global user.email 'github-actions[bot]@users.noreply.github.com'\n                  git add output/*.svg\n                  if git diff --cached --quiet; then\n                    echo \"No changes to commit\"\n                  else\n                    git commit -m \"update: language stats svg\"\n                    git push https://x-access-token:${GH_PAT}@github.com/${{ github.repository }} HEAD:main\n                  fi\n```\n\n3. 手動実行(`Actions` \u003e `Update Language Stats` \u003e `Run workflow`) または 自動で毎週更新されます。差分がなければ新規出力されません。\n\n    _You can run the workflow manually (`Actions \u003e Update Language Stats \u003e Run workflow`), or it will automatically run every Monday.\n    If there are no changes in the output, nothing will be committed._\n\n### 🧪 ローカルで試す / Try It Locally (Rust CLI)\n\n\u003e 実行環境 / Requirements\n\u003e\n\u003e -   Rust 1.87.0+ (with `cargo`)\n\n1. リポジトリに対してアクセス権のある GitHub token を用意  \n   _**Prepare a GitHub personal access token** with access to your repositories_\n2. このリポジトリをクローン  \n   _**Clone this repo**_\n3. `.env`ファイルを作成して、GitHub token を設定:  \n   _**Add your GitHub token** to `.env`_\n\n```env\nGITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxx\n```\n\n4. 下記コマンドで実行:  \n   _**Run with:**_\n\n```bash\ncargo run --release\n```\n\n5. `./output`に`*.svg`ファイルが出力されていることを確認  \n   _Check that the `*.svg` files are generated in the `./output` directory_\n\n### ⚙️ Option: 言語の除外 / Excluding Specific Languages\n\n特定の言語を可視化から除外したい場合は、以下のいずれかの方法で指定できます：\n\n-   CLI オプション `--excluded-languages`\n-   環境変数 `EXCLUDED_LANGUAGES`\n\n_You can exclude specific languages either by using the `--excluded-languages` CLI option or the `EXCLUDED_LANGUAGES` environment variable._\n\nFor example:\n\n`CLI`\n\n```bash\n# Specify directly\n./self-reposcope --token ${{ secrets.REPOSCOPE_TOKEN }} --excluded-languages \"Jupyter Notebook, HTML, CSS\"\n\n# Using GitHub Secrets\n./self-reposcope --token ${{ secrets.REPOSCOPE_TOKEN }} --excluded-languages ${{ secrets.EXCLUDED_LANGUAGES }}\n```\n\n`.env`\n\n```env\nEXCLUDED_LANGUAGES=\"Jupyter Notebook, HTML, CSS\"\n```\n\n\u003e Languages must be separated by commas. Wrap the list in quotes if any language name contains spaces, otherwise it may not be recognized.\n\n## 🤝 Contributors\n\n\u003ca href=\"https://github.com/4okimi7uki/self-reposcope/graphs/contributors\"\u003e\n    \u003cimg src=\"https://contrib.rocks/image?repo=4okimi7uki/self-reposcope\" alt=\"contributors\"\u003e\n\u003c/a\u003e\n\n---\n\n\u003csmall\u003e2025 [Aoki Mizuki](https://github.com/4okimi7uki) – Developed with 🍭 and a sense of fun.\u003c/small\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F4okimi7uki%2Fself-reposcope","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F4okimi7uki%2Fself-reposcope","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F4okimi7uki%2Fself-reposcope/lists"}