4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🎨 モダンWeb開発の新常識!Litで手軽にUI構築🔧

4
Last updated at Posted at 2025-02-15

Litで実現するシンプルかつ高パフォーマンスなWebコンポーネント開発 🎨

こんにちは、現役エンジニアの@YushiYamamotoです!
今回は、軽量で高速なWebコンポーネントライブラリ Lit について、プログラマーやエンジニア初心者の方にも分かりやすく、かつ専門的な内容を盛り込んだ記事をご紹介します。Litは、最新のWeb標準に準拠しながらも、シンプルなAPIで使いやすく、効率的なUI開発を実現できる優秀なライブラリです。この記事では、Litの基本、セットアップ方法、実際のコード例、そして概念を図解でわかりやすく解説していきます!

Lit.png


目次


Litとは? 🤔

Litは、Lit公式サイトで紹介されている、Webコンポーネント作成のための軽量ライブラリです。
Litは、Web標準のカスタム要素やシャドウDOM に基づいており、以下の点で特に注目されています:

  • 軽量かつ高速
    → 最小限のバンドルサイズで、効率的なレンダリングを実現します。

  • シンプルなAPI
    → HTMLテンプレートリテラルを使った直感的な宣言方法により、学習コストが低くなっています。

  • 再利用性が高い
    → 一度作成したコンポーネントは、どのフレームワークとの併用も可能な純正Webコンポーネントとして利用できます。


Litの特徴 🔍

Litの主な特徴は以下の通りです:

  • テンプレート指向
    直感的なHTMLテンプレートでUIを記述します。

  • リアクティブなレンダリング
    状態の変更に応じて自動的に再レンダリングされるため、最新のUI状態を維持できます。

  • スタイルのカプセル化
    シャドウDOMにより各コンポーネントのスタイルが外部に影響されず、独自のデザインを実現可能。

  • シンプルな学習曲線
    Reactに似た感覚で使えるため、既存の知識を活かしながら素早く開発に取り組めます。

簡単な図解 🌟

以下のフローチャートは、Litコンポーネントの基本的なライフサイクルを示しています:

  • A~D の流れで、コンポーネントが初期化され画面にレンダリングされます
  • E~F の流れで、状態の変化に伴い部分的な再レンダリングが行われ、効率的なアップデートが実現されます

プロジェクトのセットアップ 🛠️

Litのプロジェクトを始めるのはとても簡単です。以下の手順に沿って、ローカル環境での開発をスタートしましょう!

1. プロジェクトフォルダの作成

mkdir my-lit-app
cd my-lit-app

2. npmプロジェクトの初期化

npm init -y

3. Litのインストール

npm install lit

これで、Litを使った開発環境が整いました!


基本的なカスタム要素の作成 👩‍💻

ここでは、Litを使ってシンプルなカスタムWebコンポーネントを作成する例を示します。
以下のコードは、<my-greeting>要素を定義し、「Hello, Lit!」というメッセージを表示するものです。

// my-greeting.js
import { LitElement, html, css } from 'lit';

class MyGreeting extends LitElement {
  static styles = css`
    :host {
      display: block;
      padding: 16px;
      background-color: #f0f0f0;
      font-family: Arial, sans-serif;
      border: 1px solid #ccc;
      border-radius: 4px;
    }
    h2 {
      color: #333;
    }
  `;

  render() {
    return html`
      <h2>Hello, Lit!</h2>
      <p>This is a simple custom element built with Lit.</p>
    `;
  }
}

customElements.define('my-greeting', MyGreeting);

利用方法

上記のコンポーネントをHTMLファイルで利用する方法は以下の通りです:

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>Lit Example</title>
    <!-- モジュールとして読み込む -->
    <script type="module" src="./my-greeting.js"></script>
  </head>
  <body>
    <my-greeting></my-greeting>
  </body>
</html>

ブラウザでこのHTMLファイルを開くと、「Hello, Lit!」が表示されたカスタムコンポーネントが確認できます。✨


リアクティブなプロパティとイベント処理 🔄

Litでは、リアクティブなプロパティと簡単なイベント処理が可能です。
以下は、カウンター機能を持ったコンポーネントの例です。ユーザーのクリックでカウントが増加します。

// my-counter.js
import { LitElement, html, css } from 'lit';
import { property } from 'lit/decorators.js';

class MyCounter extends LitElement {
  static styles = css`
    :host {
      display: block;
      padding: 16px;
      text-align: center;
      font-family: Arial, sans-serif;
    }
    button {
      padding: 8px 16px;
      font-size: 1rem;
      margin-top: 8px;
      cursor: pointer;
    }
  `;

  @property({ type: Number }) count = 0;

  increment() {
    this.count++;
  }

  render() {
    return html`
      <h2>Count: ${this.count}</h2>
      <button @click=${this.increment}>Increase</button>
    `;
  }
}

customElements.define('my-counter', MyCounter);

説明

  • @propertyデコレーター
    このデコレーターを使い、countプロパティをリアクティブに管理。状態が変化すると自動で再レンダリングされます。

  • イベントハンドリング
    ボタンの @click イベントで、increment() メソッドを呼び出し、プロパティを更新しています。

この簡単なコンポーネントからも、Litが如何に状態管理とイベント処理をシンプルかつ効率的に行うかが分かります。


まとめ 🎉

Litは、モダンなWebコンポーネント開発において、

  • 軽量で高速なレンダリング
  • 標準技術を活かした再利用性の高いコンポーネント化
  • シンプルなAPIを用いた直感的な開発体験

を提供します。
初心者からプロフェッショナルまで、どなたでも容易に導入できるため、あなたのプロジェクトにぜひ取り入れてみてください!

参考リンク

Happy Coding! 🚀😊

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?