0
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?

Eclipseからの脱却

Last updated at Posted at 2025-03-23

はじめに

java初心者でEclipseでしかコードを書いたことがないので、Eclipseからの脱却を図るのが目的です。
今回はCLIでSpring Bootアプリを作って動かしてみます。
以下は生成AI(chatgpt)で確認し進めています。

目標

Eclipseを使わず、MavenとCLIで最小限のSpring Bootアプリを作って動かす ことが目標です。

前提

  • Java 17 など JDK がインストールされている(java -versionで確認)
  • Maven がインストールされている(mvn -v で確認)

🛠 Step 1-1: Spring Boot プロジェクトの雛形を作成

一番簡単な方法は https://start.spring.io/ からダウンロードする方法です。

もしくは、以下のコマンドでも作れます(Maven archetypeを使う方法もありますが、ここではstart.spring.ioベースを推奨します)。

方法1: curl で直接 zip を取得

curl https://start.spring.io/starter.zip \
  -d dependencies=web \
  -d name=demoapp \
  -d type=maven-project \
  -d language=java \
  -d bootVersion=3.2.3 \
  -d baseDir=demoapp \
  -o demoapp.zip

unzip demoapp.zip
cd demoapp

もしくは手動で https://start.spring.io/ にアクセスし、次のように選択して ZIP をダウンロード:

  • Project: Maven
  • Language: Java
  • Spring Boot: 3.2.x
  • Dependencies: Web
  • Group: com.example
  • Artifact: demoapp

実際の対応

curlを動かすにあたり、Windows11を使用しておりWSL上でセットを試みました。
しかしながらcurlで試しましたがzipのダウンロードができませんでした、なぜかmavenでなくgradleになる、色々試しましたが結局できず手動でアクセスしてzipを取得しました。wsl上なのでjavaのセット等行いました。

xxxxxx@DESKTOP-V4DBQTD:/mnt/c/Users/apple/Downloads/demoappmaven$ sudo apt install openjdk-17-jdk
Reading package lists... Done
Building dependency tree
Reading state information... Done

ちなみに手動での画面は以下にしました。
image.png

はい、まさにおっしゃる通りです!💯
Windows の Java 設定 (C:\Program Files\...) と、WSL(Ubuntu)の Java 設定は完全に別物です。


補足

  • Windows側の java -version → Windows にインストールされた Java を見ている
  • WSL側の java -version → Ubuntu のパス上に Java がなければ "Command not found"

つまり、当たり前だがWSL 上で Spring Boot を動かしたければ、WSL 内部に Java をインストールする必要がある


✅ WSL に Java を入れる(penJDK 17)

Spring Boot 3.x は Java 17以上 が推奨なので、Ubuntuに以下のようにインストールします:

sudo apt update
sudo apt install openjdk-17-jdk

✅ 確認(WSL内で)

java -version

出力例:

openjdk version "17.0.x" ...

JAVA_HOME の設定(WSL用)

readlink -f $(which java)

例:/usr/lib/jvm/java-17-openjdk-amd64/bin/java

その後、以下を実行:

echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

Spring Boot 起動

cd /mnt/c/Users/sawada/Downloads/demoappmaven
./mvnw spring-boot:run

これで WSL 環境でも Spring Boot アプリが立ち上がる。

🛠 Step 1-2: アプリをビルドする

cd demoapp
mvn clean package

正常にビルドされると、target/demoapp-0.0.1-SNAPSHOT.jar ができます。


🛠 Step 1-3: アプリを実行する

java -jar target/demoapp-0.0.1-SNAPSHOT.jar

起動に成功すれば、以下のようなログが表示され、Spring Boot がポート 8080 で起動します:

Tomcat started on port(s): 8080 (http) with context path ''
Started DemoappApplication in 2.345 seconds (JVM running for 2.789)

ブラウザで以下にアクセスして確認してみてください:

http://localhost:8080/

最初はコントローラ未実装のため、以下の画面になります。
image.png

以下の2つは、最終的に同じ目的(アプリの実行)を達成しますが、プロセスに少し違いがあります。

✅ 比較:2つの方法の違いと共通点

実行方法 説明
./mvnw spring-boot:run Maven の Spring Boot プラグインを使って直接アプリを起動
ビルドと起動を一発で実行する開発向けのコマンド
mvn clean packagejava -jar target/xxx.jar アプリを一度 パッケージング(jar化) してから、明示的に jar を実行
→ 本番環境やデプロイ時に使う構成に近い

✅ 両者の違いをもう少し詳しく

比較ポイント spring-boot:run mvn packagejava -jar
実行速度 やや速い(ビルド後すぐ実行) フルビルドが入るため一手間あり
jarファイル生成 ❌ 生成されない target/xxx.jar ができる
利用シーン 開発時のテスト起動に便利 本番配備や配布用ビルドに適する
依存解決 内部的に Maven が解決 mvn clean install で明示的に依存解決

✅ 実際の流れ(Maven手順)

