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

OpenAPI定義ファイルを再更新 #1361

Merged
merged 4 commits into from
Jul 2, 2023

Conversation

y-chan
Copy link
Member

@y-chan y-chan commented Jul 1, 2023

内容

  • 題のとおりです、 OpenAPI定義ファイルの更新と、表示の調整 #1344 の修正では、nullableではない値がnullableとして扱われていたので、それを修正するためにOpenAPI Generatorに私が作成したパッチを当てたもの(Add convert process of empty model name OpenAPITools/openapi-generator#15943)を使用します。
    • パッチが必要な理由として、最新のOpenAPI GeneratorはallOf/anyOf/oneOf/not系の定義に対し、新たに独自スキーマを定義して解釈することで、Union型などに対応する仕様があります。
      • 例として、allOfが使われているAccentPhraseスキーマの1部を取上げます
      "components":{
            "schemas":{
               "AccentPhrase":{
                  "title":"AccentPhrase",
                  "required":[],
                  "type":"object",
                  "properties":{
                     "pause_mora":{
                        "title":"後ろに無音を付けるかどうか",
                        "allOf":[
                           {
                              "$ref":"#/components/schemas/Mora"
                           }
                        ]
                     },
                  },
                  "description":"アクセント句ごとの情報"
               }
           }
      }
      
    • 例えば、pause_moraに対しては、titleを用いた新しい型後ろに無音を付けるかどうかを生成しようとします。
    • しかし、実際にはtitleのascii文字列以外をすべて_で置き換える処理が存在し、それによりunicodeが全て_に置き換えられて_____________という型が生成されます。
    • 実際にTypeScriptファイルを生成する際は、_はすべてパスカルケース化の影響で消し飛び、無の名前の型/型定義ファイルが生成されます。
      • image
    • それを解消するパッチを作成し、pauseMora?: Moraという型が正しく生成されるようにしました。
  • 非常に手順としては面倒ですが、npmモジュール版のopenapi-generator-cliを用いずに、javaコンパイラーを実行して得たopenapi-generator-cli.jarを、READMEと同じオプションで直接実行しています。
  • 新しいバージョンがリリースされればちゃんとした手段に戻したいですが、一旦この手法で定義ファイルを更新したいです(でなければライブラリ管理機能の開発が若干苦しいです)。
  • ちなみに、OpenAPI Generatorの更新により、話者のisInitializeが正しくbooleanとして認識されるようになりました。

@y-chan y-chan requested a review from a team as a code owner July 1, 2023 02:59
@y-chan y-chan requested review from Hiroshiba and removed request for a team July 1, 2023 02:59
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.

LGTM!!

openapi-generatorが改造版が必要な点に関して、OSSなので別の方が迷わないような道標があると良さそうかもです。

READMEの↓で、このPRをリンクして更新が難しい状態になっていることをちょっと案内するのはどうでしょう・・・?
https://github.com/VOICEVOX/voicevox/tree/a2c7784446ea32a1a58f9ffb5a0dd58c2dd73de7#openapi-generator

案内はこんな感じとか。

2023/07/02現在、openapi-generatorのパッチ修正版を使わないと更新できない状態になっています。  
詳細は[こちら](https://github.com/VOICEVOX/voicevox/pull/1361)

@y-chan
Copy link
Member Author

y-chan commented Jul 2, 2023

そうですね!
案内を追加してみました!

@Hiroshiba Hiroshiba merged commit 1b9e6c2 into VOICEVOX:main Jul 2, 2023
@Hiroshiba
Copy link
Member

"true"になってしまうとこも治ってよかった!!

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.

2 participants