velocity 考察

velocity は html のテンプレートエンジンで、 平たく言うとhtmlに関数とかループとか条件分岐とか、 便利なものをもろもろ持ち込めるすぐれものです。 Python でいうと Jinja2 に当たるかもしれません。

この velocity ですが、以前から 「なぜインデントしないんだろう」 という点が気になっていました。 どこかに書いてあるかもしれないのですが、 今日ようやくわかった(気がする)ので走り書きます。

以下のようなコードがあるとき、 タグのペアの数が合わなくなってしまいます。 数が合わなくなるだけならまだしも、 深いifやforeachでネストしてしまうと<div>のネストとレベルも合わなくなってしまいます。

#foreach(hoge)
 #if(piyo)
  <div>
   #if(fuga)
    <div>
     <div>
   #else
    <div>
     <div>
   #end
     </div>
    </div>
   </div>
   ## !?!?!?!
 #end
#end

これを解消するためには、 以下のようにする必要があるのですが、 それだと簡単に書ける、というメリットが失われる気もします

#foreach(hoge)
 #if(piyo)
  <div>
   #if(fuga)
    <div>
     <div>
     </div>
    </div>
   #else
    <div>
     <div>
     </div>
    </div>
   #end
  </div>
 #end
#end

…ただ、よく考えたらそんなに面倒じゃないので、 他の理由があるかもしれません。