LoginSignup
1
1

Sprint Bootの環境を構築したときのメモ

Posted at

背景・目的

今まで、Sprint Bootについてあまり触ってきませんでした。どのような特徴があるのかをドキュメントを基に整理しようと思います。

まとめ

下記に特徴をまとめます

特徴 説明
Spring Boot Springを使ったアプリケーションを高速開発するためのもの
SpringのFramworkを駆使したアプリケーションを素早く作成できる
Spring Springのコア部分

概要

Sprint Bootを基に整理します。

  • Spring Bootを使用すると、製品グレードのSpringベースのアプリケーションがすぐに作成できる
  • 最小限の労力で始めることができる
  • ほとんどのSpring Bootアプリは、最小限のSpring構成が必要

特徴

  • スタンドアロンのSpring アプリケーションを作成する
  • WARファイルは、不要。Tomcat、Jetty、Undertowを直接組み込んでいる
  • シンプルなビルド設定を抵抗するために、「Stater」と呼ばれる依存関係を提供
  • Springご3rd Party ライブラリーを可能な限り自動で構成する
  • メトリクス、ヘルスチェック、外部構成などプロダクトレベルの機能を提供する
  • コード生成は一切不要で、XMLの構成も不要

Spring Bootのアプリケーション開発

下記に大別されます。

  • Spring Boot CLI
    • Spring Bootを使うためのCLI
  • Spring Boot Suite
    • Spring の専用開発ツール
    • VSCode用が用意されている
  • Spring Initializer
    • Spring InitalizerはWebサイト
    • ここで作成するアプリの設定を行うと、そのプロジェクトをダウンロードできる

Spring Bootのプロジェクトの基本構成

Mavenの場合は、下記のとおりとなります。

src         // ソースファイル等が配置される
|---main
|     |--- java  // Javaコードを配置する
|     |--- resource // アプリケーションに必要な、ファイルを配置する
|             |----- static // 静的ファイルを配置する。例)CSS、HTML、JS等
|             |----- template // テンプレートファイルを配置
|             |----- application.properties
|---test
target      // 作成されるアプリケーションファイル等が配置される

Springについて

そもそも、Springについても知識を持ち合わせていないので、整理します。

Why Spring

Why Springを基に整理します。

  • Springは、Javaプログラミングを迅速に、簡単に、安全に誰でも作れる
  • Springは、スピード、シンプルさ、生産性にフォーカスした世界で最も一般的なJava Framework

Spring is everywhere

  • Springの柔軟なライブラリは、世界中の開発者から信頼されている
  • Springは、何百万ものエンドユーザに素晴らしい体験を提供している
  • Springは、Alibaba、Amazon、Google 、MS等のビッグテックからの貢献もある

Spring is flexible

  • Springは、柔軟で包括的な拡張機能と3rd Partyのライブラリにより開発者は、ほとんどのアプリケーションを開発できる
  • Spring FrameworkのコアとなるInversion of Control (IoC) and Dependency Injection (DI)の機能は、幅広い範囲の機能と関数を提供する
  • セキュア、リアクティブ、クラウドベースのWebのマイクロサービス、企業向けの複雑なストリーミングであれ、Springは役立つツールを保持している

Spring is productive

  • Spring BootはJavaプログラミングのタスクへのアプローチを変えて、体験を革新的に変える
  • Spring BootとSpring Cloudの豊富なサポートライブラリ、サーバ、パターン、テンプレを組み合わせて、マイクロサービスベースのアーキテクチャ全体をデプロイする

Spring is fast

  • デフォルトで高速起動、高速シャットダウン、最適化された実行が実現する

Spring is secure

  • セキュリティ問題に迅速かつ責任を持って対処してきた
  • Springのコミッターはセキュリティ専門家と協力し、報告された脆弱性を修正してテストする

Spring is supportive

  • コミュニティは大きく、グローバル、多様性

What Spring can do?

  • マイクロサービス
    • 独立している
    • 本番環境レベルの機能を迅速に提供する
  • Reactive
    • 非同期非ブロッキングアーキテクチャ
  • Cloud
    • プラットフォームに関係なくサービスを接続して拡張する
  • Web apps
    • あらゆるデータストアに接続された高速で安全かつ応答性の高いWebアプリケーションのためのフレームワーク
  • サーバレス
    • 需要に応じて、スケールアップする
  • Event Driven
    • ビジネスイベントに反応する
    • ストリーミングデータに基づいてリアルタイムに操作する
  • Batch
    • 自動化されたタスク

