コンテンツにスキップ

🌐 OpenAPI → cURL コマンド生成

OpenAPI 3.x の YAML / JSON 仕様を貼り付けるだけで、全エンドポイントを実行可能な cURL コマンドに一括変換します。

完全無料 登録不要 ブラウザ完結 5 言語対応 ダークモード
🔒 プライバシー保証: OpenAPI 仕様はサーバーに送信されません。すべての解析と変換はお使いのブラウザ内で完結します。

生成された cURL コマンド

📖 つまずきやすいポイント

OpenAPI 3.x の YAML / JSON を貼り付けると、全エンドポイントを実行可能な形の cURL コマンドに一括変換します。解析はブラウザ内で完結し、仕様は送信されません。やっているのは仕様書の記述を機械的にコマンドへ組み替えることだけで、そのまま叩いて通る保証はありません — 出てきたコマンドの品質は、元の仕様にどれだけ example が書かれているかでほぼ決まります

ケース 何が起きるか どうする
リクエストボディが空 / 中身が {} になる 原因はたいてい $ref が外部ファイルを指していることです。$ref: "./schemas/user.yaml#/User" のような参照は、貼り付けた 1 ファイルの中だけでは解決できません。大規模な API 仕様はスキーマを別ファイルに切り出すのが普通なので、実務ではむしろこちらが多数派です。同一ファイル内の #/components/schemas/User は解決できますが、allOf / oneOf / anyOf の合成は完全には展開できませんoneOf はどれを選ぶべきか仕様上決まらないためです。 貼り付ける前に「バンドル」して 1 ファイルにまとめてくださいnpx @redocly/cli bundle openapi.yaml -o bundled.yamlnpx swagger-cli bundle openapi.yaml -o bundled.json -r で、外部参照がすべて内部に展開されます。これは CI に組み込む価値のある工程で、バンドルが失敗する = 参照が壊れているということなので、仕様のリンク切れ検査を兼ねられます。allOf を多用している仕様なら、バンドルに加えて --dereferenced オプションで完全に展開してしまうと、生成されるボディが実際に送るべき形に近づきます。
生成したコマンドが 400 や 422 で弾かれる example が書かれていないプロパティは、型から機械的に埋めるしかありません — 文字列なら "string"、数値なら 0、といった具合です。ところが実際の API は status"active""archived" しか受け付けない、created_atdate-time 形式でなければならない、といった制約を持っています。つまり 400 が返るのは、たいていツールの不備ではなく「仕様に例が書かれていない」ことの表れです。enumformat があれば読み取れますが、「他のフィールドと矛盾しない値」までは仕様に書けないので原理的に埋められません 仕様に example を書き足すのが正しい直し方です — 直したぶんは Swagger UI のサンプルにも、モックサーバーの応答にも、生成されるクライアントのテストにも効きます。この作業は「ツールを通すため」ではなく、API ドキュメントとしての品質改善そのものです。認証は仕様に書かれていないことが多いので、このページの「認証ヘッダ」欄で上書きしてください。401 が返る場合は認証、400 / 422 が返る場合はボディの中身と切り分けられます。curl -v を付けて実際に送っているヘッダを見るのが、どちらかを判別する最短の方法です。
貼り付けても 1 件も生成されない 先頭が swagger: "2.0" になっていませんか。Swagger 2.0 は OpenAPI 3.x とは構造が違う別仕様です — サーバーの指定が servers ではなく host + basePath + schemes の 3 つに分かれ、リクエストボディが requestBody ではなく parameters の中の in: body、メディアタイプが content ではなくパス外の consumes にあります。「バージョン番号が違うだけ」ではなく、読み取るべき場所が全部違います。もう 1 つ多いのが、YAML のインデント崩れです — タブ文字が混ざっていると YAML は必ず失敗します。 先に 3.x へ変換してくださいnpx swagger2openapi swagger.yaml -o openapi.yaml がそのままの変換で、既存の記述はほぼ機械的に移せます。Swagger 2.0 は 2017 年に 3.0 が出て以降ずっとメンテナンスモードなので、この変換は遅かれ早かれ必要になる作業です。YAML が原因かどうかは、JSON に変換して貼り直せば一発で切り分けられます (YAML ⇔ JSON 変換)。JSON にすると通るならインデントの問題、JSON でも通らないなら仕様のバージョンか構造の問題です。

生成したコマンドをそのまま人に渡さないでください。認証ヘッダを上書きすると、出力される全コマンドに本物のトークンが平文で埋め込まれます — Slack に貼る、issue に貼る、ドキュメントに載せる、いずれも認証情報の流出です。共有する用途なら、-H "Authorization: Bearer $API_TOKEN" のように環境変数に置き換えてから渡してください。自分の端末で実行する場合も、コマンド全体がシェルの履歴ファイルに平文で残ります (先頭に空白を 1 つ入れると、多くのシェルでは履歴に残りません)。もう 1 点、servers/api/v1 のような相対 URL だけの仕様では、ホストが決まらないのでコマンドはそのままでは動きません — このページのベース URL 上書き欄で補ってください。

📖 使い方

  1. 1
    OpenAPI 仕様を貼り付け
    YAML または JSON 形式の OpenAPI 3.x 仕様を入力欄に貼り付けます。サンプルボタンから例を読み込めます。
  2. 2
    オプションを設定
    必要に応じてベース URL や認証ヘッダ(Authorization)を上書きできます。改行スタイルも選択可能です。
  3. 3
    cURL コマンドをコピー
    全エンドポイントの cURL コマンドが一覧表示されます。各カードのコピーボタンでクリップボードに転送できます。

❓ よくある質問

Swagger 2.0 にも対応していますか?
OpenAPI 3.x を主にサポートしています。Swagger 2.0 でも基本的な path / method 解析は動作しますが、$ref 解決や複雑なスキーマは部分的なサポートです。
リクエストボディはどのように埋められますか?
requestBody の example または各プロパティの example / default 値を優先し、なければ型に応じたサンプル値(string なら "string"、integer なら 0 など)を生成します。
生成されたコマンドはそのまま実行できますか?
サンプル値や仮のトークンを含むため、本番実行前に必須パラメータ・認証情報を実際の値に置き換えてください。
🐛 このツールで問題が発生しましたか?

完全無料・登録不要。再現手順だけでも結構です。届いたご報告は運営者に直接届き、修正の参考にします。

※ 不具合再現のため、ブラウザ情報 (UA / 画面サイズ / 言語 / URL) を自動で送信します