
2026/03/07 17:59
**Show HN:µJS ― 依存関係ゼロでHtmxやTurboに代わる5KBの軽量フレームワーク**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
µJS は、従来のマルチページサイトをフレームワークやビルドステップを追加せずにシングルページアプリケーション(SPA)と同様に感じさせる小型 JavaScript ライブラリです。内部リンククリックとフォーム送信をインターセプトして新しいページをバックグラウンドでフェッチし、DOM の変更部分だけを差し替えることで、ナビゲーションを高速かつスムーズに保ちます。このスクリプトは HTML を提供し、すべての標準 HTTP 動詞をサポートする任意のバックエンドと互換性があり、ホバー時にコンテンツをプリフェッチしたり、進捗バーを表示したり、View Transitions などのモダン API を使用したりできます。µJS の追加は簡単で、1 つの
<script> タグを含めて mu.init(); を呼び出すだけです。軽量(約5 KB gzipped)で依存関係がなく、PHP、Python、Ruby、Go、Node.js、または HTML を出力する任意の言語で構築されたサイトに適しています。
今後の計画としては、「パッチモード」を導入し複数ページフラグメントを同時に更新したり、カスタムナビゲーショントリガー用にデバウンスを設定可能にしたり、Server‑Sent Events(SSE)とパッチ更新を組み合わせてリアルタイムフラグメントストリーミングを実現することが挙げられます。これらの機能はページロード時間をさらに短縮し、UX を向上させ、開発者の既存スタックを維持しながら SPA のようなパフォーマンスを提供します。
本文
伝統的なウェブサイト
従来のウェブサイトは、リンクをクリックするたびにページ全体が再読み込みされます。
µJS はそれを変えます:内部リンクやフォーム送信を傍受し、バックグラウンドで新しいページを取得して、変更された部分だけを差し替えるのです。ブラウザは完全にはリロードせず、ナビゲーションが瞬時に行われるため、まるでシングルページアプリケーション(SPA)のように感じられます。
学習すべきフレームワークもなく、ビルドステップも不要です。既存のサイトに単一の
<script> タグを追加し mu.init() を呼び出すだけで、内部リンクはすべて AJAX ナビゲーションになります。PHP・Python・Ruby・Go など、HTML を返すどんなバックエンドでも動作します。
主な特徴
- 高速 – ホバー時にプリフェッチ、完全リロードなし、組み込みプログレスバー付き。ナビゲーションは瞬時に感じられます。
- 軽量 – 1 ファイル(gz 圧縮で約5 KB)、依存関係ゼロ。ビルドステップ不要です。
- 即導入 – PHP、Python、Ruby、Go、Node.js など、どんなバックエンドでも動作します。サーバー側の変更は必要ありません。
- パッチモード – 単一リクエストで複数ページフラグメントを更新できます。ダッシュボードや複雑なレイアウトに最適です。
- トリガー – 任意の要素・任意のイベントに対応。ライブ検索、ポーリング、フォーカスアクションなどに組み込みデバウンス機能付き。
- HTTP 動詞 – GET、POST、PUT、PATCH、DELETE をリンク、ボタン、フォームで使用可能です。
- SSE – Server‑Sent Events によるリアルタイム更新。パッチモードと組み合わせてマルチフラグメントストリーミングが実現できます。
- 最新技術 – View Transitions API、idiomorph を用いた DOM モーフィング、Fetch API ベース。
クイックスタート
<!-- 1. スクリプトを読み込む --> <script src="https://unpkg.com/@digicreon/mujs@1.4.0/dist/mu.min.js"></script> <!-- 2. 初期化 --> <script>mu.init();</script>
これだけで、内部リンクはすべてインターセプトされ AJAX 経由で読み込まれます。
動作概要
-
スクリプトを追加
ページに
タグを1つだけ挿入します。ビルドツールやバンドラは不要です。<script> -
リンクがインターセプトされる
µJS は内部リンクとフォーム送信のクリックイベントを監視し、外部リンクには手を加えません。 -
コンテンツだけが差し替わる
AJAX でページを取得し、対象部分だけを置き換えます。完全リロードは行われません。