



WithCodeMedia-1-pc
WithCodeMedia-2-pc
WithCodeMedia-3-pc
WithCodeMedia-4-pc




WithCodeMedia-1-sp
WithCodeMedia-2-sp
WithCodeMedia-3-sp
WithCodeMedia-4-sp








生徒ReactやVueを使わずに、HTMLだけで「値が変わったら画面が自動更新される」仕組みって作れますか?



それを実現するのが @wcstack/state じゃ!CDNを1行読み込むだけで、ビルドツールもnpm installも不要でリアクティブなHTMLが書けるんじゃ。data-wcs属性で状態とDOMを繋ぐだけで、カウンター・双方向バインディング・リスト表示・条件分岐まで実装できるぞ!
@wcstack/state の概要と内部の仕組み(ES Proxy・Direct DOM更新)wcs-stateタグ・data-wcs属性)@wcstack/stateは、HTMLファイル1つで「値が変わったらDOMが自動で更新される」リアクティブな仕組みを実現する軽量ライブラリです。ReactもVueもビルドツールも設定ファイルも不要で、CDN経由で即座に使い始めることができます。
data-wcs属性でDOM連結:状態とUIを疎結合に保つ設計【内部の仕組み】
ES Proxy で状態オブジェクトを監視
→ data-wcs が設定された DOM 要素のみを直接更新
→ 仮想 DOM の diff 計算なし → 高速かつシンプル
結論:<script type="module">を1行追加するだけで使い始められます。npmもWebpackもViteも一切不要です。
@wcstack/stateの基本パターンは2ステップです。
wcs-stateタグ内に状態(data)とメソッドを定義するdata-wcs属性でDOMと状態のパスを連結する
data-wcs="value: 変数名"と指定するだけで、inputへの入力が状態に自動反映され、状態の変化がinputにも自動反映される双方向バインディングが有効になります。
こんにちは、{{ name }}さん!
現在のカウント:{{ count }}
ユーザー名:{{ name }}
<template data-wcs="for: 配列名">を使うと、配列の要素数だけDOMを自動生成します。*(アスタリスク)が「現在のループ要素」を指すため、手動でインデックスを管理する必要はありません。
歳
条件が偽のとき、要素はdisplay:noneになるのではなく、DOMから物理的に削除されます。これによりアクセシビリティ的に正しい挙動が保証されます。
現在のカウント:{{ count }}
カウントが10を超えました!
カウントは正の値です。
ゼロ以下です。
フィルタは|フィルタ名の形式で状態パスに連結して使います。条件分岐や表示変換など幅広い用途に対応しています。
| カテゴリ | フィルタ | 説明 |
|---|---|---|
| 比較 | |gt(n) | nより大きいか(greater than) |
| 比較 | |lt(n) | nより小さいか(less than) |
| 比較 | |eq(n) | nと等しいか |
| 比較 | |gte(n) | n以上 |
| 比較 | |lte(n) | n以下 |
| 文字列 | |uppercase | 大文字に変換 |
| 文字列 | |lowercase | 小文字に変換 |
| 文字列 | |trim | 前後の空白を削除 |
| 数値 | |toFixed(2) | 小数点2桁に丸める |
| その他 | |not | 否定(true→false) |
| その他 | |length | 配列/文字列の長さ |
| その他 | |isEmpty | 空かどうか |
【使用例】
ユーザーが存在しません。
@wcstack/stateの位置づけを理解するために、代表的なライブラリ・フレームワークと比較します。
| 特徴 | @wcstack/state | Alpine.js | React | Vue |
|---|---|---|---|---|
| CDN1行で動作 | ✅ | ✅ | ❌ | ❌ |
| ビルドツール不要 | ✅ | ✅ | 通常必要 | 通常必要 |
| 仮想DOM | ❌(Direct DOM) | ❌ | ✅ | ✅ |
| 状態の定義場所 | wcs-stateタグ | x-dataタグ | useState | data() |
| バンドルサイズ | 超小型 | 小型 | 中〜大 | 中型 |
| JSX/SFC | ❌ | ❌ | JSX | SFC |
| 型サポート | 限定的 | 限定的 | 強力 | 強力 |
Alpine.jsは既存のDOM要素に状態を直接埋め込む設計(x-data/x-bind)です。一方、@wcstack/stateはwcs-stateタグで状態を独立させ、data-wcsでパスのみを連結します。状態とUIがお互いの実装を知らない疎結合な設計が特徴です。
for・if・双方向バインディングを組み合わせた実践的なTODOリストの例です。
TODOリスト
タスクがありません。追加してみましょう!



これってjQueryとどう違うんですか?



jQueryは「DOMを手動で操作するライブラリ」じゃ。@wcstack/stateは「状態を定義すれば自動でDOMが更新されるリアクティブシステム」じゃ。jQueryでは $('#count').text(count) と手動で書かなければならないが、@wcstack/stateでは data-wcs="textContent: count" を設定するだけで、countが変わるたびに自動で画面が更新されるんじゃ!



なるほど!「状態管理」というのはReactやVueだけの概念じゃなくて、HTMLでもできるんですね。軽量なプロジェクトで活用してみます!
比較的新しいライブラリのため、小規模プロジェクト・静的ページへの動的要素追加・プロトタイプ用途には十分適しています。大規模プロダクションやチーム開発では、React/Vue/Svelteなど成熟したエコシステムを持つフレームワークを選択する方が安全です。
@wcstack/stateは純粋なHTMLとJavaScriptで動作するため、TypeScriptのトランスパイルが必要な場合はビルド環境が必要になります。型安全性を重視する場合は、TypeScriptサポートが充実したReact/Vue/Svelteを選択することをお勧めします。
はい。WordPressのテーマやページにCDN読み込みのscriptタグを追加するだけで使えます。問い合わせフォームのバリデーション表示や動的なコンテンツ切り替えなどに活用できます。wp_enqueue_scriptsでCDN URLを読み込むのが正規の方法です。
ページ内に複数のwcs-stateタグを配置することで、コンポーネントごとに状態を分割して管理できます。各wcs-stateの状態はスコープが独立しているため、名前の衝突を気にせず設計できます。
ES Proxyはネストされたオブジェクトのプロパティ変更を直接検知できないケースがあります。配列を操作した後に this.tasks = [...this.tasks] のように配列を再代入することで、変更を確実に通知できます。TODOリストの実装例のtoggleDoneメソッドがこのパターンを示しています。
wcs-stateタグで状態を定義 → data-wcs属性でDOMと連結 → 状態変更でDOM自動更新。data-wcs="value: 変数名"でinput要素と状態を双方向に連結。<template data-wcs="for: 配列名">で繰り返し。*がループの現在要素を指す。if/elseif/elseで要素をDOMから物理的に追加・削除して表示を制御。|gt(n)|isEmptyなど40種類の組み込みフィルタで比較・変換が可能。ReactやVueが不要なシンプルなプロジェクトで「少しだけ動的な動作を追加したい」という場面で、@wcstack/stateは非常に有力な選択肢です。まずCDN1行追加してカウンターを動かすところから試してみましょう。
公式サイト より
今すぐ
無料カウンセリング
を予約!