0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者学習メモ】フラグメントを活用したフロントエンド開発

0
Posted at

【初心者学習メモ】フラグメントを活用したフロントエンド開発

こんにちは。エンジニア研修中の IT 初心者です。今回は研修や個人開発で学んだ 「フラグメントを活用したフロント作成」 について、自分なりにまとめてみます。Qiita 記事としては備忘録的な意味合いが強いですが、同じように学んでいる方の参考になれば嬉しいです。

フラグメントとは?

Webアプリケーションで「フラグメント」と言うと、画面の一部をテンプレート化した断片的な部品を指します。

例えば Spring Boot + Thymeleaf では、fragments/ ディレクトリに HTML のパーツを切り出しておき、他の画面で th:replace などを使って再利用できます。React/Vue などのコンポーネントと似ていますが、テンプレートエンジンを用いた静的部品化と考えるとイメージしやすいです。

フラグメントを使うメリット

  1. コードの重複を削減できる
    ヘッダーやフッター、サイドバーなどを一度作って全ページで呼び出せる。

  2. 保守性が高まる
    デザイン変更があっても、フラグメントの1ファイルを修正すれば全画面に反映される。

  3. 役割を分離できる
    画面全体のレイアウトと、個別機能のUI部品を切り分けられる。

  4. チーム開発がやりやすい
    「フラグメントごとに担当者を分ける」といった作業分担が可能。

実際の例:投稿カードのフラグメント化

SNSアプリを例にすると、投稿カード(ユーザー名、本文、コメント数、いいね数を表示する部分)は多くの画面に登場します。

フラグメント化する前

各 HTML にほぼ同じコードをコピペしていました。修正時には全ページを直さなければならず、手間とミスが発生します。

フラグメント化した後

fragments/post.html を作り、そこに投稿カードのマークアップをまとめて記述。

<!-- fragments/post.html -->
<div class="post-card">
  <div class="author">[[${post.author.name}]]</div>
  <div class="body">[[${post.body}]]</div>
  <div class="footer">
    <span class="comments">コメント ([[${post.commentCount}]])</span>
  </div>
</div>

呼び出し側は次のようにシンプルになります:

<div th:replace="fragments/post :: post-card"></div> 

コメント一覧画面のフラグメント分割

もう少し複雑な例としてコメントツリー画面を考えます。

  • 投稿ヘッダー部分
  • コメントリスト部分
  • コメント入力フォーム

これらをフラグメントに分割すると、それぞれの責務が明確になります。

<!-- fragments/comment-list.html -->
<div class="comment" th:each="comment : ${comments}">
  <span class="author">[[${comment.author.name}]]</span>
  <p class="body">[[${comment.body}]]</p>
</div>

メイン画面では呼び出すだけ:

<div th:replace="fragments/comment-list :: comment-list"></div>

CSS/JSとの組み合わせ

フラグメントを使うと HTML が部品化されるので、CSS や JS も役割ごとに分けて管理すると分かりやすくなります。

  • post.css → 投稿カード用スタイル
  • comments.css → コメントツリー用スタイル
  • comments.js → コメント開閉などのインタラクション

こうすることで「この画面で何が使われているか」を追いやすくなり、不要な読み込みも減らせます。

実装して感じた課題

  • 粒度の決め方が難しい
    細かくしすぎるとファイルが増えすぎて逆に把握しにくい。逆に大きすぎると再利用性が下がる。
  • データの受け渡し設計が重要
    フラグメントは UI 部品なので、必要な DTO をどう渡すか考える必要がある。
  • バックエンドとの依存
    Thymeleaf の場合は Java DTO に依存するため、変更があればフラグメントも修正が必要。

学んだこと

  • フラグメントは「フロントの部品化」を実現する便利な仕組み。
  • 特に SNS アプリのように UI パターンが繰り返される場合に効果大。
  • 一方で、粒度やデータ受け渡しを考えないと逆に複雑になる。

まとめ

初心者なりにフラグメントを活用してみて、「共通部分をまとめるだけで開発効率が全然変わる」ことを実感しました。
React/Vue のコンポーネントに比べるとシンプルですが、Spring Boot + Thymeleaf 環境では十分に威力を発揮します。

今後は「フラグメント × テンプレートレイアウト」を組み合わせて、もっと大規模な画面構成も練習してみたいと思います。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?