この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 07:10:02

タイトル: phalcon
SEOタイトル: 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 有効化で十分。