コントリビュート¶
httptap へのコントリビュートを歓迎します!このガイドは始めるのに役立ちます。
行動規範¶
このプロジェクトは Contributor Covenant Code of Conduct に従っていることに注意してください。参加することで、あなたはこの規範を遵守することが期待されます。
はじめに¶
前提条件¶
- Python 3.10 以上(CPython)
- uv パッケージマネージャー
- Git
開発環境のセットアップ¶
- リポジトリをフォークしてクローンする:
- 依存関係をインストールする:
- インストールを検証する:
開発ワークフロー¶
テストの実行¶
完全なテストスイートを実行する:
カバレッジ付きで実行する:
カバレッジレポートを表示する:
コード品質¶
リンティング¶
Ruff リンターを実行する:
問題を自動修正する:
フォーマット¶
フォーマットをチェックする:
コードを自動フォーマットする:
型チェック¶
mypy を実行する:
ベンチマークの実行¶
パフォーマンスベンチマークは pytest-codspeed を使用し、CI で自動的に実行されます:
# ベンチマークをローカルで実行する(正しさを検証、パフォーマンスデータなし)
uv run pytest tests/test_benchmarks.py --codspeed
# ローカルで実測時間を計測する、結果テーブル付き
uv run pytest tests/test_benchmarks.py --codspeed --codspeed-mode=walltime
# CodSpeed なしでベンチマークを実行する(通常のテストとして)
uv run pytest tests/test_benchmarks.py
ベンチマークは、models、formatters、utils、および exporter モジュールにわたる純粋な計算関数をカバーします。CI は CPU 命令(simulation)とメモリ割り当て(memory)を計測します。
CI を待たずにローカルで最適化を確認するには --codspeed-mode=walltime を使用してください; ベンチマークごとにおよそ 2 秒かかります。実測時間の数値は共有ハードウェア上では本質的にノイズが多いため、CI は代わりに simulation に依存します — ローカルの walltime 結果は、CI が報告する値としてではなく、方向性を示すシグナルとして扱ってください。
ローカルでの実行¶
変更をテストする:
または editable モードでインストールする:
変更を加える¶
ブランチの命名¶
説明的なブランチ名を使用してください:
feature/add-http2-support- 新機能fix/tls-timeout-issue- バグ修正docs/update-api-reference- ドキュメントrefactor/extract-parser- コードのリファクタリング
コミットメッセージ¶
conventional commits 形式に従ってください:
種類:
feat- 新機能fix- バグ修正docs- ドキュメントの変更refactor- コードのリファクタリングtest- テストの追加/更新chore- メンテナンス作業perf- パフォーマンスの改善
例:
feat(cli): add --timeout flag for request timeout
Add command-line option to specify custom timeout for HTTP requests.
Defaults to 20 seconds if not specified.
Closes #123
fix(tls): handle certificate expiry edge case
Fix crash when certificate expiry date is in the past.
Now properly reports negative days and warns user.
Fixes #456
コードスタイル¶
Google Python Style Guide に従ってください:
- すべての関数シグネチャに型ヒントを使用する
- すべての公開 API に docstring を書く
- 行を 120 文字未満に保つ
- 文字列にはダブルクォートを使用する
- PEP 8 の命名規則に従う
例:
def resolve_hostname(host: str, timeout: float = 5.0) -> tuple[str, str]:
"""Resolve hostname to IP address.
Args:
host: Hostname to resolve.
timeout: Maximum time to wait in seconds.
Returns:
Tuple of (ip_address, family).
Raises:
DNSError: If resolution fails.
"""
pass
テストのガイドライン¶
- すべての新機能にテストを書く
- コードカバレッジを維持または改善する
- 説明的なテスト名を使用する
- 外部依存関係(DNS、TLS、HTTP)をモックする
- 成功と失敗の両方のケースをテストする
例:
def test_analyzer_follows_redirects(mock_http_client):
"""Test that analyzer follows redirect chains correctly."""
analyzer = HTTPTapAnalyzer(follow_redirects=True)
steps = analyzer.analyze_url("https://httpbin.io/redirect/3")
assert len(steps) == 4 # Initial + 3 redirects
assert steps[-1].response.status == 200
プルリクエストのプロセス¶
- feature ブランチを作成する:
- 変更を加えてコミットする:
- フォークにプッシュする:
-
プルリクエストを作成する:
- httptap リポジトリ に移動する
- 「New Pull Request」をクリックする
- ブランチを選択する
- PR テンプレートに記入する
PR チェックリスト¶
提出する前に、以下を確認してください:
- テストが通る(
uv run pytest) - コードがフォーマットされている(
uv run ruff format .) - リンターが通る(
uv run ruff check) - 型チェックが通る(
uv run mypy httptap) - ドキュメントが更新されている(必要な場合)
- CHANGELOG.md が更新されている(重要な変更の場合)
- コミットメッセージが conventional 形式に従っている
ドキュメント¶
ドキュメントの更新¶
ドキュメントは docs/ ディレクトリにあります:
ドキュメントをローカルでビルドする:
以下で表示する: http://127.0.0.1:8000
ドキュメントの標準¶
- 明確で簡潔な言葉を使用する
- コード例を含める
- 例を現実的かつ実用的に保つ
- 適切な Markdown フォーマットを使用する
- すべてのコード例をテストする
コントリビュートの領域¶
Good First Issues¶
good first issue というラベルの付いた issue を探してください - これらは初心者に優しいものです。
Help Wanted¶
help wanted というラベルの付いた issue は、私たちが支援を歓迎する優先事項です。
コントリビュートのアイデア¶
- HTTP/3 サポート - 最新のプロトコルバージョンへの拡張
- より多くのエクスポート形式 - CSV、XML、Prometheus メトリクス
- 追加の可視化 - フレームグラフ、チャート
- パフォーマンスの最適化 - より高速な DNS、コネクションプーリング
- より詳細な TLS 情報 - OCSP、証明書チェーンの分析
- カスタムレポーター - Slack、webhook 通知
- 追加のプロトコル - WebSocket、gRPC のタイミング
ヘルプを得る¶
- GitHub Issues - バグ報告と機能リクエスト
- Discussions - 質問と一般的な議論
- Discord - リアルタイムチャット(近日公開)
謝辞¶
コントリビューターは以下で認められます:
- CHANGELOG.md
- GitHub Contributors ページ
- リリースノート
httptap へのコントリビュートありがとうございます!🎉