Maven

pom.xml

下記に、インストールしたpom.xmlを記載します

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.1</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>sampleapp</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>sampleapp</name>
	<description>Demo project for Spring Boot</description>
	<url/>
	<licenses>
		<license/>
	</licenses>
	<developers>
		<developer/>
	</developers>
	<scm>
		<connection/>
		<developerConnection/>
		<tag/>
		<url/>
	</scm>
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

project

  • 基本的な情報。変更することはありません
  • ルートになります

parent

  • pom.xmlの継承に関する設定
  • Mavenでは、既にあるpom.xmlを継承して、新たに作成できる
  • 上記の例では、org.springframework.bootのspring-bbot-starter-parentのpomが継承されている

properties

  • ビルドに必要な設定を記載する
  • 上記の例では、java.versionの17を指定している

dependencies

  • プロジェクトで利用するライブラリ等の情報を記載する
  • さらに下記を記載する
    • groupId
      • 上記では、下記が指定されている
        • org.springframework.boot
          • Webアプリを作成する際に必要となる
        • spring-boot-starter-test
          • ユニットテストに関するライブラリ
    • artifactId
    • version
    • scope

modelVersion

  • Mavenのバージョン

groupId

  • グループIDのタグ

artifactId

  • アーティファクトID

version

  • バージョン名のタグ

name

  • プロジェクト名

description

- 説明

buildとplugins

  • プログラムのビルド時に利用される機能などの情報
  • 上記では、下記が指定されている
    • org.springframework.boot
    • spring-boot-maven-plugin

実践

前提

下記を利用しています。

  • Mac
  • VSCode
  • Homebrew

環境の準備

JDKのインストール

