Macchinettaがリリースされました

### 2018/3/20 修正
[GitHub](https://github.com/Macchinetta/server-guideline-thymeleaf/issues/1)でThymeleaf版のチュートリアルについて問い合わせたところ、一部の節はJSP版でリリースしている。との回答をいただきました。
また、チュートリアル以外にもJSP版でリリースしている箇所を[Wiki]
(https://github.com/Macchinetta/server-guideline-thymeleaf/wiki/1.5.x.RELEASE)にまとめてくださいました。次版以降で対応されるそうなので、ThymeleafでTodoアプリケ−ションを作りたい人は気長に待ちましょう:smiley:！

というわけで、タイトルを修正いたしました。

前：Macchinettaを使ってTodoアプリケーションを作ってみた
後：Macchinettaがリリースされました

あわせて、本投稿のサンプルアプリケーションの節をほぼ打ち消しました。

### Macchinettaとは？
`Macchinetta Framework`(マキネッタ。以下`Macchinetta`とします。)は、3/13にNTTが発表したWebシステムを開発するためのアプリケーションフレームワークで、OSSとして[GitHub](https://macchinetta.github.io/)上に公開されています。詳しくは下記のリリース記事を参照してください。


リリース記事：
[効率的なソフトウェア開発を実現するNTTのJava開発フレームワークを公開しIT業界に貢献](http://www.ntt.co.jp/news2018/1803/180313a.html)

ガイドラインの[フレームワークスタック](https://macchinetta.github.io/server-guideline/1.5.1.RELEASE/ja/Overview/FrameworkStack.html)を見るとどうやら`Spring`を中心としたOSSの組み合わせのようです。

### TERASOLUNAとの関係
`Spring`を中心としたOSSの組み合わせと言えばNTTデータが提供している[`TERASOLUNA Server Framework for Java (5.x)`](http://terasolunaorg.github.io/)（テラソルナ。以下`TERASOLUNA`とします。）を思い浮かべますが、`Macchinetta`の依存関係を見ると`TERASOLUNA`が提供しているライブラリを参照しているので、`Macchinetta`が`TERASOLUNA`を包含しているようです（スタックを見た感じ、`Macchinetta`独自の共通ライブラリのようなものは、少なくとも`Server Framework`にはなさそう）。
ちなみに`Macchinetta`が利用している`TERASOLUNA`のバージョンは5.4.1.RELEASEで、一般に公開されている5.3.1.RELEASEよりも新しくなって……と思ったら、[5.4.1.RELASE](http://terasolunaorg.github.io/guideline/5.4.1.RELEASE/ja/)が3/16にリリースされていました:scream_cat:。ちなみに3/19現在、ガイドラインは日本語のみのようです。

#### OSSのスタック

`Macchinetta`と`TERASOLUNA`のスタックを比較すると、`Macchinetta`では日付操作を提供する`Jadira Usertype`と`JPA`がサポート外になっています。私がこれまでに携わった案件では、いずれも`MyBatis3`を使っていましたが`JPA`は不人気なんですかね？
また`TERASOLUNA`ではViewに`JSP`&`Apache Tiles`を利用していますが、`Macchinetta`では`JSP`&`Apache Tiles`と別に`Thymeleaf`をサポートしています（ガイドラインも`JSP`&`Apache Tiles`版と`Thymeleaf`版があります）。

ちなみに、`Macchinetta`も`TERASOLUNA`も参照している`Spring IO platform`のバージョンは`Brussels-SR5`ですが、`Brussels-SR5`が含む`Spring Framework`と`Spring Security`に脆弱性[CVE-2018-1199](https://jvndb.jvn.jp/ja/contents/2018/JVNDB-2018-000008.html)が報告されているため、`Spring Framework`と`Spring Security`だけ`Brussels-SR5`で指定しているバージョンよりも新しくなっています。

#### 機能
`TERASOLUNA`では`Server Framework`と`batch`機能を提供していましたが、`Macchinetta`ではそれに加えて`Spring Cloud`などを利用したクラウド拡張と、`jQuery`などを利用したクライアント側の開発をするためのOSSライブラリ群を提供しています（リリース記事ではクライアントについて特に言及していませんが、どういう位置づけなんでしょうか:thinking:）。

### サンプルアプリケーション
せっかくなので`Thymeleaf`版のチュートリアルをやってみました。
`TERASOLUNA`と同様に`Maven`のアーキタイプで作成します。

```sh:ブランクプロジェクトを作成するコマンド
mvn archetype:generate -B^
 -DarchetypeGroupId=com.github.macchinetta.blank^
 -DarchetypeArtifactId=macchinetta-web-blank-noorm-thymeleaf-archetype^
 -DarchetypeVersion=1.5.1.RELEASE^
 -DgroupId=todo^
 -DartifactId=todo^
 -Dversion=1.0.0-SNAPSHOT

```
注意点としては、`archetypeArtifactId`に明記しているように、ブランクプロジェクトにも`JSP`&`Apache Tiles`版と`Thymeleaf`版があります。


~~で、読み進めていったところ……アプリケーションのTODOの入力フォーム作成のところで詰まってしまいました:disappointed_relieved:。
本来ならば`todo/src/main/webapp/WEB-INF/views/todo`下に`list.jsp`を作成し[http://localhost:8080/todo/todo/list](todo/list)にアクセスすると入力フォームが表示されるはずなのですが、なぜかエラーになってしまいます。
例外ログを見ると……~~

```txt
Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/views/todo/list.html]
	at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141)
	at org.thymeleaf.spring4.templateresource.SpringResourceTemplateResource.reader(SpringResourceTemplateResource.java:103)
	at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:223)
	... 112 more
```
~~`todo/list.html`がない……？:thinking:
実はThymeleafを触るのは初めてで、事前知識なしでチュートリアルに挑んだわけですが、[4.1. テンプレートエンジン(Thymeleaf)](https://macchinetta.github.io/server-guideline-thymeleaf/1.5.1.RELEASE/ja/ArchitectureInDetail/WebApplicationDetail/Thymeleaf.html)を読むと、テンプレートHTMLを実装するように書かれていますねぇ。
ためしに`JSP`&`Apache Tiles`版とのチュートリアルの差分を取ったですが……~~

```
213c213
<     Bash上で\ ``mvn archetype:generate``\ を実行する場合は、以下のように"\ ``^``\" を"\ ``\``\" に置き換えて実行すればよい。
---
>     Bash上で\ ``mvn archetype:generate``\ を実行する場合は、以下のように"\ ``^``\" を\ ``\``\ に置き換えて実行すればよい。
219c219
<          -DarchetypeArtifactId=macchinetta-web-blank-noorm-archetype\
---
>          -DarchetypeArtifactId=macchinetta-web-blank-noorm-thymeleaf-archetype\
239c239
<      -DarchetypeArtifactId=macchinetta-web-blank-noorm-archetype^
---
>      -DarchetypeArtifactId=macchinetta-web-blank-noorm-thymeleaf-archetype^
257c257
<      -DarchetypeArtifactId=macchinetta-web-blank-archetype^
---
>      -DarchetypeArtifactId=macchinetta-web-blank-thymeleaf-archetype^

```
~~コマンド以外の差分がない……あっ、察し。
じゃけん、イシューあげましょうね。
[The document of todo tutorial with Thymeleaf seems same as the one with JSP. ](https://github.com/Macchinetta/server-guideline-thymeleaf/issues/1)
何度もURLを見直したのでJSP版とThymeleaf版を混同していることはないはず……。~~

~~`TERASOLUNA`と違って[チュートリアルのコード](https://github.com/terasolunaorg/tutorial-apps)が公開されていないので、これ以上は進められ無さそうです。~~

### 勝手な予想
実際に`Macchinetta`や`TERASOLUNA`を利用するかはさておき、`Spring`に関する日本語のドキュメントとしては、これらのガイドラインは非常に有用だと思います。しかし、サポートのスピードが遅く、最新のSpringは5.xがリリースされていますが、`Macchinetta`や`TERASOLUNA`がサポートしているのはまだ4.3系なんですよねぇ。`TERASOLUNA`はこれまで半年に1回くらいのペースでバージョンアップが来ているので、今年の夏くらいにSpring 5.xをサポートした`Macchinetta`と`TERASOLUNA`がリリースされるのではないでしょうか?

### 投稿に至った経緯
Qiitaに誰も`Macchinetta`の記事を書いていなかったので、1ゲットいただくために、簡素ですが記事にいたしました。しかし、`Macchinetta`のイシューでも1ゲットするとは:cold_sweat:。

```txt
今だ！1ゲットォォｫｫ！！ 
￣￣￣￣￣∨￣￣￣　　　　　　　(´´ 
　　　　 ∧∧　　　）　　　　　　(´⌒(´ 
　　⊂（ﾟДﾟ⊂⌒｀つ≡≡≡(´⌒;;;≡≡≡ 
　　　　　　 ￣￣　 (´⌒(´⌒;; 
　　　　　　ｽﾞｻﾞｰｰｰｰｰｯ 
```