6.

Phalcon (C 拡張高速 PHP フレームワーク) 完全ガイド

編集
この記事の要点
  • PhalconC 言語拡張として動く高速 PHP フレームワーク
  • Andrés Gutiérrez 氏らが 2012 年に公開、PSR 準拠、DI コンテナ / ORM / Volt テンプレート
  • 従来はPECL でインストール (PHP 拡張)。Phalcon 5 からZephirでリライト
  • ベンチマークではLaravel / Symfony より大幅に高速だが、学習コストと拡張入手の難がある
  • 2026 年現在は Laravel が圧倒。Phalcon は性能特化案件 / 既存資産での選択肢

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.iniextension=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

<?php
use Phalcon\Mvc\Micro;

$app = new Micro();

$app->get('/', function () {
    echo 'Hello Phalcon!';
});

$app->get('/users/{id:[0-9]+}', function ($id) {
    echo 'User ID: ' . (int) $id;
});

$app->handle($_SERVER['REQUEST_URI']);

フル MVC アプリの骨格

<?php
use Phalcon\Mvc\Application;
use Phalcon\Di\FactoryDefault;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Url;
use Phalcon\Db\Adapter\Pdo\Mysql;

$di = new FactoryDefault();

$di->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)

<?php
use Phalcon\Mvc\Model;

class User extends Model
{
    public $id;
    public $name;
    public $email;
}

// 検索
$users = User::find();
$user  = User::findFirst(1);
$user  = User::findFirst(['email = :em:', 'bind' => ['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 #}
<!DOCTYPE html>
<html>
<head><title>{{ title }}</title></head>
<body>
{% block content %}{% endblock %}
</body>
</html>

{# users/index.volt #}
{% extends 'layouts/main.volt' %}
{% block content %}
  <h1>ユーザ一覧</h1>
  <ul>
  {% for u in users %}
    <li>{{ u.name }} ({{ u.email }})</li>
  {% else %}
    <li>ユーザがいません</li>
  {% endfor %}
  </ul>
{% 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メモリ
素の PHP1.0x最小
Phalcon 50.7-0.9x
Slim 40.4-0.6x
Lumen0.3-0.5x
Symfony 60.2-0.3x
Laravel 110.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 有効化で十分。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Laravel
  2. CakePHP
  3. Symfony
  4. Zend Framework (PHP フレームワーク)
  5. DietCake
  6. phalcon
  7. CodeIgniter
  8. FuelPHP
  9. Slim
  10. Flight
  11. Yii
  12. Silex

最近更新/作成されたページ