Skip to content

docs: Java APIの封を解く#1095

Open
qryxip wants to merge 1 commit intoVOICEVOX:mainfrom
qryxip:pr/docs-unseal-java-api
Open

docs: Java APIの封を解く#1095
qryxip wants to merge 1 commit intoVOICEVOX:mainfrom
qryxip:pr/docs-unseal-java-api

Conversation

@qryxip
Copy link
Member

@qryxip qryxip commented May 31, 2025

内容

#1044 で行ったコメントアウトを取り止める。

理由としては、その後結局0.16.0でJava APIをリリースしちゃっているはずなので。

関連 Issue

その他

@qryxip qryxip requested a review from Hiroshiba May 31, 2025 16:25
@Hiroshiba
Copy link
Member

Hiroshiba commented May 31, 2025

javaは「リリースしていないこととして扱う」という状態でしたっけ。
意図がちょっとよくわかってないのですが、Java版を正式リリースするということでしょうか?
もしそうであればこのあたり考えたほうが良いかもです:

  • 破壊的変更はしばらく無さそうか
    • 将来破壊的変更とかあるのではということでややこしいから一旦ペンディングにした過去
  • コード品質は十分か
    • これはjavaすごい分かる人いないと難しそうなので、一旦実験的機能として出すとか、あるいはエイヤで出しちゃうのもありかも
  • ドキュメント品質は十分か
    • 少なくともexampleは無いからCやPythonやRustよりは品質が低そう(kotlin exampleはAndroid用という認識。この認識が違う?)
  • 本当にリリースして大丈夫か
    • 「大丈夫です」と言えるかどうか
    • 言えなそうであれば念の為「なんで封をしたのか」の理由をいろんなissueやPRからさらって来ると安心感が増す(大体忘れてる)
    • あるいは「たぶん大丈夫ってレベルだけど、もし大丈夫じゃなくてもなんとかなるだろうし、問題の規模も小さい気がするからエイヤで出しちゃう」もあり(こっちの温度感?)
    • あるいは「判断をヒホに任せます」ということなら情報収集頑張ります( @qryxip さんもできるようになれると超ありがたい!!)

@qryxip
Copy link
Member Author

qryxip commented Jun 1, 2025

正式リリースするというより、Java API 0.16.0はAndroid限定で既に出ていることにして次はJava API 0.16.1か0.17.0をしれっと出すのがいいのではないかと思っています。その頃には #764 は完成していると思うので、「PC用Java APIのリリース」についてのアナウンスとすればいいかなと。

言えなそうであれば念の為「なんで封をしたのか」の理由をいろんなissueやPRからさらって来ると安心感が増す(大体忘れてる)

当初0.16.0は3月上旬、あるいはその前に出ることが予定されており、時間的にJava APIに対して何かする余裕が一切無いと見做されていたからだと思います。
#545 (comment)

破壊的変更はしばらく無さそうか

0.16.0のリリースが3月末になったことによって思い付く破壊的変更および非破壊的変更(バグ修正やドキュメント)は十分に入れられたと思うので、心残りがあるとすれば #984 ができなかったことくらい、といった感じです。その #984 も今後の破壊的変更ということで後回しにしてよさそうに思います。

