PHP の手軽さに、安全を組み込む。
$変数、HTML テンプレート、ファイル単位のルーティング、保存してすぐ反映 — PHP の生産性はそのままに、型安全・安全な出力・速度をコンパイラが引き受けます。
<?phx
import std.http.request;
import std.db.Database;
$name = request()->query("author") ?? "ann"; // ?string, narrowed by ??
$db = Database::open("data/blog.db");
$posts = $db->query(sql"SELECT title FROM posts WHERE author = {$name}");
?>
<h1>Posts by <?= $name ?></h1>
<ul>
<?phx foreach ($posts as $post): ?>
<li><?= $post->string("title") ?? "untitled" ?></li>
<?phx endforeach; ?>
</ul>気負わない型安全
変数の型は最初の代入で決まります。暗黙の型変換なし、== は常に厳密、?T・?->・?? による null 安全、ジェネリクス、interface、enum。
場所を知っているエスケープ
出力は自動でエスケープされ、コンパイラはすべての <?= ?> の周りの HTML を追跡します。URL の先頭、<script> の中、イベント属性に文字列を置くとコンパイルエラーです。
SQL インジェクションのない SQL
クエリは sql"..." リテラルで書きます。埋め込んだ値は必ずプレースホルダになり、文字列から SQL を組み立てる方法はありません。
既定で守りが固い
nonce 付きの Content-Security-Policy、CSRF の検査、サーバー側のセッション、レート制限。ファイルに触れるのは phx.toml で許可した場所だけ。
速い
型に特化したレジスタ VM、数値計算向けの Cranelift JIT、署名付きのバイトコードキャッシュ。fib(30) は約 7 ms。
ひとつのコマンドで全部
phx serve・test・fmt・lsp・install・migrate(PHP からの移行)。VS Code 拡張もあります。
間違いはコンパイルエラーに
エスケープだけでは URL は安全になりません。javascript:alert(1) にはエスケープする文字がないからです。PHX は値が href の先頭に入ることを知っていて、確認されるまでコンパイルを通しません。
<?phx
import std.http.request;
$site = request()->query("site") ?? "";
?>
<a href="<?= $site ?>">Website</a>
error: a URL attribute cannot start with an unchecked value
--> profile.phx:5:14
|
5 | <a href="<?= $site ?>">Website</a>
| ^^^^^
= note: use `safe_url($url)`, which only allows http(s), mailto, tel and relative URLs (blocks `javascript:`); `escape()` does not make a URL safe
1 error found
ダウンロード
Windows・Linux・macOS 向けの PHX 0.2.0。アーカイブを展開して、phx を PATH の通った場所に置いてください。
| プラットフォーム | アーカイブ |
|---|---|
| Windows x64 | phx-0.2.0-x86_64-pc-windows-msvc.zip |
| Linux x64 | phx-0.2.0-x86_64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | phx-0.2.0-aarch64-apple-darwin.tar.gz |
| macOS (Intel) | phx-0.2.0-x86_64-apple-darwin.tar.gz |
同じリリースの SHA256SUMS でアーカイブを確かめてから実行します:
sha256sum -c SHA256SUMS --ignore-missing
tar -xzf phx-0.2.0-x86_64-unknown-linux-gnu.tar.gz
./phx-0.2.0-x86_64-unknown-linux-gnu/phx --version
./phx-0.2.0-x86_64-unknown-linux-gnu/phx serve mysite # http://127.0.0.1:8080
ソースからビルドするなら、最近の安定版 Rust と C コンパイラで cargo build --release。
VS Code では editors/vscode の拡張を入れると、色分けと入力中のエラー表示が使えます。
セキュリティ
PHX は 3 回のセキュリティ監査を受け、そのたびに修正と回帰テストを加えています。監査報告をご覧ください。脆弱性の報告は security@phx-lang.org へ。