Leafテンプレートの書き方をVapor4に対応させてみよう

Leaf
Leafテンプレートの書き方をVapor4に対応させてみよう

はじめに

Leafテンプレートの構文までも変わっていましたか……

Vapor3からVapor4へのバージョンアップに併せて変わったようですね。後々のために前バージョンとの違いをまとめておきます。

今回は小ネタチックな感じです。しかしながら、(これを書いた時点で)Vapor4の公式ドキュメントに見当たらなかった項目なので、引っかかってからしばらく抜け出せませんでした。

Vapor3からVapor4への変更点は?

ループの書き方が変わった

Vapor3までは中カッコで括っていました。SwiftやC#な書き方ですね。

Leaf for Vapor3
#for(book in books) {}
  (ループ処理)
}

これが、endforで閉じるようになりました。VisualBasicのような書き方ですね。

Leaf for Vapor4
#for(book in books):
  (ループ処理)
#endfor

書き方がSwiftから離れてしまったような感じがします。なぜ変えてしまったのか……

条件分岐の書き方が変わった

if文も変わってしまいました。forと同様に閉じるための宣言が必要になってしまいました。

Leaf for Vapor3
#if(条件) {

} else if (条件) {

} else {

}

Vapor4ではVisualBasic的な書き方です。個人的な好みですがVapor3の時のほうが良いな。

Leaf for Vapor4
#if(条件):

#elseif(条件):

#else:

#endif

コメントが効かない

Vapor3でのLeafテンプレートコメントの書き方をVapor4のLeafテンプレートで使うと、認識されませんでした。

なんとそのまま表示されてしまいます。これはびっくり。なんてこったい……

Vapor3までは公式ドキュメントにLeafテンプレートでのコメントの書き方が載っているのですが、Vapor4の公式ドキュメントには記載がありませんでした。そもそもLeafに関する記述が無い。

Vapor Docs
Vapors documentation (web framework for Swift).

コメントアウトができないと、デバッグの時など地味に困ります。

コメントアウトに関する話題が出ているようですので、そのうち実装されるでしょう。

Leaf4 Template Commenting & Multiline Parameters by tdotclare · Pull Request #61 · vapor/leaf-kit
This release adds template commenting and splitting tag parameters across lines. Commenting Format Comments can be located anywhere inside the parameters of a ...

どうすりゃいいのよ!というところですが、当面はバージョン管理で仮のブランチを切って書き換えて、うまく行ったら適宜マージするような運用になりそうです。少々大掛かりですが。

まとめ

Swiftと構文が似ていた前のほうがよかったというのが個人的感想です。#で始まるカスタムタグに統一したかったんでしょうね。

メインバージョンが上がるとさすがに変わり方が激しいです。
Vapor4フレームワークはこれからこなれていくでしょうし、気長に対応していきましょう。

コメントアウトについては経過観察ですね。