【入門編】Spring Boot開発でSwagger/OpenAPI (Springdoc OpenAPI) を導入する方法 – データベース・API管理活用バイブル

こんにちは、未来のシステムアーキテクトの皆さん。

API開発の世界へようこそ。バックエンドエンジニアとして歩み始めたあなたが、最初にぶつかる壁の一つが「ドキュメント管理」です。「コードは書いたけれど、フロントエンド担当にどう伝えればいい?」「仕様書と実装がいつの間にかズレている……」そんな悩み、今日で終わりにしましょう。

今回は、Spring Boot 3開発における標準装備と言っても過言ではない「Springdoc OpenAPI」の導入方法を伝授します。これを使えば、コードを書くだけで美しく、かつ実際にテスト実行可能なAPIドキュメントが自動生成されます。

「これをマスターすれば、毎日の作業が劇的に楽になりますよ」

では、世界最高峰の現場で培われた「生きた設計」の第一歩を、共に踏み出しましょう。

—

1. なぜ「Swagger / OpenAPI」が必要なのか?

まず、本質的な話をします。APIとは「システム間の契約(Contract)」です。
契約書が曖昧なプロジェクトは、必ず後半で炎上します。

  • OpenAPI: APIの構造を記述するための「標準規格(ルール)」
  • Swagger UI: その規格を読み取って、ブラウザ上で見やすく表示し、ボタン一つでAPIを叩けるようにした「ツール」
  • Springdoc OpenAPI: Spring BootとOpenAPI/Swaggerを繋ぐ「最高の架け橋」

これらを導入することで、あなたはExcelの仕様書を更新する作業から永遠に解放され、「動くドキュメント」という最強の武器を手にすることになります。

—

2. 環境のセットアップ:依存関係の追加

Spring Boot 3系では、以前主流だった「Springfox」ではなく、「Springdoc OpenAPI」を使用するのが標準です。

まずは `build.gradle` (または `pom.xml`) にライブラリを追加しましょう。これだけで、魔法のようにSwaggerの基盤が整います。

Gradle (build.gradle) の場合

dependencies {
// Springdoc OpenAPI Starter (Spring Boot 3対応版)
// これ一つでSwagger UIとOpenAPIの自動生成機能が手に入ります
implementation ‘org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0’
}

Maven (pom.xml) の場合


org.springdoc
springdoc-openapi-starter-webmvc-ui
2.2.0

プロの視点:
Spring Boot 3からはパッケージ名が `javax.` から `jakarta.` に変更されました。古いライブラリを使うと動きません。必ず `springdoc-openapi-starter-` で始まる最新のStarterを選んでください。

—

3. APIを定義する:アノテーションの極意

ライブラリを入れたら、次はコードに「意味」を吹き込みます。
ただAPIを作るのではなく、「誰が見ても意図がわかる」ようにカスタマイズしましょう。

サンプルとして、簡単な「ユーザー管理API」を作ってみます。

Controllerの実装例

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.;

@RestController
@RequestMapping(“/api/v1/users”)
// @TagでAPIのカテゴリを整理します。これがドキュメントの見出しになります。
@Tag(name = “User Management”, description = “ユーザー情報の参照・登録を行うAPI”)
public class UserController {

@GetMapping(“/{id}”)
// @Operationで「このAPIは何をするものか」を明記します
@Operation(summary = “ユーザー取得”, description = “指定されたIDを持つユーザーの詳細情報を返します”)
public UserResponse getUser(
@Parameter(description = “ユーザーID”, example = “1”)
@PathVariable Long id) {
return new UserResponse(id, “Kenji”, “kenji@example.com”);
}
}

Data Model (DTO) の実装例

import io.swagger.v3.oas.annotations.media.Schema;

// @Schemaを使うと、レスポンスの各項目の意味や制約を明示できます
@Schema(description = “ユーザー情報レスポンス”)
public record UserResponse(
@Schema(description = “システム内で一意のID”, example = “1”)
Long id,

@Schema(description = “フルネーム”, example = “山田 健二”)
String name,

@Schema(description = “メールアドレス”, example = “yamada@example.com”)
String email
) {}

ここがポイント:
`@Operation` や `@Schema` の `example` 属性は必ず書きましょう。フロントエンドエンジニアが「どんなデータが返ってくるか」を一目で理解でき、モック作成が爆速になります。

—

4. 全体設定を整える(Bean定義)

API全体のタイトルやバージョン情報を定義しましょう。これを設定するだけで、ドキュメントの「プロっぽさ」が格段に上がります。

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OpenApiConfig {

@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info()
.title(“次世代システム API”)
.version(“1.0.0”)
.description(“これはSpring Boot 3で構築された堅牢なAPIドキュメントです。”)
.license(new License().name(“Apache 2.0”).url(“http://springdoc.org”)));
}
}

—

5. 動作確認:ブラウザで確認しよう

アプリケーションを起動(`./gradlew bootRun`)したら、ブラウザで以下のURLを叩いてみてください。

  • Swagger UI (ビジュアル確認用):

`http://localhost:8080/swagger-ui/index.html`

  • OpenAPI JSON (定義ファイル本体):

`http://localhost:8080/v3/api-docs`

真っ白な画面ではなく、あなたが書いたアノテーションに基づいた美しいドキュメントが表示されているはずです。
「Try it out」ボタンを押して、実際にAPIを実行してみてください。レスポンスが返ってくる感動を味わえたら、セットアップは完璧です。

—

最後に:アーキテクトへの道

お疲れ様でした。これであなたは「ドキュメントと実装を同期させ続ける」という、現代の開発において最も重要なスキルの一つを習得しました。

しかし、これはまだ入り口です。

  • セキュリティ設定: JWT認証が必要なAPIをどう表現するか?
  • バリデーション連携: `@NotBlank` などの制約を自動でドキュメントに反映させるには?
  • CI/CD連携: ビルド時にOpenAPIファイルを書き出し、自動でフロントエンドの型定義を生成する。

こうした「その先」のテクニックを積み重ねることで、あなたは真のプロフェッショナルへと成長していきます。

まずは、今日作ったこのドキュメントをチームに見せてあげてください。「これ、使いやすいね!」という言葉が返ってきたら、それがあなたの価値が証明された瞬間です。

ハッピーコーディング!また次のステップでお会いしましょう。

タイトルとURLをコピーしました