mvn clean package
java -jar target/demoapp-0.0.1-SNAPSHOT.jar

これは、アプリを jar にまとめてから実行する形式で、Docker やサーバーにデプロイするときなどに使います。

✅ まとめると…

./mvnw spring-boot:run は開発用ショートカット
mvn packagejava -jar は本番用ビルド手順


🧪 Step 1-4: 簡単なAPIを追加してみる(HelloController

# src/main/java/com/example/demoapp/HelloController.java を作成

package com.example.demoapp;

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 from Spring Boot!";
  }
}

保存後、再度ビルド&実行:

mvn clean package
java -jar target/demoapp-0.0.1-SNAPSHOT.jar

次にブラウザでアクセス:

http://localhost:8080/hello

"Hello from Spring Boot!" と表示されれば成功です!

dotinstall@DESKTOP-V4DBQTD:/mnt/c/Users/apple/Downloads/demoappmaven$ java -jar target/demoappmaven-0.0.1-SNAPSHOT.jar

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

 :: Spring Boot ::                (v3.4.4)

2025-03-23T16:15:33.028+09:00  INFO 9626 --- [demoappmaven] [           main] c.e.d.DemoappmavenApplication            : Starting DemoappmavenApplication v0.0.1-SNAPSHOT using Java 17.0.14 with PID 9626 (/mnt/c/Users/apple/Downloads/demoappmaven/target/demoappmaven-0.0.1-SNAPSHOT.jar started by dotinstall in /mnt/c/Users/sawada/Downloads/demoappmaven)
2025-03-23T16:15:33.031+09:00  INFO 9626 --- [demoappmaven] [           main] c.e.d.DemoappmavenApplication            : No active profile set, falling back to 1 default profile: "default"

image.png

上記コードはVS Codeで記載しています。code . で立ち上げています。
code .VS Code(Visual Studio Code)を起動するための公式コマンド です。

code . とは?

コマンド 意味
code VS Code を起動するコマンドラインツール
.(ドット) 「現在のディレクトリ」を意味する(カレント)

なので、code . は:

「現在のディレクトリを VS Code で開く」

という意味になります。

✅ 使い方の例(WSL上でもOK)

cd /mnt/c/Users/apple/emoappmaven
code .

該当プロジェクトでcode .を実行。
これで demoappmaven プロジェクトが VS Code で開きます。

✅ WSL 上で code . が使える理由

WSL に code コマンドが入っているのは、**Windows 側の VS Code が WSL と連携する機能(Remote - WSL 拡張機能)**を提供してくれているからです。

初回起動時に自動でインストールされることが多いので、意識せずに使えるようになります。

✅ 補足:VS Code 上で Spring Boot を快適に使うには?

  • Java Extension Pack(by Microsoft)
  • Spring Boot Extension Pack(by Pivotal / VMware)
  • Lombok Extension(必要であれば)

などを入れます。

まとめ

code . は「このフォルダを VS Code で開いて」とお願いしているコマンド
✅ VS Code が WSL と連携できているからこそ、WSL のディレクトリでも使える

fat jarについて

jar tf target/demoappmaven-0.0.1-SNAPSHOT.jarにより、どのclassを使用しているかがわかる

xxxx@DESKTOP-V4DBQTD:/mnt/c/Users/sawada/Downloads/demoappmaven$ jar tf target/demoappmaven-0.0.1-SNAPSHOT.jar
META-INF/
META-INF/MANIFEST.MF
META-INF/services/
META-INF/services/java.nio.file.spi.FileSystemProvider
org/
org/springframework/
org/springframework/boot/
org/springframework/boot/loader/
org/springframework/boot/loader/jar/
org/springframework/boot/loader/jar/JarEntriesStream$InputStreamSupplier.class
org/springframework/boot/loader/jar/JarEntriesStream.class
org/springframework/boot/loader/jar/ManifestInfo.class
org/springframework/boot/loader/jar/MetaInfVersionsInfo.class
org/springframework/boot/loader/jar/NestedJarFile$JarEntriesEnumeration.class
・・・

fat jar とは?

  • アプリケーション本体 + 依存ライブラリ がすべて 1 つの .jar ファイルにパッケージされているものです。
  • Spring Boot ではデフォルトで fat jar を作成します(spring-boot-maven-plugin を使っている場合など)。

どのクラスが含まれているかについて

jar tf コマンドで出力された一覧は、jar 内に含まれているすべてのクラスファイルやリソースファイルを示します。これは:

  • 自作クラス(あなたが書いたアプリケーションのコード)
  • Spring Boot の内部クラス
  • 使用しているライブラリ(例えば Jackson、Hibernate など)

を含んでいます。

まとめ

  • これは fat jar です。
  • org/springframework/boot/loader/ が含まれているのが明確な証拠です。
  • jar tf の出力は、どのクラスが含まれているかを漏れなく確認する手段として使えます。

おわりに

単純な環境構築ですが、少しずつ進めてみたいため記録として記載させて頂きました。

0
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
0
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?