006. 宣言的UI操作(Declarative UI Manipulation)
原理:「どうやるか」ではなく「どうありたいか」を語る
プログラミングの二つの対話スタイル
コンピュータに何かをさせる時、大きく分けて二つの伝え方があります。それが「命令的(Imperative)」と「宣言的(Declarative)」です。
日常生活に例えてみましょう。あなたがタクシーに乗ったとします。 - 命令的: 「次の信号を右に曲がって、200メートル先のコンビニの角を左、その先の白い建物の前で止まってください」と、手順を細かく指示する。 - 宣言的: 「東京駅までお願いします」と、目的地(結果)だけを伝える。
これまでのWeb開発、特に標準的なJavaScript(JS)を使った開発は、非常に「命令的」でした。「ボタンを探して、クリックされたら、入力を取得して、URLを組み立てて、通信して、結果をパースして、指定の要素の中身を書き換えて……」という、初心者には気の遠くなるような「手順のリスト」を書かなければなりませんでした。
HTMXがもたらす宣言的な魔法
HTMXの核心にあるのは、UIの操作を完全に「宣言的」に変えることです。 開発者はJSで手順を書く代わりに、HTMLの中に「このボタンを押したら、この場所を、このURLの内容で入れ替えてほしい」という最終的な願いを属性として書き込みます。
このスタイルが優れている理由は、コードの読みやすさが劇的に向上するからです。宣言的なコードは、未来の自分や他のチームメンバーが読んだとき、「何が起きるか」を一瞬で理解させてくれます。手順(JS)を一つずつ追いかける必要はなく、HTMLの属性という「目的地」を見るだけで、その要素の役割が完結しているからです。
実践:属性だけで「結果」を定義する
1. 手順を排除したボタンの実装
以下のシンプルな例で、命令的(JS)と宣言的(HTMX)の違いを感じてみましょう。
<!-- HTMX:宣言的な書き方 -->
<!-- 「取ってくる(GET)」「ここに(target)」「入れ替える(swap)」と結果を指定するだけ -->
<button hx-get="/api/info"
hx-target="#display-area"
hx-swap="innerHTML">
最新情報を表示
</button>
<div id="display-area">ここが書き換わります</div>
2. ターゲットの柔軟な指定
宣言的UIの面白さは、ターゲットの指定方法にも現れます。わざわざJSで複雑なセレクタを書かなくても、直感的に場所を指定できます。
<div class="user-card">
<p>ステータス:オフライン</p>
<!-- 「自分自身の親要素(closest)の.user-card」を更新せよ、と宣言 -->
<button hx-get="/api/user/online" hx-target="closest .user-card">
オンラインにする
</button>
</div>
3. ステップ・バイ・ステップ解説
- 意図の表明:
hx-getで「どの情報を」という意図を表明します。 - 場所の定義:
hx-targetで「どこが変わるべきか」という結果の場所を定義します。 - 方法の宣言:
hx-swapで「どう変わるべきか」という変化の形を宣言します。
この3つの属性が並んでいるのを見るだけで、あなたはJSのロジックを探ることなく、「このボタンの目的地」を完全に把握したことになります。
比較:命令的手順(JS) vs 宣言的定義(HTMX)
命令的なJSコード
「もし通信が成功したら」「もし要素が見つかったら」という「もし」の連続で手順を組み上げます。
// 命令的な手順書
document.querySelector('#my-btn').onclick = function() {
fetch('/data').then(res => res.text()).then(html => {
const el = document.querySelector('#content');
if (el) {
el.innerHTML = html; // ここでやっと目的達成
}
});
};
宣言的なHTMXコード
手順が一切見えないことに不安を感じるかもしれませんが、これこそが「洗練」です。裏側ではHTMXという高度なシステムが、あなたが書いた目的地に向かって、安全かつ正確な最短ルート(JSの手順)を自動で走り抜けているのです。まとめ:初心者のための「結果から考える」設計
「宣言的」に考えることは、プログラミングを「パズル」から「デザイン」に変えるプロセスです。
- 手順を怖がるな、結果を描け: 「どうプログラムするか」で悩む前に、「どのHTMLがどう変わってほしいか」だけを考えましょう。
- HTMLを信じる: JSという補助輪なしでも、HTMLの属性という言葉だけでUIを対話的にできることを信じてください。
- 可読性は資産: 宣言的に書かれたコードは、時間が経っても腐りません。一目で意図がわかるコードは、最高のドキュメントになります。
命令の鎖から解き放たれ、自由自在にUIを宣言する。この心地よさを知れば、Web開発はもっと楽しくなるはずです。次の記事では、この宣言的な力を土台にしつつ、より強固なWebアプリを作る考え方「Progressive Enhancement」(007. Progressive Enhancement)について学んでいきましょう。