私は最近はずっとゲームのバックエンドAPI開発をPHPでずっとしてきたエンジニアなのですが、
ここ一年くらい他の言語を主体にする企業様が増えていまして。
PHPはリテラルの自由度が高すぎるけど、動作的にはメモリ管理とか楽なんだけどなぁ。
そろそろ他の言語に切り替えないと食い扶持なくなるかな・・・と思っていたところでした。
でも、なんとなく後ろ髪に引かれてる部分があり、
先日のPHPカンファレンス2016で耳にしたZephirをちょっと見てみたところ、
ほんとに敷居が低く、楽しくPHPExtensionが作れたので、始めてQiitaに記事を書いてみました。
エンジニアリングは楽しいの大事です!
ちなみに作ったものなのですが、記事のタグにつけましたが、
最近のゲーム案件では結構欠かせないものながら自分では作ったことがなかった
fluentdにポストするモジュールです。
##Zephirとは
文法はPHPとほぼ同じで、コードを書いた後ビルドをかけると
C言語経由でそのままPHPExtensionの作成までを一気通貫でできる
魔法のような言語+コンパイラです。
Zephir Language
私もQiitaの記事を参考にしてインストールしたくらい皆さんが記事を投稿されているので
詳細は省略させていただきますが・・・。
##開発環境
いわゆるよくある、MacOSの上でVirtuaBox動かして、共有ディレクトリ上でコーディングしました。
実際にコンパイルなどしたゲスト環境は
CentOS6.5+PHP7.0.13+gcc4.4.7
です。
ZephirにはSublimeText向けのシンタックスハイライトがあるのでエディタはSublimeText使いました。
##ちょっとだけ引っかかったところ
少しだけ勝手が違うので、やはり慣れるのに多少の時間は要りますが、
とりあえず動くところまでなら本当に学習コストが低かったです。
文法の違いも公式ドキュメントで結構事足ります。
(あ、でもどなたかPHP自体の定義済み定数を取得する方法を知っていたら教えてください・・・。)
あと、私の場合Zephirのコードを書き始めてからは、
Extensionを読み込むconfigをいじったり、php-fpmをリスタートするのが面倒だったので
コマンドライン用のテストコードを用意して、zephir build
→ php test.php
を繰り返していました。
ただ、全くオススメできなくて
(当然なのですが)コードが正しくない状態でbuildするとphpがsegfaultで落ちて、
コンソールでは何も起きなかったかの様に振る舞われます(苦笑)
同じようなことをしている方がいたらお気をつけください。
##結果
こんな感じの物が出来ました。
まだテストもあまり完全ではないですし、ベンチも取ってない状況ですが、
ファイルをincludeしないだけでもそこそこ嬉しいんじゃないかな、と期待しています。
隙を見て検証とかできたら、また続きを書きたいな、と思います。