毎度、いろんなことにハマっている今日この頃です。今回は、Sring Boot CLIというコマンドをインストールすれば、EclipseなどのIDE(統合開発環境)を使わなくても、Spring Bootを起動できちゃうんですが、大いにハマったのでメモメモ。
Spring Boot CLIをダウンロード
※Spring Boot CLIのバージョンによって利用できるモジュールも変わります。
これ、参考書とかに書いておいて欲しいんですが、どのバージョンのSpring Boot CLIを使うかで、利用できるモジュールが変わってくるんですが、確認できる公式リファレンスっぽいのがあるんですね。何故に、そういうものを掲載してくれないのか謎ですが....。
では、スタート。
Index of /spring-boot/docs にアクセス。下の方にスクロールし、
適当なバージョンを選択。今回は、思い切って2017年11月04日(土)現在の最新っぽい『2.0.0.M5』 を選択。
「reference/」を選択。
「htmlsingle/」を選択。
Spring Boot(2.0.0.M5バージョン)の説明のページに来ます。
『Ctrl + F』で検索バーに「Spring Boot CLI」と入力しEnter。「Installing the Spring Boot CLI」をクリックします。
「10.2.1 Manual installation」の「spring-boot-cli-2.0.0 M5-bin.zip 」をクリック。
ダウンロードできました。
Spring Boot CLIの配置とパスの設定
ダウンロードしたzipの中身を適当な位置に配置します。
今回は、Cドライブ直下に配置します。参考書(『Spring Boot プログラミング入門(著:掌田津耶乃)』)でもCドライブ直下なので。
Cドライブ直下にドラッグ&ドロップ。
配置されました。
・Install Spring Boot Command Line Interface on Windows | HowToProgram
⇧ 上記サイト様を参考に、環境変数の設定。
Windowsアイコンを右クリックし、
「システム(Y)」を選択。
「システム情報」をクリック。
「システムの詳細設定」をクリック。
「環境変数(N)...」をクリック。
「システム環境変数(S)」の「新規(W)...」を選択。
「変数名(N):」を「SPRING_HOME」、「変数値(V):」を「[配置したディレクトリ](自分の場合ですと、『C:¥spring-2.0.0.M5』)」として「OK」。
「システム環境変数(S)」の「Path」を選択し、「編集(I)...」をクリック。
「新規(N)」をクリック。
「%SPRING_HOME%¥bin」と入力し、「OK」。
コマンドプロンプトを起動し、
spring version
でバージョンが表示されればOK。
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」としたファイルとして保存。
「はい」を選択。
ファイルを適当なエディタで開きます。
サクラエディタを使っていきます。
ファイルの中身をこんな感じにして、
文字コードを変えたいので、「ファイル(F)」>「名前をつけて保存(A)...」を選択。
「保存(S)」。
「はい」。
そしたら、コマンドプロンプトを起動。プロジェクトフォルダに移動します。
cd C:\Users\Toshinobu\Desktop\firstGroovy
Spring Bootで起動。
spring run app.groovy
ブラウザで「http://localhost:8080」にアクセス。
表示されました。
ブラウザで「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のバージョンのリファレンスに遷移します。)
一番下の方にスクロールすると、利用できるモジュールが掲載されています。
参考書の情報だと、「thymeleaf-spring4」となっていたのでなんで動かんのか~、とググったりしてたんですが、まずはバージョン確認すべきでした(涙)。
というわけで、「thymeleaf-spring5」を利用していきます。(ご自分のSpring Boot CLIのバージョンに合わせてください。)
Thymeleafを使ってみる
それでは、app.groovyを編集します。
そしたら、app.groovyと同じ階層に「templates」フォルダを作成します。
そしたら、「templates」フォルダ内に「index.html」を作成します。app.groovyでmav.setViewName("index")としてるので、index.htmlを作成するということになります。
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>
保存したら、コマンドプロンプトを起動し、プロジェクトのディレクトリまで移動し、Spring Bootで起動。
ブラウザで「http://localhost:8080」にアクセス。
app.groovyの@Grabアノテーションで、「thymeleaf-spring5」モジュールを読み込み、ModelAndViewで、利用するビュー(index.htmlのこと)を指定してます。ModelAndViewは、名前の通りモデル(いろんなデータ)をセットすることもできます。
Spring Bootを停止するときは、コマンドプロンプト上で「Ctrl + C」を押すと、「バッチ ジョブを終了しますか(Y/N)?」と表示されるので、「y」と入力しEnterを押すと終了できます。
Thymeleafの代わりにGroovyでもHTMLが記述できるけど...
GroovyでもHTMLを記述できるみたいです。その場合は、app.groovyの@Grabをコメントアウトし、
拡張子が「.tpl」というファイルを新たに「templates」フォルダ内に用意します。(今回、index.htmlは使わない状態になります。)
「index.tpl」を編集します。
Spring Bootを起動し、
ブラウザで「http://localhost:8080」にアクセスして確認してみます。
表示されました。ですが、普通にHTMLの記述ができるThymeleafを利用していくのが無難そうです。Groovyでも記述ができるんだなぁ~、ということを知っていればOKそうです。
再び、Thymeleaf
とりえあず、「index.html」と「index.tpl」では、「index.tpl」が優先的に読み込まれてしまうようなので、一旦、tplファイルを削除するか無効化しときましょう。
ModelAndViewでモデルを使っていなかったので、モデルを利用していきましょう。
app.groovyを編集。
index.htmlを編集。
Spring Bootを起動し、
ブラウザで「http://localhost:8080」にアクセス。見事に文字化け!
一旦、Spring boot を停止し、「native2ascii」で変換すればOKのようです。
app2.groovyというファイルが作成されています。
app2.groovyファイルを開いてみると、日本語の部分が変換されています。
それでは、app2.groovyをSpring Bootで起動してみます。
ブラウザで「http://localhost:8080」にアクセス。
今度は日本語が表示されましたね。
ざっくりですが、Groovyを試みてみました。バージョンのチェック方法を参考書に載せて欲しいなぁ~、と。しばらくは、Spring Boot系を学習していこうかと。
⇩ 下記書籍で学んでいますので、詳しくは書籍で。
Spring Boot プログラミング入門|書籍情報|秀和システム