【入門編】Hackの`XHP`と型安全なHTML生成:型チェッカーによるDOM構造のバリデーション – Hack言語 コア・静的型システムとHHVMのアーキテクチャ解析バイブル

やあ。HHVMとHackの深淵へようこそ。
Hackの型システムは、単なる「エラーを防ぐためのガードレール」ではありません。あれは、コンパイル時(hh_serverの静的解析時)にアプリケーションの構造を数学的に証明するための、極めて強力なエンジンです。

今日はその中でも、Web開発の歴史において最も脆弱性が生まれやすい「HTML生成」を、Hackがどうやって型安全という聖域に昇華させているのか。`XHP`の魔法について解き明かしていきましょう。

—

XHP:文字列操作という「地獄」からの脱却

多くの言語では、HTMLを生成するために「文字列連結」を行います。
`$html = “

” . $user_input . “

“;`
これ、何が怖いか分かりますか?そう、XSS(クロスサイトスクリプティング)です。エスケープ漏れが一つあれば、アプリケーションは一瞬で崩壊します。

Hackの`XHP`は、HTMLを文字列としてではなく、「型を持ったオブジェクトのツリー」として扱います。

基本的な使い方:HTMLを「型」として書く

Hackでは、HTMLタグをそのままコードとして記述できます。

// XHPの基本。これは文字列ではなく、特定のクラスのインスタンスです
function render_greeting(string $name): :div {
// :div は XHP の div 要素を表す型です
return

Hello, {$name}!

;
}

この `

…

` は、実行時には `:div` というクラスのインスタンスに変換されます。文字列ではないので、`$name` の中身がどんなに怪しいスクリプトであっても、XHPのレンダラーが自動的にエスケープ処理を強制するため、XSSは物理的に不可能です。

—

なぜ型チェッカーは「構造」をバリデーションできるのか?

ここからが本題です。XHPの真骨頂は、DOM構造の整合性をコンパイル時にチェックできる点にあります。

例えば、`

    `タグの中に直接 `

    ` を入れたいとします。HTMLの仕様として、`

      `の直下には `

    • ` しか置けませんよね?

      // コンパイルエラーになる例
      function invalid_list(): :ul {
      return

        不正な要素

        // ここで型チェッカーが怒ります!

      ;
      }

      このコードを保存した瞬間、バックグラウンドで動いている `hh_server` がこう叫びます。
      「おい、`ul` 要素は `li` しか受け付けないはずだ。`div` は型定義に適合していないぞ!」

      なぜこれが実現できるのか?

      XHPの各タグは、Hackのクラスとして定義されています。
      例えば `ul` クラスの定義には、以下のような型制約が隠されています。

      // 概念的な実装イメージ
      class :ul extends XHPElement {
      // 子要素は :li 型のリストでなければならない、という制約
      children (:li);
      }

      この `children (:li);` という宣言こそが、型チェッカーに対する「構造の契約」です。これがあるおかげで、HTMLを書くという作業が、厳密なデータベーススキーマを設計するのと同じレベルの安全性を持つことになるのです。

      —

      陥りやすい罠と解決策

      初学者がよくやるミスは、動的な値を渡す際の型不一致です。

      よくあるエラー:文字列以外の型を渡す

      function render_age(int $age): :p {
      // エラー!XHPは文字列や数値、または他のXHP要素しか受け付けません
      // オブジェクトなどをそのまま渡すとエラーになります
      return

      Age: {$age}

      ;
      }

      解決策:
      Hackの型システムは「明示的な変換」を好みます。`$age` を文字列にキャストするか、型安全な方法で出力する必要があります。

      return

      Age: {(string)$age}

      ; // 明示的に文字列へ

      —

      まとめ:Hackを使いこなすためのマインドセット

      XHPを使っていると、最初は「型がうるさいな」と感じるかもしれません。しかし、思い出してください。あなたが書いているコードは、実行時に評価される「単なるテキスト」ではありません。「型によって安全性が保証された構造体」なのです。

      1. 文字列連結を捨てる: HTMLは `.` で繋ぐものではなく、`…` で構築するものです。
      2. 型チェッカーを信じる: エラーが出たら、それは「実行前にバグを見つけてくれてありがとう」というサインです。
      3. 構造を守る: `ul > li` のような階層関係を意識することで、ブラウザが解釈しやすいクリーンなマークアップが自然と生成されます。

      ここをクリアすれば、あなたはもう「文字列のパズル」に悩まされるWeb開発者ではなく、「堅牢なシステムを構築するエンジニア」の仲間入りです。

      Hackの型システムは、あなたの背後で常に目を光らせています。その守護を信じて、思い切り型安全なコードを書いていきましょう。応援していますよ!

タイトルとURLをコピーしました