Spring Boot CLIのバージョンとモジュールのバージョンは要チェックですね

毎度、いろんなことにハマっている今日この頃です。今回は、Sring Boot CLIというコマンドをインストールすれば、EclipseなどのIDE統合開発環境)を使わなくても、Spring Bootを起動できちゃうんですが、大いにハマったのでメモメモ。

Spring Boot CLIをダウンロード

※Spring Boot CLIのバージョンによって利用できるモジュールも変わります。

これ、参考書とかに書いておいて欲しいんですが、どのバージョンのSpring Boot CLIを使うかで、利用できるモジュールが変わってくるんですが、確認できる公式リファレンスっぽいのがあるんですね。何故に、そういうものを掲載してくれないのか謎ですが....。

では、スタート。

Index of /spring-boot/docs にアクセス。下の方にスクロールし、

f:id:ts0818:20171104195526j:plain

適当なバージョンを選択。今回は、思い切って2017年11月04日(土)現在の最新っぽい『2.0.0.M5』 を選択。

f:id:ts0818:20171104195620j:plain

「reference/」を選択。

f:id:ts0818:20171104195836j:plain

「htmlsingle/」を選択。

f:id:ts0818:20171104195909j:plain

Spring Boot(2.0.0.M5バージョン)の説明のページに来ます。

f:id:ts0818:20171104200005j:plain

『Ctrl + F』で検索バーに「Spring Boot CLI」と入力しEnter。「Installing the Spring Boot CLI」をクリックします。

f:id:ts0818:20171104200411j:plain

「10.2.1 Manual installation」の「spring-boot-cli-2.0.0 M5-bin.zip 」をクリック。

f:id:ts0818:20171104200800j:plain

ダウンロードできました。

f:id:ts0818:20171104201506j:plain

 

Spring Boot CLIの配置とパスの設定

ダウンロードしたzipの中身を適当な位置に配置します。

f:id:ts0818:20171104202614j:plain

今回は、Cドライブ直下に配置します。参考書(『Spring Boot プログラミング入門(著:掌田津耶乃)』)でもCドライブ直下なので。

Cドライブ直下にドラッグ&ドロップ。

f:id:ts0818:20171104202643p:plain

配置されました。

f:id:ts0818:20171104202758j:plain

Install Spring Boot Command Line Interface on Windows | HowToProgram

⇧  上記サイト様を参考に、環境変数の設定。

Windowsアイコンを右クリックし、

f:id:ts0818:20171104111058j:plain

「システム(Y)」を選択。

f:id:ts0818:20171104203326j:plain

「システム情報」をクリック。

f:id:ts0818:20171104203435j:plain

「システムの詳細設定」をクリック。

f:id:ts0818:20171104203617j:plain

環境変数(N)...」をクリック。

f:id:ts0818:20171104203737j:plain

「システム環境変数(S)」の「新規(W)...」を選択。

f:id:ts0818:20171104204931j:plain

「変数名(N):」を「SPRING_HOME」、「変数値(V):」を「[配置したディレクトリ](自分の場合ですと、『C:¥spring-2.0.0.M5』)」として「OK」。

f:id:ts0818:20171104205033j:plain

「システム環境変数(S)」の「Path」を選択し、「編集(I)...」をクリック。

f:id:ts0818:20171104205508j:plain

「新規(N)」をクリック。

f:id:ts0818:20171104205622j:plain

「%SPRING_HOME%¥bin」と入力し、「OK」。

f:id:ts0818:20171104205656j:plain

コマンドプロンプトを起動し、

spring version

でバージョンが表示されればOK。

f:id:ts0818:20171104205914j:plain

 

Groovyを使ってみる

Groovyとは?

 

GroovyはJVM上で動作する言語処理系および言語の名称であり、Javaとの直接的な連携を特徴とする。例えばGroovyからすべてのJava SE APIや、Javaで書かれた任意のサードパーティ製のコンパイル済みのライブラリなどを呼び出すことができる。言語の記述能力としては、Javaで記述できることは、無名内部クラスの定義など一部の例外を除き基本的にGroovyでも記述することができる。逆に言うとJavaで記述できない機能は記述できないが、Javaと同様にC言語などで書かれたネイティブメソッドなどは呼び出すことができる。

