【入門編】PHPからHackへの段階的移行:Partial ModeからStrict Modeへの安全なステップアップ – Hack言語 コア・静的型システムとHHVMのアーキテクチャ解析バイブル

Hackの真髄:カオスなPHPを「堅牢な要塞」へ変える段階的移行の極意

こんにちは。HHVMの深淵で日々型推論アルゴリズムと格闘しているチーフアーキテクトです。

PHPという自由奔放な言語から、Hackという規律ある言語へ。この移行は単なる文法の書き換えではありません。「実行時にしか分からないエラー」を「コンパイル時に潰す」という、エンジニアとしての防衛線そのものをシフトさせる作業です。

今日は、既存のPHPコードを破壊することなく、HackのStrict Mode(厳格モード)という「聖域」へ安全にたどり着くための戦略をお話しします。

—

1. なぜ「段階的(Partial)」なのか?

Hackには`// @partial`と`// @strict`という二つの世界線があります。
いきなりStrict Modeで既存のPHPコードを書き換えてはいけません。それは砂上の楼閣で地雷原を歩くようなものです。

  • Partial Mode: 型定義をサボれる場所。PHPの「動的な自由さ」を残しつつ、一部だけ型を恩恵を受けられる。
  • Strict Mode: Hackの真の力。型チェッカー(hh_client)が全コードを掌握し、一切の曖昧さを許さない。

移行の鉄則: まずはPartialで「型を足場」にし、徐々にStrictの「領域」を広げていくのです。

—

2. 段階的移行の3ステップ・戦略

既存のコードを壊さないための、現実的かつ最も安全なステップはこれです。

Step 1: `// @partial` で「型という名の保険」をかける

まず、ファイルの一行目に `Step 2: 関数シグネチャの「要塞化」

次に、関数の引数と戻り値に型を記述します。これだけで、関数間のインターフェースが固定されます。

「中身は未完成でも、入り口と出口だけは保証する」こと。これだけで、システム全体に波及するバグを局所化できます。

Step 3: `// @strict` への昇格

関数の中身まで型定義が完璧になったら、いよいよファイル冒頭のコメントを `// @strict` に書き換えます。型チェッカーが「お前はもう大人だ。一切の曖昧さを許さない」と牙を剥いてきますが、安心してください。それが「バグのないコード」への最短ルートです。

—

3. 陥りやすい「型の落とし穴」

移行中に初心者が必ずぶつかる壁がいくつかあります。これを知っているだけで、デバッグ時間は半分になります。

  • Nullability(Null許容型)の罠:

Hackはデフォルトで「Nullは絶対に許さない」というスタンスです。PHPのように「戻り値が数値かNullか分からない」というコードは、`?float` と明示しない限り型エラーになります。

  • 解決策: 「ここはNullがあり得る」と疑う癖をつけ、`if ($val is nonnull)` でガード節を書きましょう。
  • Shape(形状)の活用:

連想配列(`array`)は型安全の敵です。`$user[‘name’]` と書くと、キーが存在するかどうかが保証されません。

  • Hackの極意: `shape` 型を使いましょう。

type User = shape(‘name’ => string, ‘age’ => int);

function greet(User $u): void {
echo $u[‘name’]; // 型チェッカーが安心する
}

—

4. 最後に:型は「制約」ではなく「設計図」

型定義を書くことを「面倒だ」と感じるかもしれません。しかし、それは逆です。

型を書くということは、「この関数はどうあるべきか?」を自問自答することに他なりません。設計が曖昧だから型が決まらないのです。型定義を埋めていく作業は、あなたの書いたコードの設計を見直し、磨き上げるプロセスそのものです。

ここをクリアすれば、あなたはもうPHPのランタイムエラーに怯える必要はありません。HHVMという最強の相棒が、あなたのコードを常に監視し、リリース前にバグを弾き飛ばしてくれます。

準備はいいですか?まずはファイルの一行目から。あなたのコードを「堅牢な要塞」へと進化させていきましょう。

何か分からないことがあれば、いつでもHHVMの奥深くまで聞きに来てください。応援していますよ。

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