【入門編】移行後のコードベースを維持する:Hackの型チェックを強制するコーディング規約 – Hack言語 コア・静的型システムとHHVMのアーキテクチャ解析バイブル

Hackの魂を解き放て:動的型付けの誘惑を断ち切り、静的型付けの聖域を守る戦略

こんにちは。HHVMのコードベースの深淵からやってきた、Hackのアーキテクトです。

PHPからHackへ移行したチームの多くが、最初の数ヶ月で直面する「最大の敵」を知っていますか?それは、「PHP的な書き方への後戻り」という甘い誘惑です。せっかくHackという強固な城壁を築いたのに、`mixed`型や不完全な型定義という「裏口」からPHPの混沌が侵入してくる……これでは、Hackの真の恩恵である「実行時の型安全」を享受できません。

今回は、Hackの静的型システムを完全に掌握し、チーム全体でその強固さを維持するための「禁欲的なコーディング規約」についてお話ししましょう。

—

1. 守るべき聖域:「型チェックの強制」という防波堤

Hackの型チェッカー(`hh_client`)は、あなたのコードの守護神です。しかし、その守護神は「あえて型を明示しない」という怠慢を許してしまうことがあります。まず、これを封じ込めるのが第一歩です。

.hhconfig の設定を極限まで引き上げる

プロジェクトのルートにある `.hhconfig` を見てください。ここが緩ければ、どんな規約も無意味です。以下の設定は、いわば「最低限の防壁」です。

; .hhconfig
; 潜在的な危険をすべてエラーとして弾く設定
auto_namespace_map = {“”: “”}
; 警告を放置させない(厳格化の第一歩)
warnings = false
; 未定義の型や曖昧な推論を許さない
assume_php = false

2. チーム運用の極意:`mixed` と `any` を排除せよ

PHPから来た人がやりがちなのが、困った時に `mixed` 型に逃げること。これは「静的型付けを放棄する」という宣言に等しい行為です。

悪い例:思考停止の型定義

// 何でも入ってしまうので、実行時に型の不一致で落ちるリスクがある
function processData(mixed $data): void {
// 結局、内部で型チェックをしていないと危険
}

良い例:厳格な型付け

// Union型を使って「あり得る型」を明確に制限する
function processData(int | string $data): void {
if ($data is int) {
// ここでは安全に int として扱える
}
}

【鉄則】:`mixed` は、どうしても型を特定できない外部ライブラリとの境界線以外では「禁止」と規約化しましょう。

—

3. HSL(Hack Standard Library)を使い倒す

PHPの組み込み関数は、歴史的経緯から「型が曖昧」なものが多いです。`substr` や `array_map` をそのまま使うのではなく、HSLを活用してください。HSLはHackのために設計されており、型定義が完璧です。

比較イメージ

| 状況 | PHP的アプローチ (危うい) | Hack的アプローチ (堅牢) |
| :— | :— | :— |
| 文字列操作 | `substr($str, 0, 5)` (戻り値がboolの可能性) | `Str\slice($str, 0, 5)` (型安全が保証) |
| 配列操作 | `array_map(…)` | `Vec\map(…)` (型を維持するコレクション) |

—

4. 陥りやすい罠:`?` (Nullable) の放置

Hackで最も型エラーを起こしやすいのが「Nullable」の扱い方です。`?int` をそのまま数値計算に使おうとして、「おっと、nullだったらどうするの?」と型チェッカーに怒られた経験はありませんか?

【回避策】:nullチェックを強制するルールを導入しましょう。

// 悪い例:nullチェックなしでアクセスしようとして型エラーになる
function getLength(?string $s): int {
return $s->length; // エラー: $s は null かもしれない!
}

// 良い例:ガード節で明確に区切る
function getLength(?string $s): int {
if ($s is null) return 0;
return $s->length; // ここでは非 null であると静的に確定する
}

—

5. まとめ:Hackを掌握するために

Hackは単なるPHPの上位互換ではありません。それは、「コードが何であるか」をコンパイル時に確定させるための規律そのものです。

1. `.hhconfig` で厳格さを保つ:甘えを許す設定は今日で捨てましょう。
2. `mixed` を撲滅する:コードベースの透明性を高めます。
3. HSLを信じる:型安全なライブラリを使うことが、バグを未然に防ぐ最短ルートです。
4. `is`演算子を活用する:型チェッカーとの対話(リファインメント)を積極的に行いましょう。

ここまでできれば、あなたはもうPHPの雑多な世界から脱出し、Hackの静的型付けという、美しく整然としたアーキテクチャの住人です。

コードを書きながら「型チェッカーがニヤリと笑っている」のを感じるようになったら、それが貴方がHackをマスターした証です。さあ、安全で堅牢なコードを書き始めましょう!

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