Alpine.js によるインタラクティビティ

On this page

Alpine.js によるインタラクティビティ

BX Sites がビルドするすべてのページは、すでに Alpine.js を読み込んでいます - 3 つの組み込みテーマそれぞれで、ダーク/ライトモード切替と 言語ドロップダウンを動かしているのがこれです。同じ Alpine インスタンスは、 あなた自身のページコンテンツからも無料で使えます。bxsites.json で切り替える 設定も、追加する extraJs エントリも、Markdown に書く追加の <script> タグも 必要ありません。

Markdown 内の生のブロックレベル HTML はそのまま通過する ため、Alpine の x-data/x-show/@click などの属性を、そのままどの HTML ブロックにも書くだけで動作します。

Alpine に手を伸ばす前に

「インタラクティブ」に見えるニーズの多くは、自分で JS を書かなくても済む 専用のディレクティブブロックがすでに用意されています - まずはこちらを検討して ください:

Alpine は、これらがカバーしない - 独自のクライアントサイド状態を持つ - インタラクティブなコンテンツのためのものです。

コピー・トゥ・クリップボードボタン

よくある例: インストールコマンドの横にあり、それをコピーしてコピー完了を 確認するボタンです:

<div x-data="{ copied: false }">
  <button type="button" @click="navigator.clipboard.writeText( 'box install bx-sites' ); copied = true; setTimeout( () => copied = false, 1500 )">
    <span x-show="!copied">インストールコマンドをコピー</span>
    <span x-show="copied" x-cloak>コピーしました!</span>
  </button>
</div>

ライブフィルタ

サーバーへの往復なしで、クライアントサイドでリストをフィルタリングします:

<div x-data="{ query: '' }">
  <input type="text" x-model="query" placeholder="プロバイダーを絞り込み...">
  <ul>
    <li x-show="'local'.includes( query.toLowerCase() )">local(静的インデックス、サーバー不要)</li>
    <li x-show="'algolia'.includes( query.toLowerCase() )">algolia(ホスト型 DocSearch)</li>
    <li x-show="'pagefind'.includes( query.toLowerCase() )">pagefind(ビルド時にインデックス化)</li>
  </ul>
</div>

x-model は入力値を Alpine の状態にバインドします。各 <li>x-show は キー入力のたびに再評価されます。

x-data の基本(Alpine が初めての方向け)

x-data は、スコープ自身のリアクティブな状態をプレーンな JS オブジェクトとして 宣言します。その要素の内側にあるものはすべてそれを読み書きでき、 x-show/x-text/x-model/@clickx-on:click の省略形)はいずれも、 状態の変化に反応します:

<div x-data="{ count: 0 }">
  <button type="button" @click="count++">クリック <span x-text="count"></span> 回</button>
</div>

完全なディレクティブ一覧(x-ifx-forx-transition など)については Alpine 自身のドキュメント を参照してください。

知っておくべきこと

  • これはコアであり、オプションではありません。 テーマのクロム(ダーク モード、言語スイッチャー)は Alpine に依存しているため、mermaid/math のように bxsites.json でオフにすることはできません。
  • バージョン。 現在は alpinejs@3.14.1 で、このモジュールに同梱され site/assets/vendor/alpine/ から配信されます - CDN は関与しません。 正確に何が読み込まれているか知りたい場合は、テーマ自身の layout.bxm 内の実際の <script> タグを確認してください。
  • 厳格な CSP。 Alpine のデフォルトビルドは x-data/@click などの内側の JS 式を直接評価するため、厳格な Content-Security-Policy の下では unsafe-eval が必要です。デプロイ先でそれが許可できない場合、ページ コンテンツで Alpine に頼らないでください。
  • 軽量に保つ。 ドキュメントページは高速でシンプルであるべきです - 小さく自己完結したウィジェット(コピーボタン、フィルタ、トグル)は 適していますが、フルのクライアントサイドアプリのためのものではありません。
Edit this page Download Markdown Last updated Aug 23, 2026, 2:17:28 AM