Groovyは動的な言語であり、直接スクリプトを実行することができる。Groovyコード断片をコマンドラインに与えワンライナーとして実行することも可能である。なおこの時、中間的にJavaソースコードが生成されることはなく、バイトコードがメモリ上に生成されて直接実行される。また、groovycコマンド(groovyコンパイラ)を使ってクラスファイルをあらかじめ生成しておくこともできる。いずれにせよGroovyコードは内部的にはJavaバイトコードに変換されてJVM上で実行される。

このとき、GroovyコードもJavaコードも、JVMからみると両方ともJavaバイトコードとして解釈実行されるという意味で区別がない。Groovyのこのような仕組みから、GroovyはJavaと極めて親和性が高く、Java技術で培われてきた開発インフラやライブラリ、ノウハウ、ツール、JVM最適化技術などの多くをそのまま流用することができる。Groovyから生成したクラスファイルは通常のクラスファイルであるので、Javaクラスファイルを要求するプラグインなどをGroovyで記述することも容易である。

Groovyは、同じ実行時システムを共有する、Javaコードの別の表記法だと考えることもできる。

Groovy - Wikipedia

ということで、さっそくプロジェクトフォルダを適当な場所に作成。今回はデスクトップにフォルダを作成。

f:id:ts0818:20171104222553j:plain

プロジェクト名を適当につけます。

f:id:ts0818:20171104222615j:plain

作成したフォルダの中にファイルを作成します。

f:id:ts0818:20171104222713j:plain

拡張子を「.groovy」としたファイルとして保存。

f:id:ts0818:20171104222837j:plain

「はい」を選択。

f:id:ts0818:20171104222937j:plain

ファイルを適当なエディタで開きます。

f:id:ts0818:20171104223005j:plain

サクラエディタを使っていきます。 

f:id:ts0818:20171104223059j:plain

ファイルの中身をこんな感じにして、

f:id:ts0818:20171104224808j:plain

文字コードを変えたいので、「ファイル(F)」>「名前をつけて保存(A)...」を選択。

f:id:ts0818:20171104223224j:plain

文字コードセット(C):」で「UTF-8」を指定、

f:id:ts0818:20171104223331j:plain

「保存(S)」。

f:id:ts0818:20171104223432j:plain

「はい」。

f:id:ts0818:20171104223510j:plain

そしたら、コマンドプロンプトを起動。プロジェクトフォルダに移動します。

cd C:\Users\Toshinobu\Desktop\firstGroovy

f:id:ts0818:20171104223945j:plain

 Spring Bootで起動。

spring run app.groovy

f:id:ts0818:20171104224202j:plain

f:id:ts0818:20171104224234j:plain

 ブラウザで「http://localhost:8080」にアクセス。

f:id:ts0818:20171104231026j:plain

表示されました。

ブラウザで「http://localhost:8080」にアクセスすると、「/」でアクセスしたことになるため、@RequestMapping("/")の処理が実行され、文字列を返します。

クラスに@RestControllerが付いているので、「REST(Representational State Transfer)」アプリケーションのControllerの役割を果たすようです。

 

Spring Boot CLIのバージョンとモジュールのバージョンは要確認

※Spring Boot CLIのバージョンによって利用できるモジュールも変わります。

今回、Spring Bootで利用できるHTMLテンプレートエンジンであるThymeleaf を利用していきますが、Thymeleafのモジュールを読み込むのですが、Spring Boot CLIのバージョンによって読み込むべきモジュールも変わってくるんですね。

参考書をそのままやってて動かなくて困るのがこのバージョンの違いでしょうか...。バージョンの確認方法を参考書とかに記載してくれてると助かるんですけどね...。

 

というわけで、まずは、いま使っているSpring Boot CLI 2.0.0.M5で利用できるthymeleafのモジュールを確認。

https://docs.spring.io/spring-boot/docs/[利用してるSpring Boot CLIのバージョン]/reference/htmlsingle/ にアクセスします。(⇧  このリンクは、2.0.0.M5のバージョンのリファレンスに遷移します。)

f:id:ts0818:20171105090517j:plain

一番下の方にスクロールすると、利用できるモジュールが掲載されています。

f:id:ts0818:20171105090639j:plain

参考書の情報だと、「thymeleaf-spring4」となっていたのでなんで動かんのか~、とググったりしてたんですが、まずはバージョン確認すべきでした(涙)。 

というわけで、「thymeleaf-spring5」を利用していきます。(ご自分のSpring Boot CLIのバージョンに合わせてください。)

 

