5月7日、Nue JSが「Hyper: Outperform React on every metric」と題した記事を公開した。この記事では、Hyperという新しいマークアップ言語が、Reactを凌駕する可能性があるという点について詳しく紹介されている。

以下に、その内容を紹介する。
Hyperの登場
Hyperは、ユーザーインターフェース(UI)を構築するためのシンプルなマークアップ言語であり、開発者(およびAIモデル)が驚くほどクリーンな構文で複雑なUIを生成できることを目的としている。このライブラリの主な目標は、フロントエンド開発をより楽しいものにすることである。
ReactとHyperの比較
ReactとHyperの違いを段階的に見ていく。
Phase 1: シンプルなコンポーネント
Reactでのコンポーネントは、Reactパターンやカスタムコンポーネントを使用して書かれるが、Hyperでは、標準的なHTMLで完結する。以下は、ReactとHyperでの基本的なテーブルコンポーネントの定義方法の比較である。
- モダンReact: ShadCN
コンポーネントとTypeScript。
- 古典的React: JSXと分離されたCSS。
- Hyper: クリーンで標準準拠のHTML。テーブルはただの
<table>
である。
以下は、Hyperを使ったコードがどれほどコンパクトになるかを視覚的に示した画像だ。
現在一般的なReactのコードで書かれたテーブルコンポーネントのコード例は以下のようになる。
import React from "react";
import { User, UserTableProps } from "./UserTable.types.ts";
import {
Table,
TableBody,
TableCaption,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table";
export const UserTable: React.FC<UserTableProps> = ({ users }) => {
return (
<Table>
<TableHeader>
<TableRow>
<TableHead>Name</TableHead>
<TableHead>Email</TableHead>
<TableHead>Age</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{users.map((user, index) => (
<TableRow key={index}>
<TableCell>{user.name}</TableCell>
<TableCell>{user.email}</TableCell>
<TableCell>{user.age}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
);
};
export default UserTable;
一方、Hyperを用いたコードは以下のようにとてもシンプルだ。
<table>
<tr>
<th>Name</th>
<th>Email</th>
<th>Age</th>
</tr>
<tr :for="user of users">
<td>${ user.name }</td>
<td>${ user.email }</td>
<td>${ user.age }</td>
</tr>
</table>
実際のコード比較はこちらのページを参照のこと。
Phase 2: 複雑なコンポーネント
Reactでは、Tanstack TableやRadix UIを組み合わせて複雑なコンポーネントを作成するが、これは非常に多くのボイラープレートコードを必要とし、約170行に達することがある。一方、Hyperでは同様のコンポーネントが40行のコードで実現できる。
- Reactの問題: 依存関係が多層で、JavaScriptのトランスパイルやコンパイルを必要とする。
- Hyperの利点: 単一のコンパイルステップで、ブラウザ上で動作し、非常に軽量。
ユースケースが複雑になるほど、Hyperのシンプルさが際立つ。
実際のコードはこちらから参照できる。
Phase 3: 再利用可能なコンポーネント
Hyperでは、コンポーネントの再利用が非常に簡単であり、デザインシステムの切り替えも容易である。Reactでは、コンポーネントごとにデザインがハードコードされているため、他のプロジェクトで再利用することが困難である。しかし、HyperではCSSでタイポグラフィを一元管理することで、コンポーネントの再利用性が高まる。
Phase 4: スケーラビリティ
Hyperは、そのシンプルさがスケーラビリティに寄与する。実際、フルスケールのアプリケーションでも、Reactのボタン一つ分と同等のコード量で済み、ボイラープレートがほぼゼロである。これにより、パフォーマンスの向上と開発の効率化が実現される。
Hyperの特長
- シンプルな構文: Reactに比べて、必要なコードの量と認知負荷が大幅に削減される。
- デザインとロジックの分離: HyperはCSSでスタイルを管理し、コンポーネントコードは純粋なロジックと表示に専念できる。
- 軽量: Hyperのコードは非常に軽量で、ブラウザで直接動作し、コンパイルを最小限に抑える。
- 再利用可能なコンポーネント: Hyperではコンポーネントの再利用が容易で、プロジェクト間でのスタイルや設計変更もシンプルに行える。
Hyperの導入
Hyperを使用するには、まずBunをインストールし、その後Hyperライブラリをインストールする必要がある。以下はその手順である。
# Bunをインストール
curl -fsSL https://bun.sh/install | bash
# Hyperをインストール
bun install nue-hyper
Hyperは、Bunを使用してブラウザ標準のサポート、組み込みのJavaScriptバンドラー、最適化されたパフォーマンスを提供する。
まとめ
Hyperは、Reactに比べて圧倒的にシンプルで効率的な方法でユーザーインターフェースを構築できるライブラリであり、そのシンプルさはスケーラビリティにも寄与する。これにより、フロントエンド開発はより効率的で楽しいものになる。
詳細はHyper: Outperform React on every metricを参照していただきたい。