Skip to content

Latest commit

 

History

History
16 lines (12 loc) · 2.07 KB

api-design.md

File metadata and controls

16 lines (12 loc) · 2.07 KB

APIデザイン ガイドライン

Rust 以外の言語の API

VOICEVOX CORE の主要機能は Rust で実装されることを前提としており、他の言語のラッパーでのみの機能追加はしない方針としています。これは機能の一貫性を保つための方針です。

ただし機能追加ではない範囲で、各言語の習慣に適合するような変更は積極的に行っていきます。例えば:

  • AudioQueryといったJSONで表現可能なデータ型は、PythonならPydantic、JavaScriptならZodといったライブラリを使って表現すべきです。
    • Rust APIとやりとりする際はJSONを介して変換します。
  • StyleIdといったnewtypeは、そのままnewtypeとして表現するべきです。
  • オプショナルな引数は、キーワード引数がある言語であればキーワード引数で、ビルダースタイルが一般的な言語であればビルダースタイルで表現すべきです。
  • Synthesizer::renderrange: std::ops::Range<usize>を引数に取っています。Range<usize>にあたる型が標準で存在し、かつそれが配列の範囲指定として用いられるようなものであれば、それを使うべきです。
    • ただし例えばPythonでは、sliceを引数に取るのは慣習にそぐわないためstart: int, stop: intのようにすべきです。
    • もしRange<usize>にあたる型が標準で無く、かつRustの"start"/"end"やPythonの"start"/"stop"にあたる明確な言葉が無いのであれば、誤解が生じないよう"end_exclusive"のように命名するべきです。