Swaggerとは?OpenAPIとの違いを初心者向けに画像多めで解説!
この記事でわかること
・Swaggerとは何か
・SwaggerとOpenAPIの違い
・Swagger UI、Swagger Editor、Swagger Codegenの役割
・Swaggerで書く内容
・Postmanとの違い
・Swaggerについてよくある誤解
Swaggerって何?

Swaggerは、簡単に言うと、
APIの仕様書を分かりやすく作ったり、画面上で確認したり、実際に試したりするためのツール群だよ。

APIの仕様書?

そう。
たとえばWeb APIには、
どのURLにアクセスするのか
GETなのかPOSTなのか
どんなパラメータを送るのか
どんなレスポンスが返ってくるのか
エラー時はどうなるのか
みたいな情報があるよね。

うん。APIを使う人が知りたい情報だね。

Swaggerは、そういうAPIの情報を整理して、人にも機械にも分かりやすい形で扱えるようにするものだよ。

まずAPIって何?

そもそもAPIって何だっけ?

APIは、アプリやシステム同士がやり取りするための窓口みたいなものだよ。

窓口?

たとえば、天気アプリが天気情報を表示するとする。
アプリの中に全国の天気情報を全部持っているわけじゃなくて、天気情報を持っているサーバーに問い合わせる。
天気アプリ
↓
「東京の天気を教えて」
↓
天気API
↓
「晴れ、気温25℃です」


アプリがAPIにお願いして、情報をもらう感じか。

そうそう。
そのAPIを使うには、「どんなお願いの仕方をすればいいのか」が必要になる。
それを書いたものがAPI仕様書。
SwaggerとOpenAPIの違い

SwaggerってOpenAPIとは違うの?

ざっくり言うと、今はこう考えるといいよ。
| 用語 | ざっくり意味 |
|---|---|
| OpenAPI | API仕様を書くための標準ルール |
| Swagger | OpenAPIを扱うためのツール群や呼び名 |

OpenAPIがルールで、Swaggerが道具?

そう。
OpenAPI Initiativeは、OpenAPI SpecificationをHTTP APIを記述するための正式な標準だと説明しているよ。
一方でSwagger公式は、Swagger UI・Swagger Editor・Swagger Codegenなど、OpenAPI定義を扱うツール群を提供している。

じゃあ、今は「Swaggerを書く」って言われても、実際はOpenAPI形式の仕様書を書くことが多いの?

そういう場面が多いね。
昔の名残で「Swagger」と呼ばれることもあるけど、仕様としてはOpenAPIと言う方が正確なことが多い。

Swaggerをレストランのメニューで例える

いつもみたいに、レストランで例えてみようか。
APIは、レストランの注文窓口みたいなもの。
でも、お客さんが注文するにはメニューが必要だよね。
メニューに書いてあること
・注文できる料理
・値段
・サイズ
・トッピング
・注文方法
・提供される内容


メニューがないと、何をどう頼めばいいか分からないね。

そう。
SwaggerはAPIのメニュー表みたいなもの。
Swaggerに書いてあること
・使えるAPIのURL
・GET / POST などの方法
・送るパラメータ
・返ってくるデータ
・エラー時の返事


APIを使う人向けのメニュー表か。

そう。
しかもSwagger UIなら、そのメニュー表から実際に注文、つまりAPIの実行を試せることがあるんだ。
Swagger UIとは?

Swagger UI?

Swagger UIは、API仕様書をブラウザで見やすく表示するツールだよ。

ブラウザで見る仕様書?

そう。
たとえば、こんな感じで表示される。
GET /users
ユーザー一覧を取得するAPI
POST /users
ユーザーを登録するAPI
GET /users/{id}
指定したユーザーを取得するAPI

API一覧が画面で見えるんだね。

そう。
さらに「Try it out」みたいな機能で、画面上からAPIを試せることもある。Swagger UIは、OpenAPI定義からインタラクティブなAPIドキュメントを生成するHTML・JavaScript・CSSのツールとして説明されているよ。

Swagger Editorとは?

Swagger Editorは、API仕様を書くためのエディタだよ。

仕様書を書く画面?

そう。
左側にOpenAPI形式の定義を書いて、右側に見た目のプレビューが出るようなイメージ。
左:YAMLやJSONでAPI仕様を書く
右:Swagger UIっぽい画面で確認する

書いた内容がすぐ見た目に反映されるんだ。

そう。
API仕様書を書く練習にも便利だね。

Swagger Codegenとは?

Swagger Codegenは、OpenAPI定義をもとに、APIクライアントやサーバー側のひな形を自動生成するツールだよ。公式リポジトリでも、OpenAPI / Swagger定義を解析して、ドキュメント、APIクライアント、サーバースタブを生成するテンプレートエンジンとして説明されている。

仕様書からコードも作れるの?

そう。
たとえばAPI仕様がきちんと書かれていれば、
JavaScript用のAPI呼び出しコード
Java用のクライアントコード
サーバー側のひな形
みたいなものを作れる場合がある。

ただの仕様書じゃなくて、開発にも使えるんだね。


似たツールとして OpenAPI Generator っていうのもあるよ。
どちらもOpenAPI定義からクライアントコードやサーバーのひな形を生成する用途で使われるんだ。
初心者のうちは「仕様書からコードのひな形を作る道具がある」くらいで大丈夫だよ。
Swaggerで書く内容

Swaggerには、APIを使う人が迷わないように「入口・送り方・返ってくる内容」を書くよ。
表にして一覧にするとこんな感じ。

| 項目 | 内容 |
|---|---|
| APIの概要 | API名、説明、バージョン |
| サーバー情報 | APIのベースURL |
| パス | /users や /items/{id} など |
| HTTPメソッド | GET、POST、PUT、DELETEなど |
| パラメータ | クエリ、パス、ヘッダーなど |
| リクエストボディ | 送信するJSONなど |
| レスポンス | 返ってくるデータの形式 |
| ステータスコード | 200、400、404、500など |
| 認証方式 | APIキー、Bearerトークンなど |

APIを使うために必要な情報が一通り入るんだね。

そう。
OpenAPI仕様は、HTTP APIを標準的・言語非依存に記述し、人間とコンピュータの両方がAPIの能力を理解できるようにするものと説明されているよ。
簡単なイメージ

実際のSwaggerってどんな感じ?

すごく簡略化すると、こんな感じ。
openapi: 3.0.0
info:
title: サンプルAPI
version: 1.0.0
paths:
/users:
get:
summary: ユーザー一覧を取得する
responses:
'200':
description: 成功

YAMLで書くんだ。

YAMLやJSONで書くことが多いね。
これをSwagger UIで表示すると、見やすいAPIドキュメントになる。
Swaggerを使うメリット

Swaggerを使うと、API仕様を共有しやすくなるよ。
主なメリットはこんな感じ。

| メリット | 内容 |
|---|---|
| API仕様が見やすくなる | 画面でAPI一覧や詳細を確認できる |
| 認識ズレを減らせる | フロント・バックエンド間で仕様を共有しやすい |
| APIを試しやすい | Swagger UIから実行できることがある |
| 仕様変更を管理しやすい | YAMLやJSONなのでGit管理しやすい |
| コード生成に使える | クライアントやサーバーのひな形を作れる |
| テストやレビューに使える | 実装前に仕様を確認しやすい |

仕様を共有しやすいってことは
認識違いによる摩擦を減らせそうだね。

そうだね。
API仕様があいまいだと、フロント側は「この項目が返ると思ってた」、バックエンド側は「そんな仕様だと思ってなかった」みたいなズレが起きるよ。
Swaggerを使うと、そのズレを減らしやすくなるね。
Swaggerの注意点

逆に注意点はこんな感じ。

| 注意点 | 内容 |
|---|---|
| 仕様書を更新しないと古くなる | 実装とズレると逆に混乱する |
| 最初は書き方を覚える必要がある | YAMLやOpenAPIのルールを理解する必要がある |
| 認証やエラーも書かないと不十分 | 成功時だけだと実用性が低い |
| 公開範囲に注意が必要 | 内部APIを外部公開しないよう注意 |
| 自動生成コードを過信しない | 生成後の調整が必要なこともある |

仕様書が古くなると危ないね。

そう。
Swaggerは便利だけど、実装と仕様書を合わせ続けることが大事。
Swaggerは誰が使うの?

Swaggerって誰が使うの?

いろんな人が使うよ。

| 立場 | 使い方 |
|---|---|
| バックエンド開発者 | API仕様を書く・共有する |
| フロントエンド開発者 | どんなAPIがあるか確認する |
| テスター | APIの動作確認をする |
| 外部連携先 | APIの使い方を理解する |
| PM・設計者 | 仕様の整理やレビューに使う |

開発者だけじゃなくて、APIを使う側の人にも役立つんだね。

そう。
特にSwagger UIは、コードを読まなくてもAPIの全体像を見やすいからね。
Postmanとの違い

PostmanっていうツールもAPIで出てくるけど、Swaggerとは違うの?

違うけど、関係はあるね。

| ツール | 主な役割 |
|---|---|
| Swagger / OpenAPI | API仕様を定義・表示・共有する |
| Postman | APIを実行・テストする |

Swaggerは仕様書寄り、Postmanはテスト実行寄り?

そう考えると分かりやすい。
ただし、Swagger UIでもAPIを試せるし、PostmanでもAPIドキュメントを扱えるから、役割が一部重なるところもある。
よくある誤解
誤解1:SwaggerはAPIそのもの

Swaggerを入れたらAPIができるの?

基本的には違う。
SwaggerはAPIそのものではなく、APIの仕様を説明したり、扱いやすくしたりするものだよ。

料理そのものじゃなくて、メニュー表ってことか。

そう。
ただし、コード生成やモックサーバーと組み合わせると、開発を助けることはできる。

誤解2:Swaggerを書けば実装も自動で全部完成する

Swaggerからコード生成できるなら、実装も全部終わるの?

そこも注意。
コード生成でひな形は作れるけど、実際の処理や業務ロジックは別に実装する必要がある。

入口の形は作れるけど、中身は作らないといけないんだね。

誤解3:SwaggerとOpenAPIは完全に別物

SwaggerとOpenAPIは完全に別のもの?

完全に切り離すより、歴史的につながっていると考えるといい。
今は仕様の名前としてはOpenAPI、ツール群や通称としてSwaggerが使われることが多い。

なるほど。
「Swagger」と言われたら、OpenAPIまわりの話だと思えばよさそうだね。

まとめ

Swaggerとは、
APIの仕様書を作成・表示・共有・テストしやすくするためのツール群だよ。

| 項目 | 内容 |
|---|---|
| Swagger | OpenAPIを扱うツール群や通称 |
| OpenAPI | API仕様を書くための標準ルール |
| Swagger UI | API仕様をブラウザで見やすく表示する |
| Swagger Editor | API仕様を書くためのエディタ |
| Swagger Codegen | 仕様からコードのひな形を生成する |
| 主な目的 | APIの使い方を分かりやすく共有する |

つまり、SwaggerはAPIそのものじゃなくて、APIの使い方を説明するための道具なんだね。

そのとおり。
一言でまとめるなら、
Swaggerは、APIの説明書を作って、見て、試せるようにする道具
だね。