git log '--pretty=format:%h %ad %s' --date=format:%Y-%m-%d%z 7e9a3de8^..0.16.0 -- crates/voicevox_core_java_api example/kotlin
ebee8295 2025-03-29+0900 docs: 各言語の表とデータのシリアライズについて追加 (#1049)
8add271a 2025-03-29+0900 feat(java)!: `String uuid` → `UUID uuid` (#1058)
bced8038 2025-03-12+0900 feat!: [Rust] `UserDictWord`のコンストラクトをビルダースタイルに (#999)
b7371841 2025-03-12+0900 ci: [Java(example)] Kotlinのexampleを直し、CIも回す (#994)
61ef63eb 2025-03-12+0900 fix: [Java] `Files.copy`に`REPLACE_EXISTING`を付ける (#1043)
5b5f2342 2025-03-09+0900 build(fix): [Java] `javadoc.options.encoding = 'UTF-8'` (#995)
de4c7993 2025-03-09+0900 fix!: [Java] fix up #802: `SupportedDevices`を移動 (#991)
741f6e30 2025-03-01+0900 feat: いくつかのAPIを露出し、「テキスト音声合成の流れ」を明確に (#1025)
fb2a1e23 2025-02-18+0900 feat!: ユーザー辞書単語のJSON表現をENGINEと同じにする (#1014)
48e93954 2025-02-16+0900 feat!: revert #872 (#1004)
71504d9d 2025-02-12+0900 fix!: various fix for `UserDictWord` (#1002)
ec02a92c 2025-02-11+0900 docs: APIドキュメントの`{Character,Style}Meta`周りの記述を統一 (#996)
ab0ee9ac 2025-02-10+0900 feat: [Python, Java] fix up #832: `Drop`のメッセージをやめる (#993)
7e9a3de8 2025-02-10+0900 docs: 軽く解決可能なTODOとFIXMEを解消 (#992)

コード品質は十分か

コード品質というのがピンと来なかったのですが(ライブラリとしての品質?)これはもう、ユーザーにジャッジして頂くしか手が無いように思えます。実験的機能としたところで稼げる時間は多分無いわけですし、低品質に対するエクスキューズとして「実験的機能」という言葉を使うくらいであれば潔く正式版として出すのが良いんじゃないかと思ってます。

少なくともexampleは無いからCやPythonやRustよりは品質が低そう(kotlin exampleはAndroid用という認識。この認識が違う?)

exampleおよびテストはx86_64で回ってますね。Kotlinはbetter Javaなので、一般的にAndroid専用言語というわけではなさそうかなと。

@Hiroshiba
Copy link
Member

Hiroshiba commented Jun 1, 2025

なるほどです!
色々読ませていただいて、Javaをリリースする方針には賛成寄りな意見になりました。
でもdocsの封を解くだけだとユーザーが混乱する気がするので、色々考えることがありそうに思いました。

まず、ちょっと温度感がずれてそうだったので、僕が思う「気にした方が良さそうなこと」を列挙してみます!
基本的にユーザー目線で判断するのが良いと思います。
ユーザーから見たときどう感じるかを優先度高く考えればOKだと思います。

正式リリースするというより、Java API 0.16.0はAndroid限定で既に出ていることにして次はJava API 0.16.1か0.17.0をしれっと出すのがいいのではないかと思っています。その頃には #764 は完成していると思うので、「PC用Java APIのリリース」についてのアナウンスとすればいいかなと。

すみません、ここちょっとよくわからなかったです 🙇
ユーザーにとってどういう状態になっていることを目指していて、それはどのファイルをどうすれば実現できそうでしょうか?

ちなみに現状は、Android版含めJava版は正式リリースしていない&出していないけど、ソースコードとしては存在するという状態だと思います。
正式リリースしてない・出していない状態だと思う理由は、ドキュメントで案内していないからユーザー視点で存在してないように見えるためです。

これを現状のどのファイルをどう変更して、かつ次のリリースでどうするのかなと・・・!!
(なんとなくつかめているのですが、どのファイルをどうすることが「出ていること」「リリース」になるのかをちょっと考えていただきたく・・・!)

コード品質は十分か

コード品質というのがピンと来なかったのですが(ライブラリとしての品質?)

あっすみません!APIの品質という意図でした!
シグネチャや設計が使いやすい感じになってるかどうか、的な。
APIも含めたライブラリとしての品質を考えるのが良さそうだなと感じました!

これはもう、ユーザーにジャッジして頂くしか手が無いように思えます。実験的機能としたところで稼げる時間は多分無いわけですし、低品質に対するエクスキューズとして「実験的機能」という言葉を使うくらいであれば潔く正式版として出すのが良いんじゃないかと思ってます。

これは経験談なのですが、出したものとユーザーの期待感を揃えておくのは割と重要だと思ってます。(VOICEVOXは「中品質」として出した)
ユーザーの期待を裏切ると、今後出すプロダクトの期待が薄れるんですよね。
自信がないなら素直にそれを伝えておけば使う側も覚悟しながら使えるので、お互い得かなーと思います。

ということで、「実験的機能」にするかどうかは、自信がちょっとあるかないかだと思います!
自信がないなら実験的機能、自信がちょっとあるなら一思いに正式リリースにしましょう!!

少なくともexampleは無いからCやPythonやRustよりは品質が低そう(kotlin exampleはAndroid用という認識。この認識が違う?)

exampleおよびテストはx86_64で回ってますね。Kotlinはbetter Javaなので、一般的にAndroid専用言語というわけではなさそうかなと。

ここで言ってるのはドキュメント品質は十分かですよね(論点の整理)。
Kotlinがどうというより、ユーザーがVOICEVOX COREのドキュメントを見た時にどう見えるかが重要かなと。

まずユーザーから見て「VOICEVOX COREはJavaのexampleが無い」という評価がされなければ間違いなくOKだと思います!
まあ僕たちが用意しているのはkotlinのexampleなので、Javaのexampleではないかなと思ってます。

あとはユーザーから見て、「kotlinのexampleがJavaのexampleと同じくらい有用だ」となればOKだと思います!
kotlinのコードはjavaだけを知ってる初学者からしても有用でしょうか?(個人的にはここがNOなのかもと思ってます。どうだろう・・・?)
あと、kotlin exampleがJavaのexampleになるというのは、初学者からしてもわかりやすいでしょうか?(これも個人的にはNOだと思ってます。まあでもkotlin exampleをREADMEから案内するときに、このexampleはJava向けであることがわかりやすい形で書いておけば、ユーザー視点でわかりやすいはず。)

この辺りをクリアしているか・ケアすれば OK だと思ってます!
(この辺に関してChatGPTに聞いてみたので参考になれば 🙏 )


(その他のこと)

その #984 も今後の破壊的変更ということで後回しにしてよさそうに思います。

なるほどです! 破壊的変更を覚悟するのもありだと思います。
基本的にその分サポートやドキュメントが必要になるので、早く出すメリットが将来の破壊的変更に工数がかかるデメリットを上回っているのであれば OK だと思います!
(個人的には、未完成であっても利用できる状態な方が良いと思うので、メリットが上回ってそうに感じました!)

@Hiroshiba
Copy link
Member

Hiroshiba commented Jun 1, 2025

とりあえず「Java APIをリリースする?」みたいなisuse作るのはどうでしょう?
結構段取りがあると思うので、どこまで終わったのかチェックしやすいかなと。

(どういうタスクがあるかチェックボックスで列挙しておけば、もし作業が大変だった時にsub issueにすれば良いから便利&進捗が分かりやすいかも!)

@qryxip
Copy link
Member Author

qryxip commented Jun 3, 2025

すみません、ここちょっとよくわからなかったです 🙇

「0.16.0はAndroid限定で既に出ていることにして」というのはvoicevox_pjから「0.16.0リリースの際にJava APIも出てました!」という声明を出すみたいなイメージではなく、0.16.1を出すときに破壊的変更は控える、という意味でした。現状、必要そうな破壊的変更は無い認識です。

ちなみに現状は、Android版含めJava版は正式リリースしていない&出していないけど、ソースコードとしては存在するという状態だと思います。
正式リリースしてない・出していない状態だと思う理由は、ドキュメントで案内していないからユーザー視点で存在してないように見えるためです。

0.16.0のリリース内容にjava_package.zipがあります。

jp/hiroshiba/voicevoxcore/voicevoxcore-android/
jp/hiroshiba/voicevoxcore/voicevoxcore-android/maven-metadata-local.xml
jp/hiroshiba/voicevoxcore/voicevoxcore-android/0.17.0-preview.0/
jp/hiroshiba/voicevoxcore/voicevoxcore-android/0.17.0-preview.0/voicevoxcore-android-0.17.0-preview.0.pom
jp/hiroshiba/voicevoxcore/voicevoxcore-android/0.17.0-preview.0/voicevoxcore-android-0.17.0-preview.0.module
jp/hiroshiba/voicevoxcore/voicevoxcore-android/0.17.0-preview.0/voicevoxcore-android-0.17.0-preview.0.aar
jp/hiroshiba/voicevoxcore/voicevoxcore-android/0.17.0-preview.0/voicevoxcore-android-0.17.0-preview.0-javadoc.jar

またドキュメントにおいても以下の箇所に言及が残っている状態ではあります。readmeとかにはありませんが。

下さい。Python APIやJava APIでは`load-onnxruntime`のみに限定しています。

- Rust APIではSerde、Java APIではGSONでの変換時にスキーマに従います。

これは経験談なのですが、出したものとユーザーの期待感を揃えておくのは割と重要だと思ってます。(VOICEVOXは「中品質」として出した)
ユーザーの期待を裏切ると、今後出すプロダクトの期待が薄れるんですよね。
自信がないなら素直にそれを伝えておけば使う側も覚悟しながら使えるので、お互い得かなーと思います。

ということで、「実験的機能」にするかどうかは、自信がちょっとあるかないかだと思います!
自信がないなら実験的機能、自信がちょっとあるなら一思いに正式リリースにしましょう!!

まず私の認識としては、今のJava APIには目立った課題は残っていないはずです。

特に課題は無さそうだけどPython APIやRust APIレベルの「質」になっているか確認できるまで実験的機能のラベルを付けておきましょう、というのを特にマイルストーンを打ち立てるといったこともせずに行うというなら反対であるくらいの気持ちです。
(その場合実験的機能のラベルがずっと付いたままになって、ユーザーの期待値コントロールとしては無意味になるか逆効果になることが予想される)

ここで言ってるのはドキュメント品質は十分かですよね(論点の整理)。
Kotlinがどうというより、ユーザーがVOICEVOX COREのドキュメントを見た時にどう見えるかが重要かなと。

まずユーザーから見て「VOICEVOX COREはJavaのexampleが無い」という評価がされなければ間違いなくOKだと思います!
まあ僕たちが用意しているのはkotlinのexampleなので、Javaのexampleではないかなと思ってます。

あとはユーザーから見て、「kotlinのexampleがJavaのexampleと同じくらい有用だ」となればOKだと思います!
kotlinのコードはjavaだけを知ってる初学者からしても有用でしょうか?(個人的にはここがNOなのかもと思ってます。どうだろう・・・?)
あと、kotlin exampleがJavaのexampleになるというのは、初学者からしてもわかりやすいでしょうか?(これも個人的にはNOだと思ってます。まあでもkotlin exampleをREADMEから案内するときに、このexampleはJava向けであることがわかりやすい形で書いておけば、ユーザー視点でわかりやすいはず。)

Java書いている人でKotlinの名を知らない人はほぼほぼ居ないように感じはしますが、一理あると思いました。Kotlinを書いたのは @sevenc-nanashi さんなので、名無し。さんの意見を伺ってから考えたいです。

もしJava言語のコード例を導入するのであれば選択肢は次の3つですが、1.は(多分ユーザー視点から見ても)煩雑なので、2.か3.にしたいです。

  1. example/kotlinの横にexample/javaを併設
  2. example/kotlinをexample/javaにし、KotlinのコードはJavaに書き換える
  3. example/kotlinをexample/jvmに改名し、App.ktに加えてApp.java(と、余力があればApp.scala)を用意する
    • Kotlinの名は知らなくてもJVMの名はいくらなんでも知っているはず

@sevenc-nanashi
Copy link
Member

あと、kotlin exampleがJavaのexampleになるというのは、初学者からしてもわかりやすいでしょうか?(これも個人的にはNOだと思ってます。まあでもkotlin exampleをREADMEから案内するときに、このexampleはJava向けであることがわかりやすい形で書いておけば、ユーザー視点でわかりやすいはず。)

自分もちょっと怪しいかも?(No寄り)って思いますね。
自分がKotlin exampleだけ作ったのは

  • シンプルに書きやすい
  • ターゲット層がAndroid開発者勢
    • Android開発ではそこそこKotlinが多い

だった記憶があります。

もしJava言語のコード例を導入するのであれば選択肢は次の3つですが、1.は(多分ユーザー視点から見ても)煩雑なので、2.か3.にしたいです。

3はbuild.gradleがしんどくなる気配がするので、多分2の方がいいと思います。

@Hiroshiba
Copy link
Member

Java書いている人でKotlinの名を知らない人はほぼほぼ居ないように感じはしますが

あ、重箱の隅かもなのですが、今回の場合は名前が有名かどうかはあまり関係ない気がしてます!
ユーザーにとってどの程度分かりやすいかかなーと。(ただ名が通ってるだけでも特に何も問題が解決しないはず)

もしJava言語のコード例を導入するのであれば選択肢は次の3つですが、1.は(多分ユーザー視点から見ても)煩雑なので、2.か3.にしたいです。

ちょっと考えたんですが、個人的には3つどれでも良さそうに思いました!
メンテナンス性的には2が一番楽そう?

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

並列したラリーを直列にやるの大変そうな気がしたので、コメントを分割してみました!

@@ -9,10 +9,7 @@
<li><a href="./rust_api/voicevox_core">Rust API</a></li>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(この行に関係ないコメントです)

「0.16.0はAndroid限定で既に出ていることにして」というのはvoicevox_pjから「0.16.0リリースの際にJava APIも出てました!」という声明を出すみたいなイメージではなく、0.16.1を出すときに破壊的変更は控える、という意味でした。

なーるほどです!
であれば、0.16.1を出すときに破壊的変更は控えるは同意です!

@@ -9,10 +9,7 @@
<li><a href="./rust_api/voicevox_core">Rust API</a></li>
Copy link
Member

@Hiroshiba Hiroshiba Jun 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(この行に関係ないコメントです)

0.16.0のリリース内容にjava_package.zipがあります。
またドキュメントにおいても以下の箇所に言及が残っている状態ではあります。readmeとかにはありませんが。

すいません! ここの2つのコメントってどういう意図でしょうか?
この3つのどれかかなと思ってます:

  1. 「現状どういう案内があるのか調べてみたので、せっかくなのでコメントして残しておきます」
  2. 「Javaは0.16.0の時点ですでにドキュメントを書いているということにしましょう」
  3. 「ヒホは0.16.1でJava APIの破壊的変更をしても良いと考えているのかもしれず、それは阻止したい」+2.の内容

2だったら「さすがにドキュメントを書いてるとは言えなそう」、3だったら「0.16.1で破壊的変更をするのは避ける方針で良いと思います!」という感じです。

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2.寄りの1.ですね。Java APIの存在は特に秘匿されておらず、実験的機能ですとも明言されていない状態に感じたので。かなり微妙な感じですが。

Java APIを「正式」に出すのであればドキュメントは書く必要があるというのは異論は無いです。

Copy link
Member

@Hiroshiba Hiroshiba Jun 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほどです!
ちょっとエスパーすると、一番気にされているのは多分、「0.16.1のJava APIで0.16.0からの破壊的変更をしないようにしよう」ということですよね。
この点は個人的には賛成です!

他の細かいところはこんな感じかなと思います(ユーザー目線で考えると認識揃いやすいと思ってます):

  • 0.16.0の時点でJavaのドキュメントはない
    • 書かれてるかではなく、存在がわかるようになっているかどうか

@@ -9,10 +9,7 @@
<li><a href="./rust_api/voicevox_core">Rust API</a></li>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(この行に関係ないコメントです)

ということで、「実験的機能」にするかどうかは、自信がちょっとあるかないかだと思います!
自信がないなら実験的機能、自信がちょっとあるなら一思いに正式リリースにしましょう!!

まず私の認識としては、今のJava APIには目立った課題は残っていないはずです。

特に課題は無さそうだけどPython APIやRust APIレベルの「質」になっているか確認できるまで実験的機能のラベルを付けておきましょう、というのを特にマイルストーンを打ち立てるといったこともせずに行うというなら反対であるくらいの気持ちです。

なるほどです!
となると、どういう条件で実験的機能のラベルを外すのか考えてから、実験的機能扱いにするのが良さそうでしょうか?

この辺決めるためのissueを作るのどうでしょう。
まあ言うてあと2つのやり取りぐらいで決まりそうなので、決まってからJava APIまとめissueに転記するとかでも良いと思います!

@qryxip
Copy link
Member Author

qryxip commented Jun 4, 2025

Java言語のコード例を導入する

じゃあ2.にしましょうか。

@Hiroshiba
Copy link
Member

Hiroshiba commented Jun 4, 2025

@qryxip
すみません! ちょっとJava APIリリースのためのissue作成をお願いしても良いでしょうか・・・!
今どういう状況で、どういうタスクが残っていてってのをまとめておきたいなーと。

あ、タスクの残り具合と進行状況の整理ができればissueじゃなくても大丈夫です!
逆に言うとプルリクエストだけで進行するのは抜け漏れが余裕で発生するので(経験則)とても避けたい。
discussionやGithub ProjectやGithubのマイルストーンとかでも。

@qryxip qryxip mentioned this pull request Jun 4, 2025
6 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants