https://zenn.dev/seya/articles/070a375a5de62c

og-base_z4sxah.png

こんにちは。 スキーマから何かを生成するのが大好きな seya と申します。

今の会社では REST API のスキーマを OpenAPI で記述しているのですが、それを活用して何かしらを生成するスクリプトをよく書いています。 そんなネタがそれなりに溜まってきたので一挙大放出しようというのがこの記事です。

具体的には次のようなものを作りました。

API スキーマから生成のデメリット

まず初めに、"生成"というのはとても生産的に感じますが、デメリットも存在するので触れておきます。

一番大きなデメリットはずばり「生成したものは(基本)直接いじれない」ということです。

なぜなら継続的に使っていくことを想定した場合、手動で書き換えてしまった場合再度生成ツールを使った場合に上書きされてしまうからです。 そうなると生成されたコードの機能が実運用に対して足りない時に、そのコードではなく生成する方のスクリプトをアップデートする必要があるわけです、つまりメンテ対象が増えると言えるでしょう。(OSS でメンテされているライブラリを利用する場合はその限りではないですが)

実際職場でお手製スクリプトを作っている実感として、ちょっと普段のプログラミングと違う感があったり、私が「一回動けばええやろ」とばかりに書き殴ってしまったせいか(ごめんね)他の人が触りづらいんじゃないかという雰囲気を感じます。

なので、こういった内部で作るスクリプトもしっかり他の人が読めるようにリファクタリングしたり、最悪メンテを続けるのがコスパに合わんとなった場合に手動アプデに切り替えられるような形にしておくのが大事なのかなと思います。

TypeScript の型と API の生成 by aspida

昨今 API の型はスキーマから生成することが多いと思います。 これは自作ではなく aspida というライブラリを使っています。

ちなみに作っている方は日本人の方です。応援しましょう。

aspida ではこんな感じのコンフィグを書いて

module.exports = {
  outputEachDir: true,
  baseURL: "<https://localhost:8000>",
  trailingSlash: true,
  openapi: { inputFile: "openapi.yml" },
};