alt+sync

オルトプラス の スタッフブログ

ソーシャルゲーム用のフレームワークをつくる

      2015/10/21



こんにちは、phpエンジニアのkaerusanuです。

 

Alt+内ではソーシャルゲームを作るのに2つのフレームワークを使っています。そのうちの1つを私が作っています。

 

 

自社フレームワークを作る意味

phpにはある程度こなれたフレームワークが存在するのに、わざわざ自社で作る意味があるのかと皆思うでしょうが、実際に作ってみるとそのメリットが大きいと感じます。

 

メリットはいくつかあります。

 

自社フレームワーク作るメリット
1.行いたい最適化を自由にできる
2.作りたい機能を好きに作れる
3.外のフレームワークのバージョンに影響されない
4.作る人のスキルが上がる

 

逆にデメリットも当然あります。

 

自社フレームワーク作るデメリット
1.学習コストが掛かる
2.外注にお願いしにくい
3.工数が足りないからといって、すぐに即戦力を継ぎ足しにくい
4.フレームワーク自体を作るコストが掛かる

 

これらの話をしてみたいと思います。

 

 

cakePHPを使って

なぜ私が自分でフレームワークを書こうと思ったのかということを書いてみたいと思います。数年前、私は別の会社でcakePHPを使ってサイトを作っていました。最初はすごく便利だったのですが、使っていくとだんだん不便な点が出てきたのです。

 

cakePHPの不便な点
1.バージョンアップが頻繁で、情報が追いにくい
2.スケールアウトが出来ない
3.直感的でない仕様で、その仕様を追うのに終始引きずり回される
4.構造化を取りにくく仕様変更に弱い

 

 

フレームワーク自身の仕様変更

cakePHPはバージョンアップが頻繁で、仕様がコロコロ変わり、検索をしてもどのバージョンの情報なのか分からなくなってしまい、こうすればバージョンアップに対応出来るという情報に振り回されるようになったのです。今から考えると開発バージョンを決め打ちにすればいいだけなのですが、当時初心者だった私は最新版を使わないことの理由がわかりませんでした。なので、開発中に何度か引きずり回されて、便利なはずなのに面倒だと思った記憶があります。

 

 

スケールアウト出来ない

 

スケールが出来ないというのは、そもそもcakePHPが大規模に対応したフレームワークではないのですが、それでもソーシャルゲームでcakePHPを使っているところはあるようです。今はわからないですが、DBのmaster-slaveとテーブルごとに複数のマスターサーバを持つ、シャーディング等については、そもそもcakePHPはサポートしていないので、その部分は独自に書く必要があると思います。さらにcakePHPはリレーションを設定するだけで自動的にSQLを組み立ててくれるという仕組みがあるのですが、スケールを考えるとそもそもその仕組みは使えないということになります。なので、ソーシャルゲームで使おうとすると、違う方向に進もうとしているものを無理やり使おうとしているような感覚になるのです。

 

当然なのですが、cakePHPは小規模から中規模のウェブサイトを作るために作られたもので、日PVが数億のソーシャルゲームに向いていないのです。

 

cakePHPの悪いところだと思うところに、ruby on railsを意識しすぎだと思うことがあります。rubyで記述し易い書き方でも、phpだと無理やり書かないといけないのです。例えば、cakePHP1.2でモデルのfindAllが非推奨になりました。find(‘all’)と書くようにと仕様が変わったのです。でもこの仕様は誰が喜ぶんでしょう?関数ならばIDEで補完が効きますが、この仕様だとタイポしても動かしてみるまでわからないのです。

 

 

抽象化機能の不足と構造の不備

また抽象化機能にも不十分な点を感じます。cakePHPはコンポーネントという抽象化機能がありますが、これが使いにくかったです。なぜかというと、これらはモデルに依存していないコードだという前提があるからです。もちろん無理やりモデルインスタンスを呼び出して使うという使い方は出来るのですが、非推奨な使い方です。

 

ソーシャルゲームではMVCだけでは、構造化が足りないのです。私が作ったフレームワークでは使いやすくバージョンアップしていった結果、MVCA + objective MVC(正しい言い方か分からないですが)という構造になりました。これは既存のMVC構造ではモデルに依存しすぎていて、モデルを変更すると該当箇所を全部変更しなければならないけど、最初の時点で仕様が完全に決まっていないため、完璧なモデルを作ることが出来ないという矛盾がありました。それを狭い意味のajile(bakeやら)やscaffoldで誤魔化していたのを、やっぱり無理だからモデルを使わないでスクラッチ&ビルドをしやすくした上で、モデルの構造を最後に考えるという作り方です。

 

railsやcakePHPでよく見た、10分間で?ができるというチュートリアルや見世物としての、このフレームワークすげーというのはわかるんですが、実務で(ソーシャルゲームで)使えないよねということです。そもそも、完璧な仕様やDBの設計は最初に出来てるとか、ソーシャルゲームでは、フルコピーものを作る以外ではありえないと思います。

 

以上が、cakePHPでソーシャルゲームを作る際のデメリットですが、既存のフレームワークでも、基本的にはWEBを作るためのものですから、そんなに構造が変わっているわけではないです。なので、自分たちでソーシャルゲーム向けにチューンしたフレームワークというのは十分なメリットがあると思っています。

 

 

自社フレームワークのオープンソース化

 

今、作ったフレームワークをオープンソースにして公開しようと考えています。使いやすく、分かりやすくと考え作ってあります。cakePHP(rails)と基本的にクラス名、関数名、規約ルール等を似たようなものを使っていて、MVCのみを使って作ることもできるようになっています。必要であれば拡張した要素を使うというような仕組みになっています。もし良かったら、さわってみて意見を頂けると嬉しいです。

 

今オルトプラスでは、フレームワークやアジャイル開発、ソーシャルゲームに興味のあるような仲間を募集しています。このような話に興味がある人は是非遊びに来て下さい!


 - 開発者ブログ