フレームワークを整える
中級Alpine.js を整える。
= HTML の属性を足すだけで動く——Alpine.js(CSP ビルド)の書き味を確かめる
Alpine.js が初めての方は、先に そもそも Alpine.js とは・どんな場面で使うか をどうぞ。
サンプルコード(クリックでエディタに挿入)
「▶ 実行」を押すと、ここに結果が表示されます。
コンソール
console.log の出力とエラーがここに出ます。
無限ループなど重い処理を書くと、プレビューが固まることがあります。「■ 停止」でプレビューを作り直せます。
そもそも Alpine.js とは
HTML に属性を書き足すだけで動きを付ける、軽量な JavaScript フレームワーク。
Alpine.js は、HTML のタグに専用の属性を書き足すだけで、開閉やタブ切り替えといった動きを付けられる、軽量な JavaScript フレームワークです。別ファイルに長いスクリプトを書かずに済み、動きの定義が HTML の中に見えるのが特徴です。Caleb Porzio 氏が作り、オープンソースで開発されています。
React や Vue のような「画面全体を作る道具」ではなく、できあがった HTML に少しだけ動きを足すことを得意にしています。考え方は Vue に近く、導入も script タグを1行足すだけで済みます。Laravel や Tailwind CSS を使う現場でよく見かけます。
どこで・どんな場面で使うか
-
メニューの開閉・アコーディオン
ボタンを押すと開く、閉じるといった小さな動きを、HTML だけで書けます。
-
タブ・モーダルウィンドウ
表示の切り替えや、ポップアップの出し入れに向いています。
-
フォームの入力補助
入力内容に応じて項目を出し入れする、といった簡単な画面の動きに使えます。
-
サーバーが HTML を作るサイト
Laravel などサーバー側で HTML を作る構成に、後から動きを足す用途で選ばれます。
-
求人・学習の場面
単独の求人は多くありませんが、Vue や React に進む前の入り口としても学びやすい道具です。
向いている場面・向いていない場面
- 向いている:HTML 中心のサイトに、少しだけ動きを足したいとき。
- 向いている:ビルド作業なしで、すぐに試したい小さな工夫。
- 向いていない:画面数が多く、状態が複雑に絡み合う大きなアプリ。その場合は React や Vue のほうが整理しやすくなります。
上の練習場で、HTML に属性を書いて動きを付ける感覚を試してみてください。
Alpine.js が向いている場面/向かない場面
自分に合うのはどれ? 選び方を見る →HTML属性に振る舞いを書くだけの、既存ページへの「一振りかけ」ライブラリ。
◎ 向いている場面
- ・ 既存のHTMLページに、x-data等の属性を足すだけで動きを加えたいとき
- ・ サーバーサイド(PHP/Rails等)でHTMLを描画し、部分的にだけ動きを足したいとき
- ・ ビルド環境を用意したくないとき(<script>タグ1本で使える)
- ・ 学習コストを最小にしたいとき
△ 向かない場面
- ・ 求人量・ライブラリの選択肢の広さを重視するとき(当サイト内では手薄)
- ・ 大きめのSPA(画面遷移込みの本格的なWebアプリ)を組みたいとき
このページは @alpinejs/csp(CSP ビルド)を使っています
Alpine.js の標準ビルドは x-data="{ count: 0 }" のような式をその場で new Function に通して評価しますが、本番の CSP(Content-Security-Policy)はそれを禁止しています。
そこで CSP ビルドでは、document.addEventListener('alpine:init', ...) の中で
Alpine.data('名前', () => ({ ... })) を先に登録しておき、
HTML 側では x-data="名前()" の形で参照します。上のサンプルはすべてこの形で書かれています。
このページについて
ここで動くのは本物のブラウザのエンジンです。Alpine.js 3.17.1(@alpinejs/csp)を、サンドボックス化した(allow-scripts のみの)iframe の中で読み込んで実行します。
🌐 ライブラリは cdn.jsdelivr.net から読み込みます。書いたコードと実行結果は端末内で完結し、外部へ送信しません(送信ゼロ)。
プレビューはサンドボックス化した iframe で、このページや端末のデータには触れません。
このツールについて
HTML の属性に x-data・x-on・x-for を足すだけで動く——Alpine.js の書き味を、実際に手を動かして確かめられます。ここでは本番同様、CSP に対応した @alpinejs/csp を使います。
HTML の属性(x-data・x-on・x-for・x-show)を足すだけで動く Alpine.js を確かめる練習場。本番同様の CSP ビルドで、Alpine.data() で登録してから使う作法も体験できます。
主な機能
- 4サンプル(Hello World・状態とイベント・一覧 x-for・検索フィルタ)
- @alpinejs/csp 3.17.1 を cdn.jsdelivr.net から読み込み
- Alpine.data() で登録して x-data で参照する CSP ビルドの作法を解説
- HTML タブ1枚・プレビュー+console・停止ボタン・送信ゼロ
よくある質問
Q. 標準の Alpine.js と挙動は違いますか?
A. CSP ビルドを使っているため、x-data に直接オブジェクトを書く書き方が使えません。Alpine.data() で名前を登録し、x-data="名前()" で参照します。
Q. HTML タブが1枚だけなのはなぜですか?
A. Alpine.js は HTML の属性で完結するのが持ち味なので、マークアップと Alpine.data() の登録スクリプトを1枚に同居させています。
Q. x-data="{ ... }" と書いたらどうなりますか?
A. CSP ビルドでは評価できず動きません。Alpine.data() で登録してから x-data="名前()" にしてください。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。