タイトル: phalcon
SEOタイトル: Phalcon (C 拡張高速 PHP フレームワーク) 完全ガイド
| この記事の要点 |
|
Phalcon とは
Phalcon は他の PHP フレームワークと異なり、PHP の C 拡張 (.so / .dll) として実装されている全部入り MVC フレームワーク。Composer で読み込む通常のフレームワークと違い、PHP 起動時に拡張としてロードされるため、起動コストが極めて低く、ベンチマークでは Laravel / Symfony を大きく上回る性能を出します。
主な特徴
| 項目 | 内容 |
|---|---|
| 言語 | Phalcon 4 まで: C 直書き / Phalcon 5: Zephir (PHP 風) で記述 → C にコンパイル |
| 配布形式 | PHP 拡張 (.so / .dll)、PECL / GitHub Release |
| 性能 | リクエスト/秒で Laravel の 2-5 倍 |
| メモリ | Composer 依存ベースのフレームワークより大幅に少ない |
| 機能 | MVC、DI、ORM、Volt テンプレート、ルーター、Session、Form、ACL |
| 仕様準拠 | PSR-3 / PSR-4 / PSR-7 / PSR-11 / PSR-16 / PSR-17 |
| ライセンス | BSD 3-Clause |
インストール
Linux (PECL)
# 前提: PHP 7.4 / 8.0 / 8.1 / 8.2 / 8.3 (Phalcon 5+ 対応)
sudo pecl install phalcon
# php.ini に追加
echo "extension=phalcon" | sudo tee /etc/php/8.3/cli/conf.d/50-phalcon.ini
echo "extension=phalcon" | sudo tee /etc/php/8.3/fpm/conf.d/50-phalcon.ini
# 確認
php -m | grep phalcon
php -r 'echo Phalcon\Version::get();'
Ubuntu / Debian (APT)
# 公式リポジトリを追加
curl -s "https://packagecloud.io/install/repositories/phalcon/stable/script.deb.sh" | sudo bash
sudo apt install php-phalcon
sudo systemctl restart php8.3-fpm
Windows
- GitHub Releases から
php_phalcon.dllをダウンロード (PHP バージョンと TS/NTS, x64/x86 一致が必須) php.iniにextension=php_phalcon.dll追記
Docker
FROM php:8.3-fpm
RUN apt-get update && apt-get install -y autoconf gcc make libpcre3-dev \
&& pecl install phalcon \
&& docker-php-ext-enable phalcon
Hello World
get('/', function () {
echo 'Hello Phalcon!';
});
$app->get('/users/{id:[0-9]+}', function ($id) {
echo 'User ID: ' . (int) $id;
});
$app->handle($_SERVER['REQUEST_URI']);
フル MVC アプリの骨格
set('view', function () {
$view = new View();
$view->setViewsDir(__DIR__ . '/app/views/');
return $view;
});
$di->set('url', function () {
$url = new Url();
$url->setBaseUri('/');
return $url;
});
$di->set('db', function () {
return new Mysql([
'host' => 'localhost',
'username' => 'user',
'password' => 'pass',
'dbname' => 'mydb',
]);
});
$app = new Application($di);
echo $app->handle($_SERVER['REQUEST_URI'])->getContent();
ORM (Phalcon\Mvc\Model)
['em' => 'a@b.com']]);
// 作成
$u = new User();
$u->name = 'Taro';
$u->email = 'taro@example.com';
if (!$u->save()) {
foreach ($u->getMessages() as $m) echo $m, "\n";
}
// 更新 / 削除
$u->name = 'Jiro';
$u->update();
$u->delete();
Volt テンプレートエンジン
{# layouts/main.volt #}
{{ title }}
{% block content %}{% endblock %}
{# users/index.volt #}
{% extends 'layouts/main.volt' %}
{% block content %}
ユーザ一覧
{% for u in users %}
- {{ u.name }} ({{ u.email }})
{% else %}
- ユーザがいません
{% endfor %}
{% endblock %}
Volt は Twig 互換に近い構文。コンパイル後はネイティブ PHPになるため高速。
DI コンテナ
use Phalcon\Di;
$di = new Di();
// シングルトン
$di->setShared('mailer', function () {
return new Mailer(['host' => 'smtp.example.com']);
});
// ファクトリ
$di->set('logger', function () {
return new Logger('/var/log/app.log');
});
// 取得
$mailer = $di->get('mailer');
$mailer->send('to@example.com', 'Hi');
Devtools (CLI ツール)
# インストール
composer global require phalcon/devtools
# プロジェクト雛形作成
phalcon project myapp
# モデル生成
phalcon model users
phalcon all-models
# コントローラ生成
phalcon controller UserController
# マイグレーション
phalcon migration generate
phalcon migration run
性能比較 (参考値)
| フレームワーク | 相対 RPS | メモリ |
|---|---|---|
| 素の PHP | 1.0x | 最小 |
| Phalcon 5 | 0.7-0.9x | 小 |
| Slim 4 | 0.4-0.6x | 小 |
| Lumen | 0.3-0.5x | 中 |
| Symfony 6 | 0.2-0.3x | 大 |
| Laravel 11 | 0.15-0.25x | 大 |
※ 実測はキャッシュ (OPcache, JIT) / DB / アプリ複雑度に大きく依存。Phalcon は同等構成で 2-5 倍と言われます。
欠点 / 注意点
- 共有レンタルサーバで使えない: PHP 拡張のインストール権限が必要
- デバッグが難しい: 内部が C で書かれているため、Xdebug ステップインで深く追えない
- PECL / GitHub のビルドが PHP マイナーバージョンと厳密に対応: PHP 8.4 リリース直後は対応版待ち
- エコシステム: Laravel / Symfony 比でパッケージ数が圧倒的に少ない
- 学習リソース: 日本語情報少、英語公式ドキュメント主体
2026 年時点の活発度
- GitHub phalcon/cphalcon はメンテ継続中
- メジャー: Phalcon 5 (Zephir リライト版) が安定版
- コミュニティは Laravel に押されているが、性能特化案件で根強い支持
FAQ
Q: 新規プロジェクトで Phalcon を選ぶべき?
A: 一般的な Web アプリなら Laravel / Symfony 推奨。Phalcon が活きるのはRPS 重視 / 低メモリ要件 / 既存 Phalcon 資産ありのケース。
Q: Composer のパッケージは使える?
A: 使えます。Phalcon コア機能は拡張、追加ライブラリ (例: Guzzle / Carbon) は Composer で導入する併用パターンが一般的。
Q: Laravel から移行する価値はある?
A: 性能ボトルネックがフレームワーク起動コストにある場合のみ。多くの場合 DB / N+1 改善や OPcache / JIT 有効化で十分。