1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaもPythonも触ってきたエンジニアが、今さらSpring Bootに入門してみた【Mac M1 Pro ローカル環境構築編】

1
Last updated at Posted at 2026-06-04

はじめに

JavaのSpringフレームワークはちょこちょこ触ってきた。
途中でPythonにどっぷり浮気して、FastAPIやFlaskでAPI作ったりもした。
でも「Spring Boot」は、なんとなく後回しにしてきた。

理由は正直シンプルで、「設定多そう」「重そう」というイメージ。
ですが、最近のJava案件では、Spring Bootが多いイメージになりました。
これはやらねば…と重い腰を上げました。

この記事は、「Javaは知ってるけどSpring Bootはほぼ初めて」なエンジニアのメモです。
環境はMac M1 Pro。まずはローカルで動かすところまでをまとめます。


対象読者

  • Java(Spring含む)は触ったことがある
  • PythonやFastAPIなど他言語のフレームワーク経験あり
  • Spring Bootはほぼ未経験
  • Mac M1 Pro使用中

環境

項目 バージョン
macOS Sonoma 14.x(M1 Pro)
Java 21(LTS)
Spring Boot 4.0.6
ビルドツール Maven
IDE IntelliJ IDEA Community / VS Code

なぜJava 21?
Spring Boot 4.x系はJava 17以上が必須です。17・21どちらでも動きますが、安定したLTSバージョンとして広く普及している21を選択しました。


1. Javaのインストール

M1 MacではHomebrewで入れるのが最も楽です。

Homebrewがない場合はまず導入

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

SDKMANで管理する(おすすめ)

複数バージョンを切り替えたい場合はSDKMANが便利です。Pythonでいうpyenvのようなものです。

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# 利用可能なJavaを確認
sdk list java

# Java 21(Temurin)をインストール
# ※ sdk list java で表示される最新の21系パッチバージョンを選んでください
sdk install java 21.0.7-tem

# バージョン確認
java -version
openjdk version "21.0.7" 2025-04-15
OpenJDK Runtime Environment Temurin-21.0.7+6 (build 21.0.7+6)
OpenJDK 64-Bit Server VM Temurin-21.0.7+6 (build 21.0.7+6, mixed mode)

Homebrewで入れる場合

brew install openjdk@21
echo 'export PATH="/opt/homebrew/opt/openjdk@21/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

2. プロジェクトの雛形を作成する

Spring BootにはSpring Initializrというプロジェクト生成ツールがあります。
FastAPIのpip install fastapiしてサクッと書き始めるのと違い、Spring Bootはまず「プロジェクトの雛形」を作るところから始まります。

ブラウザから生成する場合

👉 https://start.spring.io にアクセス

以下のように設定します。

項目 設定値
Project Maven
Language Java
Spring Boot 4.0.6
Group com.example
Artifact demo
Packaging Jar
Java 21

**Dependencies(依存関係)**に以下を追加:

  • Spring Web ← REST APIを作るのに必要
  • Spring Boot DevTools ← ホットリロード用(開発中に便利)
  • Lombok ← ボイラープレートコードを削減

「GENERATE」ボタンでzipをダウンロード → 任意の場所に展開。

CLIから生成する場合(Spring CLI)

# Spring CLIをSDKMANでインストール
sdk install springboot

# プロジェクト生成
spring init \
  --dependencies=web,devtools,lombok \
  --java-version=21 \
  --build=maven \
  --name=demo \
  demo

3. プロジェクト構成を確認する

demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/demo/
│   │   │       └── DemoApplication.java   ← エントリポイント
│   │   └── resources/
│   │       ├── application.properties     ← 設定ファイル
│   │       ├── static/
│   │       └── templates/
│   └── test/
│       └── java/
│           └── com/example/demo/
│               └── DemoApplicationTests.java
└── pom.xml                                ← 依存関係の定義(Mavenの場合)

Pythonとの比較で言うと:

Spring Boot Python(FastAPI)
pom.xml pyproject.toml / requirements.txt
DemoApplication.java main.py
application.properties .env / config.py

4. アプリを起動してみる

IDEで起動

IntelliJ IDEAなら DemoApplication.java を開いて、main メソッド左の▶ボタンをクリックするだけです。

ターミナルから起動

cd demo
./mvnw spring-boot:run

初回はMavenが依存関係をダウンロードするのでしばらくかかります(2〜3分程度)。

起動すると以下のようなログが流れます:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_|_|_|_|_|\__, | / / / /
 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::                (v4.0.6)

... Started DemoApplication in 2.345 seconds (process running for 2.6)

http://localhost:8080 にアクセスして「Whitelabel Error Page」が表示されればOK!
(エンドポイントを何も定義していないので404相当のエラーページが出ますが、起動はできています)


5. はじめてのREST API

せっかくなのでシンプルなエンドポイントを作ってみましょう。

src/main/java/com/example/demo/HelloController.java を作成します。

package com.example.demo;

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

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(@RequestParam(defaultValue = "World") String name) {
        return "Hello, " + name + "!";
    }
}

アプリを再起動(DevToolsがあれば自動リロード)して:

curl http://localhost:8080/hello
# Hello, World!

curl "http://localhost:8080/hello?name=Taro"
# Hello, Taro!

Pythonで書くとこんな感じ(FastAPI):

from fastapi import FastAPI

app = FastAPI()

@app.get("/hello")
def hello(name: str = "World"):
    return f"Hello, {name}!"

アノテーションの思想はほぼ同じですね。@RestControllerapp = FastAPI() に相当し、@GetMapping@app.get() に相当するイメージです。


M1 Pro特有の注意点

アーキテクチャについて

M1 MacはARM64アーキテクチャです。Java 21(Temurin)はApple Silicon対応ビルドが提供されているので、上記の手順通りに入れれば問題なく動きます。

Dockerを使う場合

今後Docker上でSpring Bootを動かす場合、イメージのアーキテクチャに注意が必要です。

# docker-compose.yml
services:
  app:
    platform: linux/arm64   # M1の場合はこれを明示
    build: .

linux/amd64 のイメージを使うとRosetta 2経由になり、起動が遅くなります。


まとめ

やったこと 内容
Java 21インストール SDKMANを使ってM1対応ビルドを導入
プロジェクト生成 Spring Initializrで雛形作成
アプリ起動 ./mvnw spring-boot:run でローカル起動
REST API作成 @RestController でHello Worldエンドポイント

「設定多そう」「重そう」というイメージを持っていましたが、Spring Initializrのおかげでプロジェクト作成は拍子抜けするくらいシンプルでした。

Pythonと比べると型が明示的な分、コードが冗長に見えますが、Lombokを使うとだいぶスッキリするらしいので次回以降で試していきます。

次回は Spring Data JPAとPostgreSQLでDB連携 をやる予定です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?