Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

追加: CONTRIBUTING.md リリース #1119

Merged
merged 18 commits into from
Jun 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 69 additions & 33 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# 貢献者ガイド
**このガイドラインは現在工事中です。**

VOICEVOX ENGINE はオープンソースプロジェクトです。本プロジェクトは活発に開発されており、その成果は製品版 VOICEVOX へも反映されています。VOICEVOX ENGINE はコミュニティの皆さんからのコントリビューションを歓迎しています。
本ガイドは開発方針・プルリクエスト手順・レビュープロセスなど、コントリビュータの皆さんの一助となる情報を提供します。
本ガイドは開発方針・プルリクエスト手順・レビュープロセスなど、コントリビュータの皆さんの一助となる情報を提供します。

## 目次
VOICEVOX ENGINE の方針に関するガイドは以下から確認できます。

VOICEVOX ENGINE の方針に関するガイドは以下から確認できます。

- [開発ガバナンス](#開発ガバナンス)
- [バージョニング](#バージョニング)
Expand All @@ -18,7 +18,7 @@ VOICEVOX ENGINE の方針に関するガイドは以下から確認できます
- [テスト](#テスト)
- [ライセンス](#ライセンス)

コントリビュータの目的に応じたガイドは以下から確認できます。
コントリビュータの目的に応じたガイドは以下から確認できます。

- [プルリクエストを送る](#プルリクエストを送る)
- バグ
Expand All @@ -32,7 +32,7 @@ VOICEVOX ENGINE の方針に関するガイドは以下から確認できます
- [環境構築](#環境構築)
- [コード実行](#コード実行)

開発にあたって頻繁に利用されるコマンドは以下から確認できます。
開発にあたって頻繁に利用されるコマンドは以下から確認できます。

- [依存ライブラリをインストールする](#依存ライブラリをインストールする)
- [音声ライブラリ無しで実行](#音声ライブラリ無しで実行)
Expand All @@ -49,27 +49,32 @@ VOICEVOX ENGINE の方針に関するガイドは以下から確認できます
- [脆弱性を診断する](#脆弱性を診断する)

## 開発ガバナンス

VOICEVOX ENGINE は GitHub ベースのオープンな開発をおこなっています。
コミュニティの皆さんからの機能要望・バグ報告・質問を GitHub Issues で受け付けています。またプルリクエストも歓迎しています。Issue を解決するプルリクエストを作成される際は、別の方と同じ Issue に取り組むことを避けるため、Issue 側で取り組み始めたことを伝えるか、最初に Draft プルリクエストを作成することを推奨しています。
コミュニティの皆さんからの機能要望・バグ報告・質問を GitHub Issues で受け付けています。またプルリクエストも歓迎しています。Issue を解決するプルリクエストを作成される際は、別の方と同じ Issue に取り組むことを避けるため、Issue 側で取り組み始めたことを伝えるか、最初に Draft プルリクエストを作成することを推奨しています。

より気軽な開発を可能にする目的で、[VOICEVOX 非公式 Discord サーバー](https://discord.gg/WMwWetrzuh)にて開発の議論や雑談を行っています。気軽にご参加ください。

## バージョニング

セマンティックバージョニングを採用しています。
現段階ではメジャーバージョンが 0 であり、破壊的変更を含むマイナーアップデートを許容しています。大きな機能追加・変更ではマイナーバージョンを、バグ修正やキャラクター追加ではパッチバージョンを更新しています。

変更内容の概要は各バージョンの [Releases](https://github.com/VOICEVOX/voicevox_engine/releases) にて確認できます。
変更内容の概要は各バージョンの [Releases](https://github.com/VOICEVOX/voicevox_engine/releases) にて確認できます。

## ブランチ戦略

ブランチ戦略としてリリースブランチ付き GitHub Flow を採用しています。
プルリクエストは基本的に `master` ブランチへマージされます。例外として製品版 VOICEVOX の更新時期にはリリースブランチ `release-X.Y` が用意され、一時的に `master` から分岐します。リリースに必要なコミットが `release-X.Y` へおこなわれ、このブランチからリリースがおこなわれます。リリース直後の hotfix 等は `release-X.Y` に対してまずマージされ、リリースの後にブランチごと `master` へマージされます。

## プルリクエスト

全てのコード変更はプルリクエストを介しておこなわれます。
プルリクエストは [GitHub Pull requests](https://github.com/VOICEVOX/voicevox_engine/pulls) で一括管理され、[レビュー](#レビュー)を経てマージされます。VOICEVOX ENGINE はコミュニティの皆さんからのプルリクエストを歓迎しています。
プルリクエストは [GitHub Pull requests](https://github.com/VOICEVOX/voicevox_engine/pulls) で一括管理され、[レビュー](#レビュー)を経てマージされます。VOICEVOX ENGINE はコミュニティの皆さんからのプルリクエストを歓迎しています。

### プルリクエストを送る
以下の手順でプルリクエストを作成できます。

以下の手順でプルリクエストを作成できます。

- [開発環境](#環境構築)を用意する
- このレポジトリをフォークし、`master` ブランチからプルリクエスト用ブランチを作る
Expand All @@ -81,39 +86,49 @@ VOICEVOX ENGINE は GitHub ベースのオープンな開発をおこなって
- ブランチをリモートへプッシュし、このレポジトリに対してプルリクエストを作成する

## レビュー

全てのプルリクエストはレビューを経てマージされます。
レビューは [GitHub Pull requests](https://github.com/VOICEVOX/voicevox_engine/pulls) 上でオープンにおこなわれ、コミュニティの誰でもコメント等の形で参加可能です。レビューを経たのちに `master` (あるいは `release-X.Y`) ブランチへマージされます。マージには VOICEVOX チームによる approve が必須です。
レビューは [GitHub Pull requests](https://github.com/VOICEVOX/voicevox_engine/pulls) 上でオープンにおこなわれ、コミュニティの誰でもコメント等の形で参加可能です。レビューを経たのちに `master` (あるいは `release-X.Y`) ブランチへマージされます。マージには VOICEVOX チームによる approve が必須です。

## バグ
GitHub Issues を用いてバグを一元管理しています。

GitHub Issues を用いてバグを一元管理しています。

### バグを探す
[`バグ` ラベルでのフィルタリング](https://github.com/VOICEVOX/voicevox_engine/issues?q=is%3Aissue+is%3Aopen+label%3Aバグ)により既知バグの一覧にアクセスできます。バグの修正状況は各バグの issue にて確認できます。

[`バグ` ラベルでのフィルタリング](https://github.com/VOICEVOX/voicevox_engine/issues?q=is%3Aissue+is%3Aopen+label%3Aバグ)により既知バグの一覧にアクセスできます。バグの修正状況は各バグの issue にて確認できます。

### バグを報告する
既知バグの一覧にないバグ(新規バグ)を見つけた場合、GitHub Issues で報告が可能です。VOICEVOX ENGINE は新規バグの報告を歓迎しています。

既知バグの一覧にないバグ(新規バグ)を見つけた場合、GitHub Issues で報告が可能です。VOICEVOX ENGINE は新規バグの報告を歓迎しています。

### バグを直す
バグの修正は Issue 上で議論され、プルリクエストを用いて修正されます。プルリクエストを作成する手順は "[プルリクエストを送る](#プルリクエストを送る)" でガイドされています。VOICEVOX ENGINE はバグを修正するプルリクエストを歓迎しています。

バグの修正は Issue 上で議論され、プルリクエストを用いて修正されます。プルリクエストを作成する手順は "[プルリクエストを送る](#プルリクエストを送る)" でガイドされています。VOICEVOX ENGINE はバグを修正するプルリクエストを歓迎しています。

## 機能向上
GitHub Issues を用いて機能向上を一元管理しています。

GitHub Issues を用いて機能向上を一元管理しています。

### 機能向上タスクを探す
[`機能向上` ラベルでのフィルタリング](https://github.com/VOICEVOX/voicevox_engine/issues?q=is%3Aissue+is%3Aopen+label%3A機能向上)により新規機能追加や仕様変更の一覧にアクセスできます。機能向上の実装状況は各機能向上の issue にて確認できます。

[`機能向上` ラベルでのフィルタリング](https://github.com/VOICEVOX/voicevox_engine/issues?q=is%3Aissue+is%3Aopen+label%3A機能向上)により新規機能追加や仕様変更の一覧にアクセスできます。機能向上の実装状況は各機能向上の issue にて確認できます。

### 機能を要望する
既存提案一覧にない機能向上案がある場合、GitHub Issues で提案が可能です。VOICEVOX ENGINE は機能向上の提案を歓迎しています。

既存提案一覧にない機能向上案がある場合、GitHub Issues で提案が可能です。VOICEVOX ENGINE は機能向上の提案を歓迎しています。

### 機能を向上させる(実装する)
機能向上は Issue 上で議論され、プルリクエストを用いて実装されます。プルリクエストを作成する手順は "[プルリクエストを送る](#プルリクエストを送る)" でガイドされています。VOICEVOX ENGINE は機能向上を実装するプルリクエストを歓迎しています。

機能向上は Issue 上で議論され、プルリクエストを用いて実装されます。プルリクエストを作成する手順は "[プルリクエストを送る](#プルリクエストを送る)" でガイドされています。VOICEVOX ENGINE は機能向上を実装するプルリクエストを歓迎しています。

## 環境構築

`Python 3.11.3` を用いて開発されています。
インストールするには、各 OS ごとの C/C++ コンパイラ、CMake が必要になります。

### 依存ライブラリをインストールする

シェルで以下のコマンドを実行することで依存ライブラリがインストールされます。

```bash
Expand All @@ -125,11 +140,13 @@ pre-commit install -t pre-push
```

## 音声ライブラリ
OSS 版 VOICEVOX ENGINE は製品版 VOICEVOX の音声ライブラリを同梱していないため、音声合成がモック版となっています。

製品版 VOICEVOX の音声ライブラリは、利用規約を遵守の上、以下のいずれかの手順で導入できます。これにより「ずんだもん」等の製品版キャラクター音声を合成できます。
OSS 版 VOICEVOX ENGINE は製品版 VOICEVOX の音声ライブラリを同梱していないため、音声合成がモック版となっています。

製品版 VOICEVOX の音声ライブラリは、利用規約を遵守の上、以下のいずれかの手順で導入できます。これにより「ずんだもん」等の製品版キャラクター音声を合成できます。

### 音声ライブラリを導入する

音声ライブラリは以下のいずれかの手順で導入できます。

#### 製品版 VOICEVOX を用いた音声ライブラリの導入
Expand Down Expand Up @@ -171,7 +188,9 @@ python run.py --help
```

### 音声ライブラリ無しで実行

音声ライブラリを導入しなかった場合あるいは軽量のモック版音声合成を利用したい場合、シェルで以下のコマンドを実行することでエンジンが実行されます。

```bash
python run.py --enable_mock
```
Expand Down Expand Up @@ -199,10 +218,12 @@ VV_OUTPUT_LOG_UTF8=1 python run.py
```

## コードを編集する

### パッケージ

`poetry` によってパッケージを管理しています。また `pip` ユーザー向けに `requirements-*.txt` を生成しています。
依存パッケージは「ビルドにより音声ライブラリと一体化しても、音声ライブラリのライセンスと衝突しない」ライセンスを持つ必要があります。
主要ライセンスの可否は以下の通りです。
主要ライセンスの可否は以下の通りです。

- MIT/Apache/BSD-3: OK
- LGPL: OK (コアと動的分離されているため)
Expand Down Expand Up @@ -232,58 +253,68 @@ poetry export --without-hashes --with build -o requirements-build.txt
```

## 静的解析

### 型検査

型検査を採用しています。
目的は安全性の向上であり、チェッカーには `mypy` を採用しています。
目的は安全性の向上であり、チェッカーには `mypy` を採用しています。

型検査の実行は "[静的解析を一括実行する](#静的解析を一括実行する)" 節を参照してください。
型検査の実行は "[静的解析を一括実行する](#静的解析を一括実行する)" 節を参照してください。

### リント

自動リントを採用しています。
目的は安全性の向上であり、リンターには `flake8` と `isort` を採用しています。
目的は安全性の向上であり、リンターには `flake8` と `isort` を採用しています。

リンターの実行は "[静的解析を一括実行する](#静的解析を一括実行する)" 節を参照してください。
リンターの実行は "[静的解析を一括実行する](#静的解析を一括実行する)" 節を参照してください。

### 整形

コード自動整形を採用しています。
目的は可読性の向上であり、フォーマッタには `black` を採用しています。
目的は可読性の向上であり、フォーマッタには `black` を採用しています。

フォーマッタの実行は "[静的解析を一括実行する](#静的解析を一括実行する)" 節を参照してください。
フォーマッタの実行は "[静的解析を一括実行する](#静的解析を一括実行する)" 節を参照してください。

なお、ドキュメント自動整形は現段階では採用していません。メンテナが定期的に `prettier` で整形しています。

### タイポ検査

タイポ検査を採用しています。
目的は可読性の向上であり、チェッカーには [`typos`](https://github.com/crate-ci/typos) を採用しています。誤判定やチェックから除外すべきファイルがあれば[設定ファイルの説明](https://github.com/crate-ci/typos#false-positives)に従って `pyproject.toml` を編集してください。
ローカルへの `typos` 導入は各自の環境に合わせて公式ドキュメントを参照してください。ローカルへの導入が難しい場合、プルリクエスト時に GitHub Actions で自動実行される `typos` の結果を参照してください。

#### タイポを検査する
シェルで以下のコマンドを実行することでタイポが検査されます。

シェルで以下のコマンドを実行することでタイポが検査されます。

```bash
typos
```

### 静的解析を一括実行する

シェルで以下のコマンドを実行することで静的解析([型検査](#型検査)・[リント](#リント)・[整形](#整形))が一括実行されます。
この際、可能な範囲で自動修正がおこなわれます。
この際、可能な範囲で自動修正がおこなわれます。

```bash
pysen run format lint
```

## テスト

自動テストを採用しています。
長期的に安定した開発を目指して単体テスト・End-to-End テスト共に充実させており、値の不変を保証するスナップショットテストも採用しています。テストランナーには `pytest` を採用しています。
長期的に安定した開発を目指して単体テスト・End-to-End テスト共に充実させており、値の不変を保証するスナップショットテストも採用しています。テストランナーには `pytest` を採用しています。

### コードをテストする
シェルで以下のコマンドを実行することでテストが走ります。

シェルで以下のコマンドを実行することでテストが走ります。

```bash
python -m pytest
```

### スナップショットを更新する

コード変更により想定される出力値が変わり、スナップショットの更新が必要となる場合があります。
シェルで以下のコマンドを実行することでスナップショットが更新されます。

Expand All @@ -292,8 +323,9 @@ python -m pytest --snapshot-update
```

### 脆弱性を診断する

`safety` を用いた脆弱性診断により依存パッケージの安全性を確保しています。
シェルで以下のコマンドを実行することで脆弱性が診断されます。
シェルで以下のコマンドを実行することで脆弱性が診断されます。

```bash
safety check -r requirements.txt -r requirements-dev.txt -r requirements-build.txt
Expand All @@ -317,6 +349,8 @@ LIBONNXRUNTIME_PATH="/path/to/libonnxruntime" \
pyinstaller --noconfirm run.spec
```

TODO: Docker 版のビルド手順を GitHub Actions をベースに記述する

### Github Actions でビルド

fork したリポジトリで Actions を ON にし、workflow_dispatch で`build-engine-package.yml`を起動すればビルドできます。
Expand Down Expand Up @@ -350,8 +384,9 @@ PYTHONPATH=. python tools/make_docs.py
不具合の報告、機能要望、改善提案、質問は<a href="https://github.com/VOICEVOX/voicevox_engine/issues/new">Issue</a>の方に報告してください。

### Issue の状態

VOICEVOX ENGINE では issue の状態遷移を以下のように整理しています。
各状態は GitHub の `状態:〇〇` ラベルと対応しています(例: [`状態:実装者募集`](https://github.com/VOICEVOX/voicevox_engine/labels/状態:実装者募集))。
各状態は GitHub の `状態:〇〇` ラベルと対応しています(例: [`状態:実装者募集`](https://github.com/VOICEVOX/voicevox_engine/labels/状態:実装者募集))。

```mermaid
---
Expand All @@ -371,6 +406,7 @@ stateDiagram-v2
opened --> ロードマップ : 停滞
ロードマップ --> opened
```

NOTE: ロードマップ化すべきかの棚卸し判定は、issue が `必要性議論` で 30 日、`設計`・`実装者募集`・`実装` で 180 日停滞した場合におこなう。`実装` の停滞時にはサポートも検討する。

## ライセンス
Expand Down
Loading