1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring環境でCSRにHandlebarsを使っている話

Last updated at Posted at 2024-10-18

はじめに(読み飛ばしてOK)

時間の流れは早いもので、気づけば開発経験2年以上になっていました。なっしーです!
練習にSpringを使ったWebアプリを作っているので、その話をしようと思います。
今回はThymeleafと一緒にHandlebarsを使っている話をします。

想定読者層

  • Springを学び始めた人
  • Thymeleafだけでは表現の限界を感じている人

環境

  • Spring(Spring Boot)
  • Thymeleafを使用

Handlebarsとは?

Handlebarsは、JavaScriptで利用できるテンプレートエンジンです。
Thymeleafと同じように、サーバーから渡されたデータをHTMLに埋め込んでくれるものです。

ThymeleafはSSR(サーバーサイドレンダリング)を行えます。
一方、HandlebarsはCSR(クライアントサイドレンダリング)を得意としています。

レンダリングとは

HTMLやCSS、JavaScriptなどを合体させて、ユーザーが読める形にする過程を(ブラウザ)レンダリングと言います。

(※レンダリングという単語は広義では「データを処理することで画像や音楽、テキストを表示できるようにすること」を指していたりします。)

SSRとCSRの違い

SSRは文字通りサーバー側で、CSRはクライアント(Webブラウザ)側でHTMLをレンダリングします。
平たく言うと、組み立ての作業場所が違うってことですね。

違いを表にしてみましょう。

SSR CSR
レンダリング場所 サーバー クライアント
初回のページ表示 速い 遅い
ロード後のページ遷移速度 遅い 速い
SEO 強い 弱い

Thymeleafでは毎回サーバーでページのすべてをレンダリングする必要がある一方、Handlebarsでは1度ロードされた後はテンプレート部分をクライアント側でレンダリングできます。
この2つを使い分けることで、良い感じのページを作ろうってことです!

使い分け

Handlebarsは主に、データ量が多く、ページングやローディングの表示をさせたいものに使います。
それ以外は基本的にThymeleafを使っています。

Handlebarsには非同期通信で取ってきたデータを渡しています。

例えば、ECサイトであれば商品ページで商品の情報だけ非同期処理とHandlebarsを使って、クライアント側で表示できるようにする…といったようなことをしています。
そうすることで、ページングなどの処理が簡単に実装できます。
そして、商品情報以外の部分(≒あまり変化がないもの)はThymeleafでSSRしておけば効率が良いですよね!

Handlebarsの基本的な使い方

公式ドキュメント

使い方を知るにはHandlebarsの公式ドキュメント↑を見るのが一番早いです。
とてもシンプルなテンプレートエンジンなので、ドキュメントが英語で書かれていても容易に理解できるなぁと個人的に思っています。
シンプル大好き。

データバインド(データをHTMLに埋め込むもの)やifやeachなどの基本的な処理はもちろん、自分で好きな処理を作ることもできます。
ネストされたデータも取り扱えます。

自由度が高くて学習コストが低いところが気に入っています。

終わりに

Handlebarsは、Thymeleafだけだと物足りない、かといってイマドキなフロントエンドフレームワークを本気で導入するほどじゃない…みたいなときにピッタリなライブラリだったと思います。
皆さんも一度使ってみてください!

ここまで読んでいただき、ありがとうございます!なっしーでした!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?