Synamon’s Engineer blog

Synamonはリアルとデジタルの融合を加速させるため、メタバース領域で法人向けにサービス提供を行うテックカンパニーです。現在開発を進めている「メタバース総合プラットフォーム」をはじめ、メタバース市場の発展に向けた事業展開を行っています。このブログでは、メタバース技術とその周辺の技術、開発全般に関してエンジニアがお話しします。

ChatGPTを使ってOpenAPIの定義を作成してモックサーバを立てる

こんにちは、エンジニアの黒岩(@kro96_xr)です。

はじめに

ChatGPT、流行ってますね。
openai.com

VSCodeの拡張を使ってコードレビューをしたり
qiita.com

SQLを書いてもらったり

上手く活用することで開発生産性が上がっていくのではないかと思っています。
実際、私も面倒なOpenAPIのymlファイルの記述などを書いてもらったりしています。
というわけで今回はChatGPTを活用してモックサーバを爆速で立てていきたいと思います。

なお、ChatGPTの使い方は割愛させていただきます。

また、ChatGPTに関する著作権を調べていたところ、商業目的での使用はNGのようでした。
ブログへの掲載も広義で見れば宣伝とも言え、グレーなのかもしれないと思っていますが、詳しい方がいらっしゃいましたらご教示いただけますと幸いです。

note.com

とりあえずTODOアプリのAPIを定義する

今回はサンプルなので設計からChatGPTに投げてしまいます。
実際に使う場合は、ドメイン知識を事前に教えたり、自身で作成した具体的なjsonのレスポンスを教えたりしてからお願いした方が良いです。

普通のCRUDのエンドポイントですね。ymlにしてもらいましょう。

出力されたファイルをyml形式で保存しておきます。
Swagger Editorにコピペすればドキュメント形式でも見ることができますね。

モックサーバを立てる

次に、保存したymlファイルからモックサーバを立てましょう。今回はdockerを使います。
公式で配布されているイメージを使って、yamlファイルを指定するだけです。

openapi.ymlと同じディレクトリに以下のようなdocker-compose.ymlを作って

version: "3"
services:
  mock:
    image: stoplight/prism:latest
    container_name: "prism-mock"
    ports:
      - "4010:4010"
    command: mock -h 0.0.0.0 /openapi.yml
    volumes:
      - ./openapi.yml:/openapi.yml

upコマンドでコンテナを立ち上げればOKです。

docker-compose up
prism-mock | [5:12:29 AM] › [CLI] … awaiting Starting Prism…
prism-mock | [5:12:30 AM] › [CLI] ℹ info GET http://0.0.0.0:4010/todos
prism-mock | [5:12:30 AM] › [CLI] ℹ info POST http://0.0.0.0:4010/todos
prism-mock | [5:12:30 AM] › [CLI] ℹ info GET http://0.0.0.0:4010/todos/404
prism-mock | [5:12:30 AM] › [CLI] ℹ info PUT http://0.0.0.0:4010/todos/657
prism-mock | [5:12:30 AM] › [CLI] ℹ info DELETE http://0.0.0.0:4010/todos/878
prism-mock | [5:12:30 AM] › [CLI] ▶ start Prism is listening on http://0.0.0.0:4010

これでモックサーバを立てることが出来ました。

GETも

POSTも

大丈夫そうですね。

あとはスキーマ駆動開発という形でバックエンドとフロントエンドが同時並行で開発できると良い感じなのではないでしょうか!

おまけ

最近Locustでの負荷試験のためのコードを見たりしているのですが、こちらもできるかどうか確認してみました。

古いバージョンのコードを出してきたので…

修正してもらって動くことが確認できました!

おわりに

今回はChatGPTを活用して、API定義を作りモックサーバを立ててみました。
チャットでやり取りするだけで動くものが出来るのでサクッと試したいときに便利ですし、うまく活用すればちゃんとしたシステムも作れる気がしますね。

※なお質問する内容によっては普通に間違ったことが返ってくるのでご注意ください。

技術的な質問ではありませんが間違った例です。
スタジアムは等々力陸上競技場が正しく、創設年は前身の富士通サッカー部の創部年になってますね。