こんにちは。
今日は業務で3年ほどPhalconを使っている私が今後Phalconを使おうと思っている人に向けて、使うべきでない理由をだらだら書いたものです。
注意
この話の前提として、現在(v4)の話をしています。
v5v6(PHPコード版)が開発され始めているのもあり、v5v6が出たらこの状況は変わる可能性があります。(v5はPHPコード版ではなくなりました、v6からPHPコード版になるようです)
本家のバグ修正が遅い、メジャーバージョンアップによるバグが多い
正直これに尽きる気がします。
Phalconは2021/02/07現在、4.1.0が最新です。
4.1.0は比較的最近出ているのですが、正直いま安定しているのは3.4.5です。
4系に上がったときにPSRに寄せようとしたり、色々と努力がされているのですがその際にバグが結構生まれてしまってるなと感じます。
特にPhalconはPHP拡張であるのもあってide-stubsという公式のIDE向けのhelperの利用は必須です。しかしこのide-stubsもzephirのコードをparseして生成しているのもあって漏れがあったり、そもそもzephir側の静的チェックが出来てなかったりします。(Interfaceの引数と実際のクラスの引数が異なっているなど、そもそもあってはならないようなことが普通にあります)
こういったいろんな問題があるにも関わらず、本家の対応が遅いため(そもそもzephirのコードをメンテする人がほぼいない)、ずっと根底にあるバグ(仕様)が残ったままバージョンが上がっていってます。
また、修正がされたとしてもパッチバージョンをあげてくれなかったりして、小さい単位でもパッチバージョンとして出してほしいなぁと思います。
ドキュメントが正しくない
現在、公式ドキュメントは4.0と3.4が存在しますが4.0のドキュメントは実際には出来ないことがドキュメントに載っています。
これは3.4系では出来たのに4.0で出来なくなったもので、そもそもドキュメントの更新自体が追いついてない感じです。
Phalconのクラスを拡張しようとするとバグ(仕様)にぶつかる
これは実際にやってて、PhalconのクラスをReflectionで取得してコンストラクタのデフォルトパラメータ(isDefaultValueAvailable)を確認しようとするとあるのにも関わらずすべてfalseで返されてしまいます。
issueは2015年に上がっていて https://github.com/phalcon/zephir/issues/1134 Cだから出来ないという結論で終わっています。
新しいバージョンが出たら、前バージョンのサポートがされない
これは結構つらくて、4系が出てから少しして3系のサポートがされなくなりました。
つまり、3系で直してほしくても4系に上げてくれって話になります。
最初に書きましたが、4系はv3.4.5に比べて明らかにバグが多いです。
そもそも活発な人たちが少ない
あきらかにここは感じます。
周りのライブラリ開発者の温度感が低めです。Phalcon3系に対応しているのもそこまで多くないです。
ほかに、ppa:ondrej/phpなどのリポジトリの反映も遅れているようです。(公式が通知してない?)
それでも今Phalconを選んだときのメリット
このような状況でありますが、Phalconを選んだときのメリットがあります。
それはOSS貢献を出来ることです。あきらかにバグがもりもりあるので、修正をすれば取り込まれる可能性は高いです。現に、筆者も何件かのPRを出して取り込まれましたし、issueもバグとして判断されたものもあります。
最後に
最初にも書きましたが、現在のv4の話なので、v5になったら突然なにか変わるかもしれません。
v5に期待しつつ、バグが減っていくと良いなぁと思います。