貢献ガイド#
haniwers プロジェクトへの貢献に興味を持っていただきありがとうございます。このドキュメントでは、プロジェクトへの貢献方法を説明します。
プロジェクトに連絡する#
バグ報告、機能要望、質問などがある場合は以下の方法で連絡できます:
GitLab Issues: qumasan/haniwers/issues
Issue を作成する#
バグ報告や機能要望は、GitLab Issues で管理しています。
Issue 作成手順#
CLI から作成(推奨)#
# glab CLI を使用
glab issue create --template issue
Web UI から作成#
GitLab Issues ページにアクセス
「New issue」をクリック
テンプレートから「issue」を選択
必要な情報を記入して作成
Issue テンプレート#
プロジェクトでは .gitlab/issue_templates/issue.md のテンプレートを用意しています。以下のセクションを含めてください:
概要: 何が問題か、何を実現したいか
期待される動作: あるべき動作
現在の動作: 実際の動作(バグの場合)
再現手順: 問題を再現する手順
環境情報: OS、Pythonバージョンなど
開発ワークフロー#
1. リポジトリをクローンする#
基本的なクローン方法#
デフォルトの main ブランチをクローンします:
git clone https://gitlab.com/qumasan/haniwers.git
cd haniwers
SSHでクローン(推奨)#
SSHキーが設定されている場合は以下を使用します:
git clone git@gitlab.com:qumasan/haniwers.git
cd haniwers
特定のタグを使用する#
リリースバージョンを指定してクローンする場合:
# 1.7.0 などの特定のタグをクローン
git clone --branch 1.7.0 https://gitlab.com/qumasan/haniwers.git
cd haniwers
浅いクローン(git history を短縮)#
大きなリポジトリの場合、ダウンロード時間を短縮できます:
# 最新 1 コミットのみを取得
git clone --depth 1 https://gitlab.com/qumasan/haniwers.git
cd haniwers
# 特定のタグで浅いクローン
git clone --branch 1.7.0 --depth 1 https://gitlab.com/qumasan/haniwers.git
cd haniwers
既存のクローンから特定のタグに切り替える#
すでにクローンしている場合、タグを切り替えられます:
# 利用可能なタグを確認
git tag -l
# 特定のタグに切り替え
git switch 1.7.0 --detached
# タグの詳細を確認
git show 1.7.0
注意: タグに切り替えるとデタッチドヘッド状態になります。本格的な開発にはブランチの使用をオススメします:
# タグからブランチを作成して開発
git switch -c feature-from-1.7.0 1.7.0
2. 依存関係をインストールする#
poetry install --with docs,dev
詳細は開発環境セットアップを参照してください。
3. 開発ブランチを作成する#
ブランチ命名規則#
ブランチ名は以下のルールにしたがってください:
シンプルで内容がわかる名前
アルファベットを使用(日本語不可)
プリフィックス形式:
prefix-branch-name✅ 良い例:
feat-awesome,fix-threshold-bug,docs-update-readme❌ 悪い例:
feat/awesome,fix/xxx
ブランチの作成#
# ブランチを作成
git branch feat-new-feature
# ブランチを確認
git branch
4. Git Worktree で作業スペースを作成する(推奨)#
git worktree を使うと、ブランチごとに隔離された作業環境を作成できます。
# 作業スペースを作成
git worktree add ../worktrees/feat-new-feature feat-new-feature
# 作業スペースに移動
cd ../worktrees/feat-new-feature
# 依存関係をインストール
poetry install
なぜ git worktree を使うのか?#
ブランチごとの作業内容が隔離される
複数のブランチを同時に開発できる
git stashやgit popが不要ディレクトリを変更するだけでブランチを切り替えられる
5. 開発する#
# テストを実行
poetry run pytest
# コードフォーマット
poetry run ruff format .
# 静的解析
poetry run ruff check .
# pre-commit フックを実行
poetry run pre-commit run --all-files
詳細はテストガイドラインを参照してください。
6. コミットを作成する#
このプロジェクトでは Conventional Commits 形式を採用しています。
Commitizen を使用(推奨)#
# ファイルをステージング
git add 変更したファイル
# Commitizen で対話的にコミット
cz c
手動でコミット#
git commit -m "feat(module): add new feature description"
コミットタイプ#
feat: 新機能fix: バグ修正docs: ドキュメントのみの変更style: コードの意味に影響しない変更(スペース、フォーマットなど)refactor: リファクタリングperf: パフォーマンス改善test: テストの追加・修正build: ビルドシステムや依存関係の変更ci: CI設定ファイルの変更chore: その他の変更
破壊的変更#
破壊的変更がある場合は、タイプの後に ! を追加します:
git commit -m "feat(api)!: remove deprecated endpoint"
7. Pre-commit フックで事前チェック#
# pre-commit をインストール(初回のみ)
pre-commit install
# すべてのファイルをチェック
pre-commit run --all-files
pre-commit の設定は .pre-commit-config.yaml で確認できます。
8. マージリクエスト(MR)を作成する#
リモートにプッシュ#
# メインブランチの変更を取り込む
git fetch origin
git rebase origin/main # または git merge origin/main
# リモートにプッシュ
git push --set-upstream origin feat-new-feature
MRを作成#
CLIから作成(推奨)#
glab mr create --target-branch main --template draft
WebUIから作成#
プッシュ後、ターミナルに表示されるGitLabのMR作成リンクをクリックします。
MRテンプレート#
プロジェクトでは .gitlab/merge_request_templates/draft.md のテンプレートを用意しています。以下のセクションを含めてください:
Summary: 変更の概要(1-3 bullet points)
Test plan: テスト計画のチェックリスト
Related Issues: 関連する Issue(
Closes #123形式で自動クローズ)
MR 作成時のルール#
目的や変更内容を記述: 何を変更したか、なぜ変更したかを明確に
レビュアーを指名: 適切なレビュアーを指定
ラベルを設定:
feature,bug,documentationなどIssue との関連付け:
Closes #123で Issue を自動クローズ
9. コンフリクトが発生した場合#
# rebase 中にコンフリクトが発生
git rebase origin/main
# CONFLICT メッセージが表示される
# 1. 衝突したファイルを確認
git status
# 2. ファイルをエディタで開いて修正
# <<<<<, =====, >>>>> の区切りを確認して意図した内容に修正
# 3. 修正したファイルをステージング
git add 修正したファイル
# 4. rebase を再開
git rebase --continue
# コンフリクトがすべて解消するまで繰り返す
# rebase を中断したい場合
git rebase --abort
10. 作業スペースを削除する#
MR がマージされたら、作業スペースとブランチを削除します。
# メインブランチに移動
cd ../../haniwers
# メインブランチを最新状態にする
git fetch --prune
git pull
# worktree を確認
git worktree list
# worktree を削除
git worktree remove ../worktrees/feat-new-feature
# ブランチを削除
git branch -d feat-new-feature
バージョン管理とリリース#
バージョンのバンプ#
プロジェクトでは Commitizen を使用してセマンティックバージョニングを行います。
# バージョン確認(dry-run)
poetry run cz bump --dry-run
# バージョンをバンプしてチェンジログを更新
poetry run cz bump --changelog --check-consistency
# タグをプッシュ
git push origin --tags
自動的に以下が更新されます:
pyproject.toml:versionsrc/haniwers/__init__.py:__version__CHANGELOG.md
コーディング規約#
Python スタイル#
PEP 8 に準拠
Ruff でフォーマットと静的解析
型ヒント: 可能な限り使用
Docstring: 公開関数・クラスには必須
命名規則#
変数・関数:
snake_caseクラス:
PascalCase定数:
UPPER_CASE
コードの例#
from typing import Optional
class ThresholdScanner:
"""Threshold scanning functionality.
This class provides methods for scanning threshold values
and analyzing cosmic ray detection data.
"""
def scan_thresholds(
self,
start_value: int,
end_value: int,
step: int = 10
) -> list[int]:
"""Scan threshold values within the specified range.
Args:
start_value: Starting threshold value
end_value: Ending threshold value
step: Step size for scanning (default: 10)
Returns:
List of scanned threshold values
"""
# Implementation here
pass
テスト要件#
すべての新機能にはテストを追加
バグ修正には再現テストを追加
カバレッジ目標: 80%以上
テストは unit/integration に分類
詳細はテストガイドラインを参照してください。
ドキュメント要件#
コードの変更に伴い、以下のドキュメントを更新してください:
API ドキュメント: Docstring の更新
ユーザードキュメント: 使い方の変更がある場合
CHANGELOG.md: 重要な変更点の記録
README.md: プロジェクト概要の変更がある場合
質問やサポート#
わからないことがあれば、遠慮なく質問してください:
Issue で質問: GitLab Issues
MR でコメント: レビュー時にコメントで質問
開発者に連絡: プロジェクトメンバーに直接連絡
貢献してくださるすべての方に感謝します!