だれも聞いていないと思って歌え

dance as if no one’s watching, sing as if no one’s listening, and live everyday as if it were your last.

Gradle + Spring Boot で Hello World

Java エンジニア向けの内容ではないです。

普段フロントエンドをやっているエンジニアが、案件の合間に先輩に教わりながら JavaHello World した時のメモです。

本当は今携わっているプロダクトのバックエンドのシステムそのものをローカル環境で動かしたかったのですが、 Mac 向けの環境構築手順がなく、不慣れな言語の不慣れなフレームワークで手こずったため挫折しました。。。

1. JDK のインストール

Java の実行環境がないため、まずは現在最新の JDK 12 をダウンロード。

jdk.java.net

展開します。

% tar xvzf openjdk-11+28_osx-x64_bin.tar.gz
% sudo mv jdk-12.0.1.jdk /Library/Java/JavaVirtualMachines/
% /usr/libexec/java_home -v
Matching Java Virtual Machines (1):
    12.0.1, x86_64: "OpenJDK 12.0.1"    /Library/Java/JavaVirtualMachines/jdk-12.0.1.jdk/Contents/Home

次に、パスを通します。

% export JAVA_HOME='/usr/libexec/java_home'
% java -version
openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment (build 12.0.1+12)
OpenJDK 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

インストールした JDK の情報が表示されたので、これでインストールは完了です。

手順等はこちらを参考にしました。 qiita.com

ちなみに、JDK とは Java Development Kit のことで、 Java のプログラミングに必要なツール群を指します。

詳しく知りたい場合はこちらの Oracle の公式動画が分かりやすかったです。

youtu.be

2. JavaHello World

Java の実行環境を手に入れたので、とりあえず Java のコードを動かしてみます。

Hello World! するだけのシンプルなコード。

// HelloWorld.java
public class HelloWorld{
  public static void main(String[] args){
    System.out.println("Hello World!");
  }
}

javac コマンドでコンパイルして HelloWorld.class というファイルができたら、 java コマンドで実行します。

% javac HelloWorld.java
% ls
HelloWorld.class  HelloWorld.java
% java HelloWorld
Hello World!

👏

3. SDKMAN のインストール

上記の理由により実際の開発環境を作るのを諦めたため、せっかくなのでモダンな Java の開発環境を作ることにしました。

SDKMAN は、 Gradle や Groovy などのベースの Java バージョンを管理をします。( nodenv のようなもの)

curl でダウンロードします。

% curl -s "https://get.sdkman.io" | bash
...
All done!


Please open a new terminal, or run the following in the existing one:

    source "/Users/<username>/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

    sdk help

Enjoy!!!
% source "/Users/<username>/.sdkman/bin/sdkman-init.sh"
% sdk version
==== BROADCAST =================================================================
* 2019-05-10: Groovy 3.0.0-beta-1 released on SDKMAN! #groovylang
* 2019-05-10: Groovy 2.5.7 released on SDKMAN! #groovylang
* 2019-05-10: Groovy 2.4.17 released on SDKMAN! #groovylang
================================================================================

SDKMAN 5.7.3+337

4. Gradle のインストール

Gradle とはオープンソースのビルドシステムで、 Maven の次世代のものだそうです。

Java プロジェクトの作成、ビルド、実行などができるので npm 的なものと思って良さそうです。

gradle.org

Gradle は SDKMAN でインストールします。

% sdk install gradle 5.4.1
...
Installing: gradle 5.4.1
Done installing!


Setting gradle 5.4.1 as default.
% gradle -v

Welcome to Gradle 5.4.1!

Here are the highlights of this release:
 - Run builds with JDK12
 - New API for Incremental Tasks
 - Updates to native projects, including Swift 5 support

For more details see https://docs.gradle.org/5.4.1/release-notes.html


------------------------------------------------------------
Gradle 5.4.1
------------------------------------------------------------

Build time:   2019-04-26 08:14:42 UTC
Revision:     261d171646b36a6a28d5a19a69676cd098a4c19d

Kotlin:       1.3.21
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          12.0.1 (Oracle Corporation 12.0.1+12)
OS:           Mac OS X 10.14.4 x86_64

5. Spring Boot のプロジェクトの作成と実行

Spring Boot とは Spring Framework をベースにした、簡単にアプリケーション開発を始められる軽量なフレームワークです。

これを選んだ理由は、バックエンドのシステムで利用しているのがフレームワークSpring Framework をベースにしているためです。

spring.io

基本設定をスキップして、すでにあるプロジェクトを clone します。

% git clone https://github.com/spring-guides/gs-spring-boot.git

作成したプロジェクトを実行します。

% cd gs-spring-boot/initial
% gradle bootRun
...
<=========----> 75% EXECUTING [3m 14s]
> :bootRun
> IDLE

上記の状態になったら起動の完了です。 localhost:8080 にアクセスすると次のように表示されます。 f:id:fanjia:20190514020039p:plain

💪

6. Hello World する

せっかくなので Hello World とテキストを書き換えます。

gs-spring-boot/initial/src/main/java/hello/HelloController.java の return のテキストを変更します。

package hello;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

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

}

再び gradle bootRun を実行します。

f:id:fanjia:20190514020714p:plain

🎉

せっかくなので、 DB に繋げて CRUD くらいはやってみようかなあと思っています。