Webフロントエンド - フレームワーク・ライブラリ

Lit りっと

Web Componentsカスタム要素Shadow DOMテンプレートリテラルGoogleLitElement
Litについて教えて

簡単に言うとこんな感じ!

Litは「ブラウザが直接理解できる部品」を作るための超軽量ライブラリだよ!ReactやVueみたいに独自のしくみに頼らず、ブラウザ標準の機能をフル活用して、どこでも使い回せるUIパーツを作れるってこと!


Litとは

Litは、Googleが開発・メンテナンスするオープンソースの軽量JavaScriptライブラリです。Web Components(ウェブコンポーネント)と呼ばれるブラウザ標準の仕組みを使って、再利用可能なUIパーツ(コンポーネント)を簡単に作るためのツールです。ファイルサイズはわずか約5KB(gzip圧縮後)と非常に軽く、ページの読み込み速度に与える影響を最小限に抑えられます。

ReactやVueといったフレームワークが「独自のランタイム(動作環境)」を必要とするのに対し、LitはブラウザにもともとあるAPIを薄くラップする(覆う)だけです。そのため特定のフレームワークに縛られず、ReactプロジェクトにもVueプロジェクントにも、あるいはフレームワークなしのHTMLページにも同じコンポーネントをそのまま組み込めます。

企業がデザインシステム(全社共通のUIパーツ集)を作るときや、複数の異なる技術スタックを持つプロジェクトに同じUIを展開したいときに特に威力を発揮します。


Litの3つのコア技術

Litは以下のブラウザ標準技術を組み合わせて動作します。

技術役割一言説明
カスタム要素(Custom Elements部品の定義<my-button> のような独自HTMLタグを作れる
Shadow DOMスタイルの隔離部品の内部CSSが外に漏れない・外から侵入しない
HTMLテンプレートリテラル描画の記述JavaScript文字列でHTMLを簡潔に書ける

これら3つはすべてW3C標準であり、モダンブラウザなら追加ライブラリなしで動作します。Litはこの上に「リアクティブプロパティ(値が変わると自動で画面を更新する仕組み)」と「効率的な差分更新」を加えた薄いレイヤーです。

コードのイメージ(テンプレートリテラルの書き方)

import { LitElement, html, css } from 'lit';

class MyGreeting extends LitElement {
  static properties = { name: { type: String } };
  static styles = css`p { color: #1e3a8a; font-weight: bold; }`;

  render() {
    return html`<p>こんにちは、${this.name}さん!</p>`;
  }
}
customElements.define('my-greeting', MyGreeting);
<!-- 使う側はこれだけ。どのフレームワークでもOK -->
<my-greeting name="田中"></my-greeting>

覚え方:「Lit = Light(軽い)+ リアクティブ」

「ライター(lighter)で火をつける=素早く軽く動く」とイメージすると覚えやすいです。実際、前身ライブラリの名前は LitElementlit-html と変遷し、2021年に「Lit」として統合されました。


歴史と背景

  • 2013年 — Googleが社内でPolymerプロジェクトを開始。Web Componentsの普及を牽引
  • 2017年 — Polymerの軽量後継として lit-html ライブラリを公開。テンプレートリテラルによる高速レンダリングが注目を集める
  • 2018年 — コンポーネントクラスの基底として LitElement を追加公開
  • 2019年 — Polymerは非推奨(deprecated)となり、LitElement/lit-htmlへの移行が推奨される
  • 2021年lit-htmlLitElement を統合した Lit 2.0 を正式リリース。パッケージ名も lit に統一
  • 2023年 — Lit 3.0リリース。IE11サポートを完全廃止しモダンブラウザに最適化、TypeScriptデコレーターの標準化対応
  • 現在 — Google内部の製品(YouTube Studio等)やAdobe、SAP、ING銀行などが採用するエンタープライズ向けデザインシステムの基盤として広く利用

ReactやVueとの比較

Litは「フレームワーク」ではなく「Web Componentsライブラリ」という位置づけです。何を選ぶべきかは用途次第です。

比較項目LitReactVue
ファイルサイズ約5KB約45KB約34KB
動作環境ブラウザ標準のみ独自ランタイム必要独自ランタイム必要
他FWとの共存◎ どこでも使える△ React同士のみ△ Vue同士のみ
学習コスト低〜中(HTML/JS知識で可)中〜高
エコシステム小〜中非常に大きい大きい
主な用途デザインシステム・部品配布SPAアプリ全体SPAアプリ全体

以下の図は「Litのコンポーネントがどのレイヤーで動くか」を示しています。

アプリケーション層(React / Vue / Angular / 生HTML … なんでもOK) Litコンポーネントはどこにでも <my-button> として埋め込める Lit(約5KB) リアクティブプロパティ / 差分更新 / テンプレートリテラルレンダラー Web Components(ブラウザ標準API) Custom Elements / Shadow DOM / HTMLTemplateElement ブラウザエンジン(Chrome / Firefox / Safari / Edge) W3C標準をネイティブ実装。追加ランタイム不要

関連する規格・RFC

規格内容
W3C Custom Elements独自HTMLタグを定義するブラウザ標準仕様(WHATWG HTML Living Standard)
W3C Shadow DOMDOMスコープ隔離を実現するブラウザ標準仕様
TC39 Tagged Template LiteralsLitのテンプレート記法の基盤となるECMAScript仕様

関連用語

  • Web Components — カスタム要素・Shadow DOM・HTMLテンプレートからなるブラウザ標準のUI部品仕様
  • Shadow DOM — コンポーネント内部のDOMとスタイルを外部から隔離するブラウザ機能
  • React — Metaが開発するUIライブラリ。仮想DOMによるコンポーネント志向の開発が特徴
  • Vue.js — プログレッシブなJavaScriptフレームワーク。学習コストの低さで人気
  • TypeScript — JavaScriptに型定義を加えた言語。Litとの相性が良くデコレーター機能を活用
  • デザインシステム — 全社共通UIコンポーネントとガイドラインをまとめたUI資産。Litが採用されやすいユースケース
  • npm — JavaScriptパッケージの配布・管理ツール。Litは npm install lit で導入可能