C
Spring Boot/環境構築/Lesson 02

Spring Boot 最初のプロジェクト — start.spring.io から起動まで

30分·theory

Spring Boot 最初のプロジェクト — start.spring.io から起動まで

🎯 このレッスンを読んだあとにできること

このレッスンをすべて読み終えたら、以下の3つを自信を持ってできるようになります。

  • ✅ start.spring.io で 5分以内に プロジェクトを生成・起動する
  • ✅ application.yml のマルチプロファイル (dev/prod) 分離
  • ✅ @SpringBootApplication が内部で行う3つのこと

学習目標を チェックリストとして 手元に置き、すべてに答えられるようになったらレッスンを閉じてください。

start.spring.io でプロジェクトを作成する

Spring Boot の公式ジェネレーター

https://start.spring.io は、Spring チームが提供する公式プロジェクトジェネレーターです。依存関係をクリックで選び、zip でダウンロードします。

最初のプロジェクト設定

ページの左側フォームを以下のように入力してください:

  • Project: Gradle - Kotlin (Maven も可能ですが、新規プロジェクトは Gradle 推奨)
  • Language: Java
  • Spring Boot: 3.2.x (LTS 系列、2026年時点)
  • Group: com.example
  • Artifact: demo (= プロジェクトフォルダ名)
  • Name: demo
  • Description: "My first Spring app"
  • Package name: com.example.demo
  • Packaging: Jar (war は旧来の Tomcat デプロイ用)
  • Java: 17 (Spring Boot 3 の最小要件)

依存関係の選択 — 学習用5つ

ADD DEPENDENCIES ボタン → 検索して追加:

1. Spring Web — REST API の構築
2. Spring Boot DevTools — コード変更時に自動再起動
3. Lombok@Getter@Setter のボイラープレートを削除
4. H2 Databaseインメモリ DB (学習に非常に便利)
5. Spring Data JPA — データベース操作の自動化

生成 → ダウンロード → 開く

GENERATE をクリック → demo.zip をダウンロード → 解凍 → IntelliJ で Open からフォルダを選択。

IntelliJ が Gradle の依存関係を自動ダウンロードします (初回は1〜3分)。右下のプログレスバーが止まれば準備完了。

実行

プロジェクトツリーで src/main/java/com/example/demo/DemoApplication.java を開きます:

java
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

左側の緑の ▶ をクリックするか、Shift + F10 を押します。コンソールに Spring Boot バナーTomcat started on port 8080 が表示されれば成功です。

ブラウザで http://localhost:8080 にアクセス → 404 ページが表示されます (ルートがまだないので正常)。

おめでとうございます — 本物の Web サーバーが動いています

application.yml vs application.properties

どちらも同じ設定ファイル

src/main/resources/ の中にどちらか一方があれば十分です。

properties — キー=値 形式

properties
server.port=8080
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.jpa.show-sql=true
logging.level.org.springframework=INFO

yml — 階層インデント形式

yaml
server:
  port: 8080
spring:
  datasource:
    url: jdbc:h2:mem:testdb
    username: sa
  jpa:
    show-sql: true
logging:
  level:
    org.springframework: INFO

どちらを使うか

ほぼすべての新規プロジェクトは application.yml — 階層構造が見えるため可読性が圧倒的に高い。

properties は古いプロジェクトや簡単な設定に残っている程度です。

よく使う設定5つ

yaml
server:
  port: 8080                 # デフォルトポートの変更
  servlet:
    context-path: /api       # すべての URL に /api を追加

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: ${DB_PASSWORD}  # 環境変数の参照

  jpa:
    hibernate:
      ddl-auto: update        # テーブルの自動生成 (本番環境は不可)
    show-sql: true            # SQL をコンソールに出力

logging:
  level:
    org.springframework.web: DEBUG

環境別の分離 — application-{profile}.yml

code
resources/
├── application.yml           # 共通
├── application-dev.yml       # 開発用
└── application-prod.yml      # 本番用

起動時に --spring.profiles.active=prod または環境変数 SPRING_PROFILES_ACTIVE=prodプロファイルを選択します。本番パスワードを git にコミットしないための標準パターンです。

@SpringBootApplication — アノテーション1つの正体

3つを合わせた アノテーション

@SpringBootApplication は実際には 3つのアノテーションをまとめたメタアノテーションです:

java
@SpringBootConfiguration      // = @Configuration
@EnableAutoConfiguration       // Spring Boot マジックの核心
@ComponentScan                 // このパッケージ配下をスキャン
public @interface SpringBootApplication { }

各アノテーションの役割

1. @Configuration

このクラスは Bean 設定クラスであると Spring に伝えます。内部に @Bean メソッドを定義できるようになります。

2. @EnableAutoConfiguration

Spring Boot のマジック。クラスパス上のライブラリを確認し、自動的に設定します。

  • spring-boot-starter-web を検出 → Tomcat + Spring MVC を自動設定
  • H2 Database を検出 → インメモリ DB を自動接続
  • Spring Data JPA を検出 → JPA EntityManager を自動設定

XML 設定 100行を0行にした核心機能。これがなければ、昔の Spring 時代の設定地獄に逆戻りです。

3. @ComponentScan

このクラスが置かれているパッケージからサブパッケージまで、すべての @Component/@Service/@Repository/@Controller を見つけて Bean として登録します。

そのため DemoApplication の配置場所が重要です — すべてのコードは DemoApplication パッケージ配下に置かないと自動認識されません。

最初のコントローラー — Hello, World!

同じパッケージに HelloController.java を追加します:

java
package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

サーバーを再起動 (DevTools があれば自動) した後、http://localhost:8080/hello にアクセス → Hello, Spring Boot!

これがサーバーサイドで初めてページを表示した瞬間です。

まとめ

@SpringBootApplication の一行で数十個の自動設定が有効化されます。面接で「@SpringBootApplication は何をするのですか?」と聞かれたら、上記の3点を答えられるようにしておきましょう。

🤖 AI にこのように依頼してみましょう

このレッスンの概念を理解すると、AI に具体的に指示できるようになります。曖昧な「直して」ではなく、語彙を持ったリクエスト — それがトークン節約の出発点です。

  • 「Spring Boot 3.2 + Java 17 + Gradle + H2 でプロジェクトの骨格を作って」
  • 「application.yml にマルチプロファイル (dev/prod) の分離を追加して」
  • 「このプロジェクトが 8080 ではなく 9000 番ポートで起動するように設定して」

なぜこれでトークンが減るのか

概念を知らないと、AI の回答を受け取っても「それって何ですか?」と再度聞かなければなりません。その「再質問」がトークンを消費します。概念を一度しっかり学んでおけば、会話が一回で終わります。

Spring Boot 最初のプロジェクト — start.spring.io から起動まで - Spring Boot