コンテンツにスキップ

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. ステップ・バイ・ステップ解説

  1. 意図の表明: hx-get で「どの情報を」という意図を表明します。
  2. 場所の定義: hx-target で「どこが変わるべきか」という結果の場所を定義します。
  3. 方法の宣言: 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; // ここでやっと目的達成
        }
    });
};
一箇所でも手順(セレクタのIDなど)を間違えると、システムは沈黙します。

宣言的なHTMXコード

<!-- 宣言的な定義 -->
<button hx-get="/data" hx-target="#content">実行</button>
手順が一切見えないことに不安を感じるかもしれませんが、これこそが「洗練」です。裏側ではHTMXという高度なシステムが、あなたが書いた目的地に向かって、安全かつ正確な最短ルート(JSの手順)を自動で走り抜けているのです。


まとめ:初心者のための「結果から考える」設計

「宣言的」に考えることは、プログラミングを「パズル」から「デザイン」に変えるプロセスです。

  • 手順を怖がるな、結果を描け: 「どうプログラムするか」で悩む前に、「どのHTMLがどう変わってほしいか」だけを考えましょう。
  • HTMLを信じる: JSという補助輪なしでも、HTMLの属性という言葉だけでUIを対話的にできることを信じてください。
  • 可読性は資産: 宣言的に書かれたコードは、時間が経っても腐りません。一目で意図がわかるコードは、最高のドキュメントになります。

命令の鎖から解き放たれ、自由自在にUIを宣言する。この心地よさを知れば、Web開発はもっと楽しくなるはずです。次の記事では、この宣言的な力を土台にしつつ、より強固なWebアプリを作る考え方「Progressive Enhancement」(007. Progressive Enhancement)について学んでいきましょう。