PHP の手軽さに、安全を組み込む。

$変数、HTML テンプレート、ファイル単位のルーティング、保存してすぐ反映 — PHP の生産性はそのままに、型安全・安全な出力・速度をコンパイラが引き受けます。

ダウンロード 0.2.0 言語仕様を読む

<?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 の通った場所に置いてください。

同じリリースの 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 へ。