やあ。Hackの深淵へようこそ。
私は長年HHVMのカーネルと型システムを触り続けてきた者だ。
PHPという「自由な荒野」から、Hackという「静的型付けの要塞」へ足を踏み入れる君の決断を歓迎する。君たちがこれから向き合うのは、単なるシンタックスの変更ではない。「実行時のエラーを、開発時のエラーへと昇華させる」という、エンジニアとしてのパラダイムシフトだ。
今日は、その要塞を支える最強の武器、`hh_client`(Typechecker)をCIに組み込み、開発体験(DX)を最大化する極意を伝授しよう。
—
1. なぜ「型チェック」がCIの主役なのか
PHPでありがちな「本番環境で突然`null`が飛んできて落ちる」という悪夢。あれを解決するのがHackの型チェッカーだ。
だが、ここで勘違いしてはいけない。型チェックを「面倒な作業」にしてはならない。CIに組み込む真の目的は、「人間がコードを書いている最中に、機械が先回りして間違いを指摘し、本番での事故をゼロにする」という安心感を得ることにある。
2. CIの心臓部:`hh_client`を組み込む
CIパイプラインにおいて、我々がやるべきことはシンプルだ。プロジェクトのルートで `hh_client` を走らせるだけ。
CIスクリプトの例
–checkオプションで、変更箇所だけでなくプロジェクト全体を検証する
./vendor/bin/hh_client –check
ここで重要なのは、「ビルドを止めるタイミング」だ。
- 開発者のローカル: `hh_client` がリアルタイムにバックグラウンドで動いている状態(`hh_client –watch`)が理想。
- CI上: 型エラーがあれば即座にFailさせる。ここで妥協してはならない。型エラーを無視してマージする文化は、いずれシステムを腐らせる。
3. PHPからHackへ:移行の「落とし穴」と対策
PHPコードをHackへ移行する際、初心者が最も陥りやすい罠が「Partial Mode(部分的な型チェック)」の扱いだ。
Hackには、ファイル単位で型チェックの厳しさを設定できるモードがある。
- `// partial`: ファイルの一部だけ型チェックする。移行期には便利だが、油断すると型が「逃げる」。
- `// strict`: これが目指すべき姿。全ての型が明示され、型チェッカーが完全にコードを掌握する。
【ここが極限の知見】型エラーを怖がるな
移行中に `// partial` を使っていると、型推論が途切れる場所が出てくる。
// 悪い例:型が不明瞭(mixed型)
function process(mixed $data) {
// $dataが何者か分からないので、安全な操作が保証されない
return $data->id; // ここでエラー!型チェッカーは「mixedはオブジェクトじゃないかもよ?」と警告する
}
どう解決するか?
型チェッカーを「敵」ではなく「道標」として使おう。`mixed` 型を撲滅し、`shape` や `interface` で型を定義していく過程こそが、レガシーコードを現代的な堅牢なコードへ生まれ変わらせる儀式なんだ。
4. 開発体験(DX)を損なわないための「3つの鉄則」
CIで型チェックを強制すると、初心者は「厳しすぎて書けない!」と嘆くことがある。それを防ぐための先輩からのアドバイスだ。
1. 段階的な厳格化: 最初は `partial` で移行し、徐々に特定のディレクトリから `strict` モードへ強制移行させる。
2. `hh_client –watch` の徹底: CIの結果を待つのではなく、エディタ(VS Codeなど)のプラグインを使い、タイピング中にエラーが赤波線で出る環境を構築する。これが最高のDXだ。
3. HSL(Hack Standard Library)を愛する: 従来のPHPの関数(`array_map`など)は型が緩い。HSLの関数を使うことで、型チェッカーは驚くほど正確な推論をしてくれるようになる。
5. 最後に:型は「制約」ではなく「設計図」
初心者のうちは、型定義を「コードを書く手間」だと感じるかもしれない。だが、Hackの型システムは、君が「何をしたいのか」を言語に教えるための設計図だ。
型チェッカーが「君の書いたコードは矛盾している」と指摘した時、それは「バグを見つけた」のではなく「設計の曖昧さを解消するチャンスを与えてくれた」と捉えてほしい。
ここをクリアすれば、君はもう単なるPHPコーダーではない。HHVMのアーキテクチャと共に生きる、堅牢なシステムを構築するエンジニアの仲間入りだ。
さあ、恐れずに `// strict` を宣言しよう。その先には、テストコードを書かなくても自信を持ってデプロイできる、至高の安心感が待っている。
何か行き詰まったら、いつでも聞きに来るといい。型システムの深淵で待っているよ。