JDKは、Amazon Corretto 17をインストールします

  1. [Amazon Corretto JDKのインストーラー(https://docs.aws.amazon.com/ja_jp/corretto/)のページに遷移します
  2. Corretto17の画面に遷移します
  3. ナビゲーションペインで、「Downloads」をクリックします
  4. Mac OSのインストーラーをダウンロードします
  5. ダウンロードしたファイルをクリックします
  6. インストーラーが起動するので、インストールします
  7. 下記のコマンドを実行し、インストールを確認します
    $ /usr/libexec/java_home --verbose
    Matching Java Virtual Machines (1):
        17.0.11 (x86_64) "Amazon.com Inc." - "Amazon Corretto 17" /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
    /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
    $ 
    
  8. 環境変数をセットします
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
    
  9. バージョンを確認します
    $ java --version
    openjdk 17.0.11 2024-04-16 LTS
    OpenJDK Runtime Environment Corretto-17.0.11.9.1 (build 17.0.11+9-LTS)
    OpenJDK 64-Bit Server VM Corretto-17.0.11.9.1 (build 17.0.11+9-LTS, mixed mode, sharing)
    $
    

Mavenのインストール

  1. Homebrewでmavenをインストールします
    $ brew install maven
    
  2. インストールの確認
    $ mvn -v 
    Apache Maven 3.9.8 (36645f6c9b5079805ea5009217e36f2cffd34256)
    Maven home: /usr/local/Cellar/maven/3.9.8/libexec
    Java version: 17.0.11, vendor: Amazon.com Inc., runtime: /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
    Default locale: ja_JP, platform encoding: UTF-8
    OS name: "mac os x", version: "14.5", arch: "x86_64", family: "mac"
    $ 
    

VSCodeに Spring Boot Extension Packをインストール

  1. VSCodeを起動します。

  2. ナビゲーションペインで、「拡張機能」アイコンをクリックします
    image.png

  3. 検索ウインドウに 「Spring Boot Extension Pack」を入力し検索します

  4. 対象プラグインを選択し、「インストール」をクリックします

  5. インストール後、VSCodeを再起動します

Extension Pack for Javaをインストール

  1. ナビゲーションペインで、「拡張機能」アイコンをクリックします
    image.png

  2. 検索ウインドウに 「Extension Pack for Java」を入力し検索します

  3. 対象プラグインを選択し、「インストール」をクリックします
    image.png

  4. インストール後、VSCodeを再起動します

実装する

プロジェクトの作成

  1. VSCodeで「表示」>「コマンドパレット」をクリックします
    image.png

  2. コマンドパレットの入力バーに「spring initializr maven」と入力し、選択します
    image.png

  3. 最新バージョンの3.3.1を指定します
    image.png

  4. 「Java」を選択します
    image.png

  5. GroupIdに「com.example」を入力(選択)し、Enterをクリックします
    image.png

  6. アーティファクトIDに「sampleapp」を入力し、Enterをクリックします
    image.png

  7. パッケージ化に「Jar」を選択し、Enterをクリックします
    image.png

  8. Javaのバージョンを「17」を選択します
    image.png

  9. 「spring web」を入力し検索し、「Spring Web web」を選択します
    image.png

  10. 「Selected 1dependency」を選択します
    image.png

  11. 保存するためにダイアログが起動されるので、フォルダを選択し、「Generate into this folder」をクリックします
    image.png

  12. VSCodeの「ファイル」>「フォルダーをワークスペースに追加」をクリックし、作成されたフォルダを選択します
    image.png

  13. 追加されました
    image.png

  14. JAVA PROJECTSにも追加されています
    image.png

Spring Boot Dashboard

  1. ナビゲーションペインの「Spring Boot Dashboard」アイコンをクリックします
    image.png

  2. APPS、BEANS、ENDPOINT MAPPINGSが表示されます

  3. APPSの「sampleAppApplication」を選択します

  4. 下記のコードが表示されました

    package com.example.sampleapp;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SampleappApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SampleappApplication.class, args);
    	}
    
    }
    
  5. APPSで「実行」ボタンをクリックします
    image.png

  6. Spring が実行されました。

    $  cd /Users/XXXX/git/spring/sampleapp ; /usr/bin/env /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home/bin/java @/var/folders/0q/3t1v6lb91qj08tz8t9s
    qyp5m0000gn/T/cp_37dhc661wrdwo8a54ua9nys11.argfile com.example.sampleapp.SampleappApplication 
    
      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
    
     :: Spring Boot ::                (v3.3.1)
    
    2024-07-09T22:29:17.845+09:00  INFO 14879 --- [sampleapp] [           main] c.e.sampleapp.SampleappApplication       : Starting SampleappApplication using Java 17.0.11 with PID 14879 (/Users/XXXX/git/spring/sampleapp/target/classes started by XXX in /Users/XXXX/git/spring/sampleapp)
    2024-07-09T22:29:17.848+09:00  INFO 14879 --- [sampleapp] [           main] c.e.sampleapp.SampleappApplication       : No active profile set, falling back to 1 default profile: "default"
    2024-07-09T22:29:18.625+09:00  INFO 14879 --- [sampleapp] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
    2024-07-09T22:29:18.637+09:00  INFO 14879 --- [sampleapp] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
    2024-07-09T22:29:18.637+09:00  INFO 14879 --- [sampleapp] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.25]
    2024-07-09T22:29:18.679+09:00  INFO 14879 --- [sampleapp] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
    2024-07-09T22:29:18.680+09:00  INFO 14879 --- [sampleapp] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 787 ms
    2024-07-09T22:29:18.979+09:00  INFO 14879 --- [sampleapp] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path '/'
    2024-07-09T22:29:18.988+09:00  INFO 14879 --- [sampleapp] [           main] c.e.sampleapp.SampleappApplication       : Started SampleappApplication in 1.468 seconds (process running for 7.057)
    
    

サンプルコードの解説

アノテーション

  • アノテーションを付与することで、Spring Bootで起動するアプリケーションと認識し、必要な設定ファイルなどを自動的に組み込んでくれます
    @SpringBootApplication
    

SpringApplicationクラス

  • SpringApplicationクラスは、Spring Bootアプリケーションの基本的なクラス
  • 引数に、実行クラスのClassインスタンスと、パラメータを渡す
    SpringApplication.run(SampleappApplication.class, args);
    

考察

今回、Spring Bootの特徴を簡単に整理し、環境構築してみました。今後も試してみたいと思います。

参考

1
1
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
1