SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
受託開発のPhalcon
Phalconでつくるwebアプリケーションのハマりどころ
2014年08月05日(火)
株式会社ソニックムーブ 平岡 雅俊
https://www.facebook.com/masatoshi.hiraoka.16
おしながき
• 自己紹介
• Phalconについて
• Phalconでの開発実績
• 開発中にハマったあれこれ
• あとがき
自己紹介
基本情報 平岡 雅俊 28歳 独身
IT歴 9年くらい
PHP歴 5年くらい
趣味 スノーボード
生息地 千葉県浦安市
好きな食べ物 オムライス
嫌いな食べ物 ホルモン
株式会社ソニックムーブ(http://www.sonicmoov.com)
に入社してはや3年目。
入社当初はソーシャルゲーム開発をSymfony1系で、ソ
リューション事業部に移動してからはWordPressや
PhalconなどのFWを用いてシステム開発を行う。
インフラがちょっと苦手。
似顔絵アイコンは弊社デザイナーにお願いして書いてもらい
ました!似てると評判。本人はちょっと複雑。
Phalconについて
• C拡張で実装された爆速PHPフレームワーク
• 拡張性が高いので、結構自由な構成で開発できる
• DIコンテナ、Event Dispatcherなどで汎用性が高い
• 謹製テンプレート言語 “Volt”
• 公式ドキュメントがしっかりしている(英語だけど)
• ドキュメントの日本語化もすすんでます!(サボっててすみません_ノ乙(、ン、)_)
• incubator や phalcon eye などのサンプルソースが豊富
• FW自体の開発もどんどん進んでます(Zephir)
http://blog.phalconphp.com/post/57161129440/phalcon-2-0-
the-future
• Vagrant にも対応
http://phalconphp.com/en/download/vagrant
Phalconでの開発実績
FUN!FUN!DASHMAN!
株式会社JIN様との共同制作。サーバー資源の効率化を目
的として、バックエンドにPhalconを採用。
※現在はサービス終了のため、アクセスできません。
Guile
弊社が提供する第三者配信型の動画広告ソリューション。
当サービスの管理画面構築にPhalconを採用。
ACLを利用したアカウント管理などを目下実装中。
http://guile.jp/
開発中にハマったあれこれ
502 Bad Gateway
ページを表示しようとすると、“502 Bad Gateway”が発生。
事象発生初期では、別チームからVoltのテンプレートでエスケープ処理
を多様すると起こるとの情報があったが、Viewの処理直前で強制的に中
断させても起き続けた。 php-fpm が吐き出す core dump ファイルを解
析するも、原因が分からず。。
調べるなかで、どうやら pagination まわりが怪しいことが判明。
そこで、“全知全能の神”とか“先生”とか呼ばれている、とある友人に聞
いてみました!
環境
• nginx 1.4.7
• php + php-fpm 5.4.22
• Phalcon 1.2.4
• Mysql 5.6.17
その
結果
解決した
さすが全知全能の神、Google先生ステキです!
要はPhalconのバグでした。
バージョンアップでサクっと解決。
Phalconに限った話じゃないですが、バグ報告などの情報はこまめにチェックし
ないとダメですね。。
Github等でissueのやりとりが頻繁に行われているので、参考にしたり報告したり
してコミュニティの活動に参加するのも良いと思います!
参考
https://github.com/phalcon/cphalcon/issues/1385
が、
Pagination + group by
502 Bad Gatewayにならなくなって小躍りしていたところに新たな問題。
pagination を使ったページング処理中に group by を絡めた場合、なに
やら結果セットの様子がおかしい。。
早速、友人に聞いてみると、以下回答が返ってきた。
https://github.com/phalcon/cphalcon/issues/2065
どうやらこれもバグらしい。※2014年8月現在では修正されている模様(FBが早いのもイ
イ!)
内容としては、paginationが返す結果セット数がgroup byによってグ
ルーピングされる以前の数字なっているというもの。
仕方がないので、paginationのオブジェクトをちょっと拡張、ついでに
behaviorっぽくしてみた。
PaginationTrait.php
Pagination の各プロパティを計算して再セット
Trait として Model の振る舞い(behavior)を定義
Products.php
idでグルーピング
生成した Paginator オブジェクトを操作
PaginationTrait を利用したページネーションの実装例
QueryBuilder + Join
Phalcon では QueryBuilder を使ってSQLを構築したりできます。
ただ、このドキュメントを見てそのまま利用しようとすると、Model が見つ
からない旨のエラーメッセージが表示されます。
Join 等でモデルを指定する時は必ず Namespace 込みのフルパス
(?)で指定する必要があります。
例えば Namespace が Sonicmoov であれば次のようになります。
正直、incubator や 公式以外のサンプルソースを見れば、すぐ分かる問
題なんですが、自分はハマりました。。30分くらいハマりました。。
ちなみに Model の指定時にaliasを設定することによって、任意の名前
で呼び出すこともできます。
headerが出力されない
参考
https://github.com/phalcon/cphalcon/issues/2539
Locationヘッダーを出力して終了したつもりでも、flushしないと出力され
ない問題。
ココにflush()を入れる
Validation + StringLength + UTF-8
参考
https://github.com/phalcon/cphalcon/issues/971
PhalconのStringLengthValidationでは、mbstringモジュールが有効な
場合は内部的にmb_strlen()を利用するように書かれています。
が、mb_internal_encoding(“utf-8”);を指定しないと、文字数カウントがう
まくいかず、正常なバリデーション結果が得られません。
その他
他にも色々とハマりましたが、全体的に Model の実装周りでつまづいた
ことが多かったように思います。
元々 Symfony を使っていて、Propel に慣れていたせいもあってか、「で
きるだろう」と思ったことができなかったり、やり方を見つけるまでに時間
がかかりました。。
確かに公式マニュアルは充実していますが、要所々をかいつまんだ説
明になっていることも多く、Cの実装部分を覗いたり、他に同じことを実装
しているソースコードを読んだりして、気づく点が多かったと思います。
そういった意味でも、これからどんどん Phalcon ユーザーが増えて、自
分の為これから Phalcon を始めよう!って人の為に情報を共有してもら
えると良いかと思います!
※あと公式マニュアルの翻訳ガンバります _ノ乙(、ン、)_
あとがき
Phalconを使ってみて
• 学習コスト
• 構成の自由度
• デフォルトで搭載されている機能
• パフォーマンス
最後に
株式会社ソニックムーブでは、新技術が大好物な
Webエンジニアを募集しております!
Phalcon に限らず、AWS や Docker などのインフラでも、新技術に対して
前向きな会社で働きたい人は、是非お声がけ下さい!
http://www.sonicmoov.com/recruit/system-engineer/
詳しくはこちら!
ご清聴ありがとうございました!

Más contenido relacionado

Was ist angesagt?

Firefox OS Updates 201311
Firefox OS Updates 201311Firefox OS Updates 201311
Firefox OS Updates 201311dynamis
 
Firefox OS 1.0 Application Development
Firefox OS 1.0 Application DevelopmentFirefox OS 1.0 Application Development
Firefox OS 1.0 Application Developmentdynamis
 
Firefox os hackathon
Firefox os hackathonFirefox os hackathon
Firefox os hackathondynamis
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalkShozo Okada
 
Monacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめMonacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめアシアル株式会社
 
次世代プラットフォームでのHTML5アプリ開発 Firefox OS/Ubuntu Touch
次世代プラットフォームでのHTML5アプリ開発 Firefox OS/Ubuntu Touch次世代プラットフォームでのHTML5アプリ開発 Firefox OS/Ubuntu Touch
次世代プラットフォームでのHTML5アプリ開発 Firefox OS/Ubuntu TouchHonma Masashi
 
Web is the OS (KDDI mugen Labo)
Web is the OS (KDDI mugen Labo)Web is the OS (KDDI mugen Labo)
Web is the OS (KDDI mugen Labo)dynamis
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Pathdynamis
 
Kilimanjaro Event
Kilimanjaro EventKilimanjaro Event
Kilimanjaro Eventdynamis
 

Was ist angesagt? (10)

Firefox OS Updates 201311
Firefox OS Updates 201311Firefox OS Updates 201311
Firefox OS Updates 201311
 
Firefox OS 1.0 Application Development
Firefox OS 1.0 Application DevelopmentFirefox OS 1.0 Application Development
Firefox OS 1.0 Application Development
 
Firefox os hackathon
Firefox os hackathonFirefox os hackathon
Firefox os hackathon
 
2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk2011_9_9_AIR_LightningTalk
2011_9_9_AIR_LightningTalk
 
Monacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめMonacaによるモバイルアプリ開発ことはじめ
Monacaによるモバイルアプリ開発ことはじめ
 
PhucSon Software Company - Image Present
PhucSon Software Company - Image PresentPhucSon Software Company - Image Present
PhucSon Software Company - Image Present
 
次世代プラットフォームでのHTML5アプリ開発 Firefox OS/Ubuntu Touch
次世代プラットフォームでのHTML5アプリ開発 Firefox OS/Ubuntu Touch次世代プラットフォームでのHTML5アプリ開発 Firefox OS/Ubuntu Touch
次世代プラットフォームでのHTML5アプリ開発 Firefox OS/Ubuntu Touch
 
Web is the OS (KDDI mugen Labo)
Web is the OS (KDDI mugen Labo)Web is the OS (KDDI mugen Labo)
Web is the OS (KDDI mugen Labo)
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Path
 
Kilimanjaro Event
Kilimanjaro EventKilimanjaro Event
Kilimanjaro Event
 

Andere mochten auch

3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISPYamaYamamoto
 
PHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件についてPHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件について健治郎 安井
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~leverages_event
 
Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門leverages_event
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4アシアル株式会社
 
Dependency management in PHP & ZendFramework 2
Dependency management in PHP & ZendFramework 2Dependency management in PHP & ZendFramework 2
Dependency management in PHP & ZendFramework 2Kirill Chebunin
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniterYuya Matsushima
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaHidenori Goto
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
PHPUnitでリファクタリング
PHPUnitでリファクタリングPHPUnitでリファクタリング
PHPUnitでリファクタリングTakako Miyagawa
 
Codeigniter3フレームアップデート
Codeigniter3フレームアップデートCodeigniter3フレームアップデート
Codeigniter3フレームアップデートtomohiro kitaura
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにAtsuhiro Kubo
 
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話Shohei Tai
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントnoldor
 
Vue.js for HIKARABO
Vue.js for HIKARABOVue.js for HIKARABO
Vue.js for HIKARABOHiroto Murai
 
Symfony2でMongoDBと仲良くする方法
Symfony2でMongoDBと仲良くする方法Symfony2でMongoDBと仲良くする方法
Symfony2でMongoDBと仲良くする方法Koji Iwazaki
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf Conference
 
Zend四十八手シリーズ Zend_Cache Zend_Paginator
Zend四十八手シリーズ Zend_Cache Zend_PaginatorZend四十八手シリーズ Zend_Cache Zend_Paginator
Zend四十八手シリーズ Zend_Cache Zend_PaginatorYusuke Ando
 

Andere mochten auch (20)

3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP
 
PHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件についてPHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件について
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
 
Dependency management in PHP & ZendFramework 2
Dependency management in PHP & ZendFramework 2Dependency management in PHP & ZendFramework 2
Dependency management in PHP & ZendFramework 2
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
PHP勉強会 #51
PHP勉強会 #51PHP勉強会 #51
PHP勉強会 #51
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
PHPUnitでリファクタリング
PHPUnitでリファクタリングPHPUnitでリファクタリング
PHPUnitでリファクタリング
 
はじめてのSymfony2
はじめてのSymfony2はじめてのSymfony2
はじめてのSymfony2
 
Codeigniter3フレームアップデート
Codeigniter3フレームアップデートCodeigniter3フレームアップデート
Codeigniter3フレームアップデート
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
 
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
 
Vue.js for HIKARABO
Vue.js for HIKARABOVue.js for HIKARABO
Vue.js for HIKARABO
 
Symfony2でMongoDBと仲良くする方法
Symfony2でMongoDBと仲良くする方法Symfony2でMongoDBと仲良くする方法
Symfony2でMongoDBと仲良くする方法
 
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
 
Zend四十八手シリーズ Zend_Cache Zend_Paginator
Zend四十八手シリーズ Zend_Cache Zend_PaginatorZend四十八手シリーズ Zend_Cache Zend_Paginator
Zend四十八手シリーズ Zend_Cache Zend_Paginator
 

Ähnlich wie 受託開発のPhalcon

SORACOM AirをつないだRaspberryPiをlittleBits+Milkcocoaで遠隔OFFするボタンをつくった話
SORACOM AirをつないだRaspberryPiをlittleBits+Milkcocoaで遠隔OFFするボタンをつくった話SORACOM AirをつないだRaspberryPiをlittleBits+Milkcocoaで遠隔OFFするボタンをつくった話
SORACOM AirをつないだRaspberryPiをlittleBits+Milkcocoaで遠隔OFFするボタンをつくった話Seigo Tanaka
 
情報共有ツールお悩みNight #1 「情報共有ツール導入することがある私が導入されるときの話(とくに初動面)」
情報共有ツールお悩みNight #1 「情報共有ツール導入することがある私が導入されるときの話(とくに初動面)」情報共有ツールお悩みNight #1 「情報共有ツール導入することがある私が導入されるときの話(とくに初動面)」
情報共有ツールお悩みNight #1 「情報共有ツール導入することがある私が導入されるときの話(とくに初動面)」Seigo Tanaka
 
20分でSymfony@OSC名古屋
20分でSymfony@OSC名古屋20分でSymfony@OSC名古屋
20分でSymfony@OSC名古屋Shingo Nakamura
 
The tale of I and python / Python とのはなし
The tale of I and python / Python とのはなしThe tale of I and python / Python とのはなし
The tale of I and python / Python とのはなしTakanori Suzuki
 
PHP7がリリースされたいま、 改めてHackについて考える。
PHP7がリリースされたいま、 改めてHackについて考える。PHP7がリリースされたいま、 改めてHackについて考える。
PHP7がリリースされたいま、 改めてHackについて考える。Yuji Otani
 
Samurai Framework 紹介
Samurai Framework 紹介Samurai Framework 紹介
Samurai Framework 紹介智史 木内
 
私的にチャットbotを導入してみてしばらく経ったのであれこれ話す(前半)
私的にチャットbotを導入してみてしばらく経ったのであれこれ話す(前半)私的にチャットbotを導入してみてしばらく経ったのであれこれ話す(前半)
私的にチャットbotを導入してみてしばらく経ったのであれこれ話す(前半)Seigo Tanaka
 

Ähnlich wie 受託開発のPhalcon (7)

SORACOM AirをつないだRaspberryPiをlittleBits+Milkcocoaで遠隔OFFするボタンをつくった話
SORACOM AirをつないだRaspberryPiをlittleBits+Milkcocoaで遠隔OFFするボタンをつくった話SORACOM AirをつないだRaspberryPiをlittleBits+Milkcocoaで遠隔OFFするボタンをつくった話
SORACOM AirをつないだRaspberryPiをlittleBits+Milkcocoaで遠隔OFFするボタンをつくった話
 
情報共有ツールお悩みNight #1 「情報共有ツール導入することがある私が導入されるときの話(とくに初動面)」
情報共有ツールお悩みNight #1 「情報共有ツール導入することがある私が導入されるときの話(とくに初動面)」情報共有ツールお悩みNight #1 「情報共有ツール導入することがある私が導入されるときの話(とくに初動面)」
情報共有ツールお悩みNight #1 「情報共有ツール導入することがある私が導入されるときの話(とくに初動面)」
 
20分でSymfony@OSC名古屋
20分でSymfony@OSC名古屋20分でSymfony@OSC名古屋
20分でSymfony@OSC名古屋
 
The tale of I and python / Python とのはなし
The tale of I and python / Python とのはなしThe tale of I and python / Python とのはなし
The tale of I and python / Python とのはなし
 
PHP7がリリースされたいま、 改めてHackについて考える。
PHP7がリリースされたいま、 改めてHackについて考える。PHP7がリリースされたいま、 改めてHackについて考える。
PHP7がリリースされたいま、 改めてHackについて考える。
 
Samurai Framework 紹介
Samurai Framework 紹介Samurai Framework 紹介
Samurai Framework 紹介
 
私的にチャットbotを導入してみてしばらく経ったのであれこれ話す(前半)
私的にチャットbotを導入してみてしばらく経ったのであれこれ話す(前半)私的にチャットbotを導入してみてしばらく経ったのであれこれ話す(前半)
私的にチャットbotを導入してみてしばらく経ったのであれこれ話す(前半)
 

受託開発のPhalcon