-
-
Notifications
You must be signed in to change notification settings - Fork 150
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
ドキュメンテーションがうまく回っていない。 #222
Comments
欠如しているであろう型以下が jq -r '.components.schemas | keys[]' ./src/.vuepress/api.json | sort
しかし 現在の実装https://github.com/misskey-dev/misskey/tree/7e8700514f18409874737cd5b439280bb03b829c/packages/backend/src/models/schema に(恐らく)現在のスキーマが存在する。が、最終更新が14日前と活発に更新されており、これを手動にて追従するのはやはり困難を極めると思われる。 |
PRでも書きましたが、更新された最新のOpenAPI定義や実ソースをもとにドキュメントを自動生成してデプロイするのがベストです。説明などの情報も自動生成するなら断然OpenAPIのマニフェストを使用すべきですね。 |
|
api.json については misskey-dev/misskey#9677 次第だと思います。 |
misskey-dev/misskey#10281 |
これに関してはひとまずはmergeされたようです。 |
これはこちらに挙げるべきかmisskey本体にissueを立てるか悩んだのですが、一旦こちらに追記しておきます。 securitySchemes: {
ApiKeyAuth: {
type: 'apiKey',
in: 'body',
name: 'i'
}
} OpenAPI3.0.0の定義では API Keyの渡し方としては確かにbodyを使用しているため、有効な値のどれかに変更することも適切とはいえません。もしもきちんと対応するのであれば、API自体を書き換える必要が出てくると思います(まぁmisskeyならそれ起きてもおかしくない気もしますが) 言語によっては、そのくらいの曖昧さなら気にしないで使えるかもしれませんが、型が厳密な言語ではそもそも型定義に合わずにコンパイルすることが出来ないです(例えば、HaskellのOpenAPIパッケージにあるApiKeyLocationでは型レベルで上記3種類以外を受け付けなくなっており、現状のOpenAPIドキュメントはパースに失敗します)。 但し、きちんと正しいものでなくとも「それっぽいもの」で十分な状況もあるとは思うため、出来る限りの対応を行うことには賛成です。 |
目的
この Issue は、#204 #212 の本質的な原因を究明・解消するものである。
Misskeyの開発速度や、ドキュメントの完全性を考えると、将来的には完全な自動生成を行うべきであると考える。
しかし、今すぐに全てを行うのは恐らく困難で、現在のドキュメント生成を紐解き、整理する必要があると考える。
現象
1. 一部オブジェクトのドキュメント欠落
#204 にある通り、
User
とNote
を除いた、他全てのエンティティ (型) に関するドキュメントが 2023/03/03 現在存在しない。 ページ上の挙動としては、リンクは存在するが、refが壊れており404 Not Foud
と表示されてしまう。この現象は、例えば
drive/files/create
から見えるDriveFile
などで観測できる。2. ドキュメント追従不全
#212 によると、存在する
User
とNote
すらも、現在の実装とは食い違っているようだ。原因の追跡
現在、ページはGitHub Actions/GitHub Pagesを用いて公開されており、
.github/workflows/gh-pages.yml
から生成を追うことができる。misskey-hub/.github/workflows/gh-pages.yml
Line 38 in f31eee5
npm run build
を実行している。misskey-hub/package.json
Line 6 in f31eee5
vuepress build src
を実行しているようだ。よって本題は、
src/.vuepress/config.ts
に移る。misskey-hub/src/.vuepress/config.ts
Lines 449 to 455 in f31eee5
該当ドキュメントを生成している関数は
generateEndpointPages
だと思われる。当該関数を実装するファイルは3つある。
src/.vuepress/_gen-api-defs-from-openapi.ts
src/.vuepress/generate-endpoint-pages-from-openapi.ts
src/.vuepress/generate-endpoint-pages.ts
misskey-hub/src/.vuepress/config.ts
Line 9 in f31eee5
を見ると、実際には
src/.vuepress/generate-endpoint-pages.ts
が使われていることがわかる。misskey-hub/src/.vuepress/generate-endpoint-pages.ts
Lines 8 to 10 in f31eee5
を見ると、
src/docs/api/common.json5
やsrc/docs/api/endpoints/
配下にあるAPI定義ファイルから生成しているようである。これ自体は一見問題ないようだが、
src/docs/api/common.json5
はメンテナンスされておらず、ここにあるべき型が欠落しており、また更新されていない。考察
これらの現象から、現在の半自動生成開発サイクルはうまく回っていないことが原因であると考えられる。
(恐らく) 自動生成されたJSONファイルを #214 のように手動で修正すると以下のような問題が新たに発生する。
その為、手動でのパッチ適用は、その場しのぎにはなるが、将来を考えると現実的ではない。
方針
ドキュメントの確実な生成・追従に向け、CIで生成することが望ましいと考える。
方針1. 現在のJSONをCIでの自動生成に切り替える
現在のJSONがどのように作られたかはわからないが、機械的な生成にもみえる。
その場合、CIでMisskey本体のレポジトリを参照し、自動生成する方針を取ることで常に最新を追従できるようになると考えている。
方針2. OpenAPI定義ファイルからのCIでの自動生成に切り替える
最も標準的に用いられている方針である、OpenAPI定義ファイルを使用したドキュメント生成を(過去に行った|試みた)痕跡が現在もいくつか残っている。
例えば、
src/.vuepress/api.json
src/.vuepress/_gen-api-defs-from-openapi.ts
src/.vuepress/generate-endpoint-pages-from-openapi.ts
しかしどういうわけか、肝心の
api.json
の取得元である(と思われる)/api.json
のエンドポイントはこの変更 でMisskey本体から削除されてしまっている。そのため、現在継続的に更新することが出来なくなってしまっている(と思われる)。
Misskey APIを用いたアプリケーションを作る際にも、Swaggerのエコシステムは非常に有用であるため、可能ならばこのエンドポイントの再実装が望ましいと考えている。
最後に
私はWebやTypeScriptに明るくないため、的外れなことを書いていたら申し訳なく思います。
The text was updated successfully, but these errors were encountered: