Spring Boot(Marven+テキストエディタ)でHello world!

##はじめに
[本家のドキュメント](https://spring.pleiades.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-first-application)を見ながらHello worldを試しました。

今後、本家のドキュメントは更新されていくと思うので、
魚拓として、java, marven, springのバージョンは下記の状態で行うとこうなりましたよ、という記録を残しておきます。


```
$ java -version
java version "11.0.7" 2020-04-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.7+8-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.7+8-LTS, mixed mode)
```

```
$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/Cellar/maven/3.6.3_1/libexec
Java version: 13.0.2, vendor: N/A, runtime: /usr/local/Cellar/openjdk/13.0.2+8_2/libexec/openjdk.jdk/Contents/Home
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.15.4", arch: "x86_64", family: "mac"
```

```
$ spring --version
Spring CLI v2.2.6.RELEASE
```

## プロジェクトのフォルダを作る
名前はとりあえず「spring-boot-hello」とします。
```
$ mkdir spring-boot-hello
$ cd spring-boot-hello
```
## POM.xmlを作る
spring-boot-helloフォルダの直下に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>

    <groupId>com.example</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
    </parent>

    <description/>
    <developers>
        <developer/>
    </developers>
    <licenses>
        <license/>
    </licenses>
    <scm>
        <url/>
    </scm>
    <url/>

    <!-- Additional lines to be added here... -->

</project>
```

このpom.xmlは
RubyOnRailsであればGemfile
JavaScript系であればpackage.json
にあたるファイルだと思ってます。

##依存関係を追加する。

Webサービスの開発に必要な「spring-boot-starter-web」をpom.xmlに追加します。

Addtional lines to be add hereの後に下記を追加しまし。
(本家ドキュメントはparentの下と書かれてましたが、こっちの方が良いかなと思って勝手にこっちに書いてみました。)

```
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
```
貼り付ける際にはネストなど気をつけてください。

依存関係を確認するには下記のコマンドを叩きます。

```
$ mvn dependency:tree
```
webサービスを動かすのに必要な様々な機能が依存関係として表示されたと思います。

```
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.example:myproject >------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ myproject ---
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
[INFO] \- org.springframework.boot:spring-boot-starter-web:jar:2.2.6.RELEASE:compile
[INFO]    +- org.springframework.boot:spring-boot-starter:jar:2.2.6.RELEASE:compile
[INFO]    |  +- org.springframework.boot:spring-boot:jar:2.2.6.RELEASE:compile
[INFO]    |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.2.6.RELEASE:compile
[INFO]    |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.2.6.RELEASE:compile
[INFO]    |  |  +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO]    |  |  |  +- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO]    |  |  |  \- org.slf4j:slf4j-api:jar:1.7.30:compile
[INFO]    |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.12.1:compile
[INFO]    |  |  |  \- org.apache.logging.log4j:log4j-api:jar:2.12.1:compile
[INFO]    |  |  \- org.slf4j:jul-to-slf4j:jar:1.7.30:compile
[INFO]    |  +- jakarta.annotation:jakarta.annotation-api:jar:1.3.5:compile
[INFO]    |  +- org.springframework:spring-core:jar:5.2.5.RELEASE:compile
[INFO]    |  |  \- org.springframework:spring-jcl:jar:5.2.5.RELEASE:compile
[INFO]    |  \- org.yaml:snakeyaml:jar:1.25:runtime
[INFO]    +- org.springframework.boot:spring-boot-starter-json:jar:2.2.6.RELEASE:compile
[INFO]    |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.10.3:compile
[INFO]    |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.10.3:compile
[INFO]    |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.10.3:compile
[INFO]    |  +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.10.3:compile
[INFO]    |  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.10.3:compile
[INFO]    |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.10.3:compile
[INFO]    +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.2.6.RELEASE:compile
[INFO]    |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.33:compile
[INFO]    |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.33:compile
[INFO]    |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.33:compile
[INFO]    +- org.springframework.boot:spring-boot-starter-validation:jar:2.2.6.RELEASE:compile
[INFO]    |  +- jakarta.validation:jakarta.validation-api:jar:2.0.2:compile
[INFO]    |  \- org.hibernate.validator:hibernate-validator:jar:6.0.18.Final:compile
[INFO]    |     +- org.jboss.logging:jboss-logging:jar:3.4.1.Final:compile
[INFO]    |     \- com.fasterxml:classmate:jar:1.5.1:compile
[INFO]    +- org.springframework:spring-web:jar:5.2.5.RELEASE:compile
[INFO]    |  \- org.springframework:spring-beans:jar:5.2.5.RELEASE:compile
[INFO]    \- org.springframework:spring-webmvc:jar:5.2.5.RELEASE:compile
[INFO]       +- org.springframework:spring-aop:jar:5.2.5.RELEASE:compile
[INFO]       +- org.springframework:spring-context:jar:5.2.5.RELEASE:compile
[INFO]       \- org.springframework:spring-expression:jar:5.2.5.RELEASE:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.657 s
[INFO] Finished at: 2020-04-28T14:40:57+09:00
[INFO] ------------------------------------------------------------------------
```

##コードを書く

src/main/java/
というフォルダ階層を作り、その下にExample.javaというファイルを作ります。

```Excample.java
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class Example {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

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

}
```

##実行する

```
$ mvn spring-boot:run
```

だだだーとターミナル上に色々表示されますが、
下記のロゴが出てれば成功だと思います。

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

## ブラウザで確認

http://localhost:3000

にアクセスするとHello Worldと表示されました。

![spring-boot-hello.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150699/6eaa062c-6748-b1f0-258b-037c6b06e344.png)


以上となります。
ソースは[github](https://github.com/aoyaman/spring-boot-hello)に置いてます。