AEM Developerの皆様お疲れさまです。大和株式会社の狩野です。
Qiitaのアドベントカレンダーに便乗して始めた記事投稿イベント12日目です。
今日12日目の内容は、「HTL vs JSP」です。
11日目の記事→AEM開発時に役立つサイトたちの紹介
昔はAEMの開発をしていたが最近はAEMの開発に携わってないという方の中には「同じ動作をするのに、なんでHTLとJSPで2つの書き方があるんだ?」と思う方もいらっしゃるかもしれません。
もしくは、今でもJSPを使って開発していて「新しく覚えるのもなぁ」と思っている方もいらっしゃるかもしれません。
というわけで、今回は両者の比較を行いたいと思います。
結局どっちがいいの?
結論から言うと、これから新しく書くコードは全てHTLにすることを推奨します。
理由や詳細については以下で書きます。
HTL, JSPの特徴
習得の容易さ
HTL
HTMLの拡張言語のようなものなので、前提としてはHTMLの文法を習得しているだけで習得が可能です
JSP
HTMLとJavaを混ぜて書くことができる言語なので、前提としてHTMLとJavaの両方を習得していないと習得ができません
文法
HTL
マークアップに徹していることにより、コードが簡潔になります
JSP
JavaコードをHTMLと混ぜて書くことができるため、コードが複雑になりがち
セキュリティ
HTL
言語単位でセキュリティに配慮がされているため、書き手が特にセキュリティに気を使う必要が少ない
JSP
Javaコードを混ぜて書くことができるということによって、書き手がセキュリティに配慮する必要があります
両者の特徴の比較
習得の容易さ
HTLはHTMLだけを覚えれば書けるため、開発者が必ずしもHTLを書く必要が無く、デザイン担当者に任せることもできます(業務の都合によって必ず任せるわけではない)。
JSPはJavaの習得も必要なため、開発者がHTMLコードと混ぜたJSPコードを書く必要があります。
開発者が全部やるやらないはプロジェクトの都合で決めればいいが、その選択肢があるHTLの方が優位となります。
文法
HTLは性質上ロジックの類を同時に書くことができないため、そういうコードを全てバンドルに任せて書く必要があります。
そのため、ロジックとビューの分離を文法単位で強制することが出来ます。
JSPは性質上ロジックの類を同時に書くことができるため、やろうと思えばHTMLとJavaコードが混在したJSPファイル1つで全てが事足ります。
そのため、ロジックとビューの分離を行うためには開発者が気を遣う必要が発生します。
「習得の容易さ」では「選択肢がある」ということが優位だったので、JSPも「ロジックとビューを分離するかしないを選ぶことができる」という意味ではJSPのほうが優位かもしれませんが、このロジックとビューの分離はやるかやらないかで言えば多くの場合はやったほうがいい行為なので、文法単位で強制してくれるに越したことはありません。
なので、この点でもHTLの方が優位となります。
セキュリティ
Webのセキュリティは書き手が配慮する程度の行為で完全に防ぐのは難しく、その上最近のWebは顧客の重要な情報(カード情報など)を扱うことも多いため、セキュリティ事故は企業にとって命取りになります。
そのため、書き手がセキュリティに配慮しないとセキュリティ事故を防ぐことが出来ないJSPよりHTLの方が優位となります。
とはいえ、HTLを使って開発する上でも全くセキュリティのことを考えずに書くのは意識が低すぎるので、ある程度はセキュリティについての勉強をした上で書くほうがベターだとは私は思ってます。
最後に
以上となります。最終日の明日も私狩野が執筆します。内容は「大和公式サイトのヘッダ開発を通してコンポーネントのバックエンド部分の内部設計をやってみる」です。
お楽しみに。