Unified toolkit to fetch, normalize, score, and export OSS contribution metrics.
Project description
oss-metrics-kit
OSSの貢献データを「収集 → 正規化 → 指標算出 → 出力」まで一気通貫で扱うための基盤ライブラリ。
現状: スタブ実装(CLI/エントリポイント/型モデルのみ)。ここから段階的に機能を追加します。
インストール(開発モード)
以下はいずれかを実行してください。Conda/venv など任意の仮想環境上で実行を推奨します。
pip install -e .もしくはpython -m pip install -e .
インストール後、以下でCLIのヘルプを確認できます。
ossmk --help
注意: インストールせずに ossmk は使えません。開発中に直接実行したい場合は pip install -e . を行うか、PYTHONPATH=src を設定しつつエントリポイント経由で呼び出してください。
開発環境(uv推奨)
超高速パッケージマネージャー「uv」を利用すると、依存解決・仮想環境の同期が簡単になります。
- uvのインストール(どれか一つ)
- macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh - Homebrew:
brew install uv - pipx:
pipx install uv
- 仮想環境の作成と同期
uv venv .venv(任意)→source .venv/bin/activate- 依存同期(本体+開発用):
uv sync --dev - すべてのエクストラも入れる場合:
uv sync --dev --extra all
- 実行
ossmk --help(アクティベート済みの場合)- もしくは環境を活性化せずに:
uv run ossmk --help
PyPIインストール(利用者向け)
- 安定版のインストール:
pip install oss-metrics-kit - Postgres連携込み:
pip install "oss-metrics-kit[exporters-postgres]"
インストール後に ossmk --help が動作すればOKです。
あなたのGitHubアカウントで試す
前提: GitHubトークンを環境に設定します(read-only 権限で十分)。
export GITHUB_TOKEN=ghp_xxx # or GH_TOKEN
分析(サマリ+スコア出力)
ossmk analyze-user <your_github_login> --out -
スコアをPostgresに保存(任意)
export OSSMK_PG_DSN="postgresql://user:pass@host:5432/db"
ossmk analyze-user <your_github_login> --save-pg
プロプライエタリな重み付け(任意)
export OSSMK_RULES_FILE=/absolute/path/to/private/rules.toml
ossmk analyze-user <your_github_login> --out -
使い方(概要)
- バージョン表示:
ossmk version - GitHubユーザーを分析(並列取得・since/GraphQL対応):
ossmk analyze-user <login> --since 90d --api auto --out - <login>は GitHub のユーザー名(プロフィールURLがhttps://github.com/<login>の<login>部分。例:torvalds,octocat,refactoring-my-path)- 単一リポのイベント取得:
ossmk fetch --provider github --repo owner/name --since 30d --out - - スコア保存(DB切替え可能):
ossmk save postgresql://... --input scores.jsonまたはossmk save sqlite:///./metrics.db --input scores.json
ストレージはDSNで切り替え(Postgres/SQLite)。Parquetはオプション機能(分析用)です。
LLMベースのルール支援(任意)
- ルール提案:
ossmk rules-llm --input events.json --provider openai --model gpt-4o-mini --out rules.toml - 必要なエクストラ:
pip install "oss-metrics-kit[llm-openai]"またはoss-metrics-kit[llm-anthropic] - 詳細:
docs/LLM_RULES.md
セキュリティと運用の要点
- トークンは環境変数(
GITHUB_TOKEN/GH_TOKEN)で管理し、ログに出さない。 - レート制限はバックエンドの責務。例として
ossmk.security.ratelimit.RateLimiterを提供(本番はRedis等で共有化)。 - 私有ルール(TOML)はリポ外に保管し、
OSSMK_RULES_FILEで指定。rules=auto|defaultで自動ロード。 - 依存はエクストラで分離(Postgres/Parquet/LLM)。最小構成で運用可能。
バックエンド統合の詳細は docs/INTEGRATION.md を参照。開発時の型/リント方針は docs/dev.md。
一般ユーザー向けの詳しい使い方は docs/usage.md を参照。
環境変数(まとめ)
GITHUB_TOKENorGH_TOKEN: GitHub APIトークン(必須)OSSMK_RULES_FILE: 私有ルールTOMLへのパス(任意)OSSMK_PG_DSNorDATABASE_URL: Postgres DSN(保存時に使用する場合)REDIS_URL: Redisレートリミッタで使用(任意)OSSMK_MAX_SINCE_DAYS:sinceの最大日数(デフォルト180)
PyPI公開手順(メンテナ向け)
準備
- PyPIアカウント作成 → API Token発行(スコープ: Upload)。
- ローカルでビルド&公開に使うツールを準備。
バージョニング/タグ
pyproject.tomlのversionを SemVer で更新git commit→git tag vX.Y.Z→git push --tags
ビルド(uv 推奨)
uv build # sdist(.tar.gz) + wheel(.whl) を dist/ に出力
# TestPyPIに公開(推奨)
export PYPI_TOKEN_TEST=... # pypi- で始まるトークン
uv publish --repository testpypi --token "$PYPI_TOKEN_TEST"
# 本番PyPIに公開(Tagと一致する版を公開)
export PYPI_TOKEN=...
uv publish --token "$PYPI_TOKEN"
twineを使う場合(代替)
python -m pip install build twine
python -m build # sdist + wheel を dist/ に出力
# アーカイブの健全性チェック(署名/メタデータ)
python -m twine check dist/*
# TestPyPI
twine upload --repository testpypi -u __token__ -p "$PYPI_TOKEN_TEST" dist/*
# PyPI
twine upload -u __token__ -p "$PYPI_TOKEN" dist/*
注意点
- バージョンはSemVerで更新し、同じ版の再アップロードは不可です。
pyproject.tomlのメタデータ(URL/ライセンス/説明)が公開ページに反映されます。- sdist と wheel の両方を用意すると、利用者環境でのインストール成功率が上がります。
- TestPyPI で動作確認→本番PyPIへ昇格の順を推奨します。
設計ハイライト
src/レイアウト+py.typedによる型配布。- CLIはTyperで薄く、ビジネスロジックは
ossmk.coreに集約。 - providers/exporters/storage/rules はエントリポイントでプラガブル。
トラブルシューティング
-
pip._vendor.tomli.TOMLDecodeError: Invalid initial character for a key part (at line 1, column 2)- 原因:
pyproject.tomlの先頭セクションが不正([build-system]の直前に余計な文字がある) - 対処: 先頭行を
[build-system]に修正済み。リトライ前にキャッシュを避けるためpip install -e .を再実行してください。
- 原因:
-
ossmk: command not found- 原因: パッケージ未インストール、または別環境でインストール。
- 対処: リポジトリ直下で
pip install -e .を実行。Conda/venv を使用している場合は、同じ環境をactivate済みか確認。 - uv利用時:
uv sync --dev後にsource .venv/bin/activate、またはuv run ossmk --helpを使用。
ライセンス
Apache-2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oss_metrics_kit-0.0.1.tar.gz.
File metadata
- Download URL: oss_metrics_kit-0.0.1.tar.gz
- Upload date:
- Size: 36.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d9ecc1fcbaea809946ca76a4d75d828936a35fda5dcff91675dff07142df980
|
|
| MD5 |
ef3691af1de9a804c8324b1a6ad520c5
|
|
| BLAKE2b-256 |
ef1abaebc90b21b6b5d9012492b9564711b438479510976898049f0b8eef0ef1
|
Provenance
The following attestation bundles were made for oss_metrics_kit-0.0.1.tar.gz:
Publisher:
publish.yml on refactoring-my-path/oss-metrics-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oss_metrics_kit-0.0.1.tar.gz -
Subject digest:
3d9ecc1fcbaea809946ca76a4d75d828936a35fda5dcff91675dff07142df980 - Sigstore transparency entry: 522129468
- Sigstore integration time:
-
Permalink:
refactoring-my-path/oss-metrics-kit@4403b68d3864a854eef1cff1c07ea01f939d66d2 -
Branch / Tag:
refs/tags/vX.Y.Z - Owner: https://github.com/refactoring-my-path
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4403b68d3864a854eef1cff1c07ea01f939d66d2 -
Trigger Event:
release
-
Statement type:
File details
Details for the file oss_metrics_kit-0.0.1-py3-none-any.whl.
File metadata
- Download URL: oss_metrics_kit-0.0.1-py3-none-any.whl
- Upload date:
- Size: 35.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f3d56c25ea8fa455f287a5acd2a68bf2714bf262d6b1ab9113f469015546ceb
|
|
| MD5 |
bd919d1504ae8d23926ed62acab7c266
|
|
| BLAKE2b-256 |
9dadda15eea7728dc80c65e428c93d9515954130c9a6cc51ef10968130204566
|
Provenance
The following attestation bundles were made for oss_metrics_kit-0.0.1-py3-none-any.whl:
Publisher:
publish.yml on refactoring-my-path/oss-metrics-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oss_metrics_kit-0.0.1-py3-none-any.whl -
Subject digest:
5f3d56c25ea8fa455f287a5acd2a68bf2714bf262d6b1ab9113f469015546ceb - Sigstore transparency entry: 522129477
- Sigstore integration time:
-
Permalink:
refactoring-my-path/oss-metrics-kit@4403b68d3864a854eef1cff1c07ea01f939d66d2 -
Branch / Tag:
refs/tags/vX.Y.Z - Owner: https://github.com/refactoring-my-path
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4403b68d3864a854eef1cff1c07ea01f939d66d2 -
Trigger Event:
release
-
Statement type: