IT用語

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とは違うの?

ざっくり言うと、今はこう考えるといいよ。

用語ざっくり意味
OpenAPIAPI仕様を書くための標準ルール
SwaggerOpenAPIを扱うためのツール群や呼び名

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 / OpenAPIAPI仕様を定義・表示・共有する
PostmanAPIを実行・テストする

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の仕様書を作成・表示・共有・テストしやすくするためのツール群だよ。

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

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

そのとおり。
一言でまとめるなら、

Swaggerは、APIの説明書を作って、見て、試せるようにする道具

だね。

ABOUT ME
クマノくらげ
クマノくらげ
難しいIT用語やビジネス用語を、できるだけ身近な例えで解説するブログです。 「専門用語を見ると眠くなる人」でも読めるように、画像や会話形式を多めにしています。 AWS12冠達成済み。
記事URLをコピーしました