Thymeleafを使ってみる

それでは、app.groovyを編集します。

f:id:ts0818:20171105095145j:plain

そしたら、app.groovyと同じ階層に「templates」フォルダを作成します。

f:id:ts0818:20171105093021j:plain

 そしたら、「templates」フォルダ内に「index.html」を作成します。app.groovyでmav.setViewName("index")としてるので、index.htmlを作成するということになります。

f:id:ts0818:20171105093553j:plain

index.htmlを編集します。

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-type" 
      content="text/html; charset=utf-8" />
    <title>ホーム</title>
    <style>
      h1 {
        font-size: 18px;
        font-weight: bold;
        color: #333;
      }
      body {
        font-size: 13px;
        color: #333;
        margin: 5px 25px;
      }
    
    </style>
  </head>
  <body>
    <h1>Hello!!!</h1>
    <p>サンプル Thymeleaf</p>
  </body>
</html>

f:id:ts0818:20171105095117j:plain

保存したら、コマンドプロンプトを起動し、プロジェクトのディレクトリまで移動し、Spring Bootで起動。

f:id:ts0818:20171105094339j:plain

ブラウザで「http://localhost:8080」にアクセス。

f:id:ts0818:20171105095236j:plain

app.groovyの@Grabアノテーションで、「thymeleaf-spring5」モジュールを読み込み、ModelAndViewで、利用するビュー(index.htmlのこと)を指定してます。ModelAndViewは、名前の通りモデル(いろんなデータ)をセットすることもできます。

Spring Bootを停止するときは、コマンドプロンプト上で「Ctrl + C」を押すと、「バッチ ジョブを終了しますか(Y/N)?」と表示されるので、「y」と入力しEnterを押すと終了できます。

f:id:ts0818:20171105101016j:plain

 

Thymeleafの代わりにGroovyでもHTMLが記述できるけど...

GroovyでもHTMLを記述できるみたいです。その場合は、app.groovyの@Grabをコメントアウトし、

f:id:ts0818:20171105100149j:plain

拡張子が「.tpl」というファイルを新たに「templates」フォルダ内に用意します。(今回、index.htmlは使わない状態になります。) 

f:id:ts0818:20171105100448j:plain

「index.tpl」を編集します。

f:id:ts0818:20171105100852j:plain

Spring Bootを起動し、

f:id:ts0818:20171105101414j:plain

ブラウザで「http://localhost:8080」にアクセスして確認してみます。

f:id:ts0818:20171105101440j:plain

表示されました。ですが、普通にHTMLの記述ができるThymeleafを利用していくのが無難そうです。Groovyでも記述ができるんだなぁ~、ということを知っていればOKそうです。

再び、Thymeleaf

とりえあず、「index.html」と「index.tpl」では、「index.tpl」が優先的に読み込まれてしまうようなので、一旦、tplファイルを削除するか無効化しときましょう。

f:id:ts0818:20171105103011j:plain

f:id:ts0818:20171105103157j:plain

 

ModelAndViewでモデルを使っていなかったので、モデルを利用していきましょう。

app.groovyを編集。

f:id:ts0818:20171105102244j:plain

index.htmlを編集。

f:id:ts0818:20171105103329j:plain

Spring Bootを起動し、

f:id:ts0818:20171105103427j:plain

ブラウザで「http://localhost:8080」にアクセス。見事に文字化け!

f:id:ts0818:20171105103517j:plain

一旦、Spring boot を停止し、「native2ascii」で変換すればOKのようです。

f:id:ts0818:20171105104054j:plain

app2.groovyというファイルが作成されています。

f:id:ts0818:20171105104158j:plain

app2.groovyファイルを開いてみると、日本語の部分が変換されています。

f:id:ts0818:20171105104354j:plain

それでは、app2.groovyをSpring Bootで起動してみます。

f:id:ts0818:20171105104655j:plain

ブラウザで「http://localhost:8080」にアクセス。

f:id:ts0818:20171105104759j:plain

今度は日本語が表示されましたね。

ざっくりですが、Groovyを試みてみました。バージョンのチェック方法を参考書に載せて欲しいなぁ~、と。しばらくは、Spring Boot系を学習していこうかと。

 

⇩  下記書籍で学んでいますので、詳しくは書籍で。

Spring Boot プログラミング入門|書籍情報|秀和システム

f:id:ts0818:20171105105528j:plain