Help us understand the problem. What is going on with this article?

SpringBootでHello World!

目的

前回記事は、Spring Initializr を使って爆速でHello World!!!と急いでいる人向けの記事でした。

今回はSpring Quickstart Guideを参考にゆっくり進めてみようと思います。

事前準備

統合開発環境は、 IntelliJ IDEA, Spring Tools, Visual Studio Code, Eclipseが人気らしいですね。
私は、Visual Studio Code(以下VSCode)を使用します。

Javaの開発をするための開発キットは、AdoptOpenJDKのversionは、8か11がオススメみたいです。
OpenJDK11を導入する方法をJava開発環境構築に記載していますので、未だの人はそちらを参考にしてみてください。

1.SpringBoot projectを始めよう!

まずは、spring initializrにアクセスします。
スクリーンショット_2020-06-29_14_37_13-2.png

ProjectはMavenを選択します。

プログラムが実行できるように、ソースコードの解析やプログラミング言語を機械語にコンパイルをしてくれるもの。

参考URL:知識ゼロからAnt と Maven と Gradle について勉強する。-ビルドの定義からツールの特徴まで

Languageは、Javaを選択します。

SpringBootは、2.3.1を選択します。(2020/6/30現在)

公式では、versionは定期的に変わるので一番新しいversionを選んでください。(ただし、SNAPSHOTは選択しないでください)と書かれています。

そして、ADD DEPENDENCIESボタンをクリック。
スクリーンショット_2020-06-29_13_14_12.png

webと入力してください。

スクリーンショット 2020-06-29 13.30.24.png

そして、Spring Webを選択してください。

Spring Webとは、

Spring MVC を使用して、RESTful を含む Web アプリケーションを構築するための設定です。

以下のように表示されていればOKです。
スクリーンショット_2020-06-29_14_37_13.png

最後にProject Metadataを編集していきます。

スクリーンショット_2020-06-29_14_37_13-3.png

Group:プロジェクトを一意に識別する名前。 プロジェクトのルートパッケージ名を指定するのが一般的。
Artifact:プロジェクトの成果物の名前。Artifactと同じ名称を使用することが推奨されているみたいで、こちらを変更するとNameも変更されます。
Name:プロジェクトの表示名。Mavenの場合、mainプログラムのクラス名としても使われます。Artifactと同じ名称を使用することを使用することが推奨されているみたいで、こちらを変更するとArtifactも変更されます。
Description:プロジェクトの説明を入力します。
Package Name:プロジェクトのパッケージ名。通常は、Groupで指定したパッケージとArtifactで指定した名称で構成されます。(Group名.Artifact名となる)
Packaging:パッケージする方法をJarもしくはWarのいずれかを選択します。

今回はJava11を使用するので、11を選択してGENERATEボタンをクリックします。

スクリーンショット_2020-06-30_9_50_39.png

Zipファイルがダウンロードされるので、
Spring_Initializr_と_メモ.png

そのZipファイルを展開してください。

スクリーンショット 2020-06-30 10.00.39.png

準備完了です。

2.コードを追加しよう!

先ほどのフォルダをVSCodeで開きます。
Java Extension Packのインストールを推奨します。と言われるのでインストールしておきましょう。

スクリーンショット 2020-06-30 10.08.25.png

そして、src/main/java/com/example/demoの中にある、DemoApplication.javaを開きます。
スクリーンショット 2020-06-30 10.11.03.png

DemoApplication.java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

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

}

クラスの上に記述されている@〇〇は、アノテーションと言います。

アノテーションとは注釈の意味であり、あるデータに対して関連する情報を注釈として付ける事であり、
プログラムの中では記述されたコードに注意書きを追加する機能となります。
@SpringBootApplicationというアノテーションを記述することで、Spring Bootの起動クラスとして必要な機能が自動的に組み込まれます。

公式を参考にコードを追加します。

DemoApplication.java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

@SpringBootApplication
@RestController
public class DemoApplication {

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

    @GetMapping("/hello")
    public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
        return String.format("Hello %s!", name);
    }
}

@RestControllerというアノテーションを記述することで、クラスをControllerとして認識してくれます。
Viewへ遷移しないため、メソッドの戻り値がそのままレスポンスボディに書き込まれます。(今回は、Hello 〇〇!と返されます)

@GetMappingというアノテーションを記述することで、そのURLでアクセスされた時にメソッドが呼ばれるようになります。
今回は、http://localhost8080/hello とアクセスされた時にhelloメソッドが呼ばれるようになっています。

@RequestParamというアノテーションを記述することで、URLのクエリパラメータを受け取る事が出来ます。
今回は、?name=〇〇とアクセスすると、〇〇に入った値が変数nameに格納されるようになっており、何も指定がない場合は、Worldが格納されます。

3.実行してみよう!

ターミナルでこのプロジェクトファイルがあるフォルダーに移動します。
そして./mvnw spring-boot:runを入力して実行します。

ターミナル
$ ./mvnw spring-boot:run

[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------------< com.example:demo >--------------------------
[INFO] Building demo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] >>> spring-boot-maven-plugin:2.3.1.RELEASE:run (default-cli) > test-compile @ demo >>>

〜省略〜

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.1.RELEASE)

2020-06-30 11:41:46.106  INFO 64839 --- [           main] com.example.demo.DemoApplication         : Starting Demo

〜省略〜

 と表示されたら成功です!

http://localhost:8080/hello にアクセスしてみてください。

スクリーンショット 2020-06-30 11.47.12.png

Hello World!と表示されていますね。変数nameにはWorldが入っているからです。

では次に以下のように、URLのhelloの後ろに、/?name=任意の文字列 を追加してみてください。
http://localhost:8080/hello/?name=tanaka

そしてEnterを押すと、
スクリーンショット 2020-06-30 11.50.38.png

Hello tanaka!と表示されていますね。変数nameにはtanakaが入っているからです。

終わりに

今回は公式を参考にゆっくりと進めて行き、Webアプリケーションの土台を作成する事が出来ました。
ご自身でコードを変更してはブラウザで確認するといった学習にご活用いただければと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした