Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@bitoCoffee

PHPカンファレンスに発表側で参加してみて(大阪、福岡)

みなさん、こんにちは。
12月6日を担当します。

普段PHPのカンファレンスには参加側だったり、当日スタッフ側にいるのですが。
今年は意を決してカンファレンスの発表側に立ってみようと思いました。
(大阪にはLTで連続で出ていて伝説の人と有名ですが(笑))

第ー戦、大阪のPHPカンファレンス

(http://conference.kphpug.jp/2015/)

ちょうど、今働いている会社がPhalconフレームワークを使っておりPhalconについてまとめたものを発表しようと思いました。
応募してみたらた採択されました!!
どうしようという気持ちでいっぱいでしたが、発表することができました。

発表までドタバタしていて、ちょうど家も前日に引越しを完了したというドタバタでした。
社内でも発表のチェックの時間を取って頂けたので本当に感謝しています。

大阪での発表は発表時間までドキドキで自分のスクリプトとスライドをにらめっこしながら準備していました。

いよいよ発表の時間です。

会議室には30名ほど集まっていました。
スライドをスクリーンに映し、いよいよ発表です。
手元でスクリプトを確認しながらですがなんとか25分ほど喋ったかなと思います。

まだPhalconについては触ってない方が多いような印象でしたが、
大変興味があったのと。
受けも良かったので良かったです。

社内の上長も来ていたので余計に緊張しましたw

第二戦、福岡のPHPカンファレンス

(http://phpcon.fukuoka.jp/)

ちょうど募集期間が大阪とかぶっていた気がします。
ので大阪より15分少ない15分間講演する枠に応募しました。
この時も自分の経験から早く終わっちゃうだろうと思っていましたが。。。

大阪で採択されてスライドを作り、講演した後、
福岡という形で福岡に参上しました。
(福岡でのPHPカンファレンスは今年が初めてみたいです。)

大阪のスライドのままなので尺が足りないピンチ感とともに時間がきました。
超早口と内容をコンパクトにして喋っていきましたが、しかし
時は残酷で時間を超過してしまいました。
(実際後ちょっとでスライドは終わり。。。)
本当に失敗したと思ったし、運営側にも大変申し訳なかったという思いでした。

感想

発表側に立ってみていろいろわかることがあり勉強になりました。
発表側になるということは自分の発表する内容に詳しく調べる事になりますし、
発表の仕方も勉強するわけです。

失敗してもいいのでまずは、カンファレンスの発表には気軽に応募してみよう!!
開催側も嬉しい悲鳴をあげて選定を行っていただけると思います。
そこで採択されたからには必死で資料を作って練習して本番に備えましょう!!

失敗や成功、試した事は自分の糧になって必ず返ってきますし、
自分が知っていることや技術には必ず聴きたいという人が少なからずいると思います。

2回とも楽しかったです。
次回、応募するかは微妙ですが、いろんな機会に発表側にもなれる人になっていきたいです。

スライドなど

発表原稿(追加編集あり)

それでははじめます。
今回はPHPフレームワークのPhalconについて導入部分から事例紹介とPhalconの未来についてお話しします。

 それでは私の自己紹介をいたします。

私の名前は近藤和宏と申します。

言語歴はPHP意外にもJava、Objective-Cなどをやってきました
出身は徳島県です。
私にとって大阪は上京する前の4年間 学生生活を過ごした場所です。

>ここでアンケートを取りたいと思います。挙手のご協力をお願いいたします。
>Phaloconを知っていて使ったことがある方?
>知ってるけど使ったったことがない方
>Phalconをしらないという方

それぞれ数え上げる。


ご協力ありがとうございます


・使ったことがある人が多い場合
懇親会のときにまたお話ししましょう。

・使ったことがない人が多い場合
今日のセッションを聞いて、
Phalcon を一緒に始めましょう。

・知らない人がいる場合
今日のセッションを聞いて、
Phalcon を一緒に始めましょう。




では本題です!

PHPフレームワークのはやぶさ

Phalconについてです。

>>






================================

今回の !!アジェンダ!! です!!!!

今回は
まず
Phalconについて知っている人も知らない人もPhalconって何?
ということから
初めての方へPhalconのはじめ方と、
次に
Phalconの構造などをお話しします。

次に
Phalconメリットを生かした事例をご紹介したいと思います。
実際、Phalconがどのように利用されているか実例を混じえてその効果をお伝えいたします。

そして最後に
Phalconの未来よりもPHP7の登場が待ち遠しいかもしれませんが、
Phalconの未来についてお話ししたいと思っています。

よろしくお願いいたします!!!


>>

それではPhalconについての一緒に辿っていきましょう

Phalconとは造語で

PHP + はやぶさを意味するFalconから 造られました。

そのできた単語には Simple.(単純さ) Fast.(高速さ) Easy.(使いやすさ) という意味を込めているそうです。

この方はアンドレスと言います。Phalconのメインの設計者です。
2012年11月14日に最初のリリースを行いました。
現在はPhalconチームが結成され日々改善や新機能の実装などが行われています。

Phalconの特徴とはなんでしょうか?

それは

開発しやすさ と高速さと軽量さにあります。
既存のフレームワークとは違いC言語で書かれておりPHPの拡張として用いるところに違いがあります。
それによってより多くのリクエストを受け付けることができきるように設計がなされています。


公式のベンチマークではその性能が示されています。

まずはじめにリクエストレスポンス性能
次にメモリの使用量

まさに爆速!!!


>>


それではPhalconをはじめるにはどうしたらよいでしょうか?

というところをお話ししたいと思います。

まずPhalconの動作環境について

OSは

Linux/Unix/Mac
Windows

PHPのバージョンはnamespaceを使うことから5.3からサポートをしています。

OSどれからでも始めることができます。

では、簡単に始めるにはどのようにするのが

 おすすめできるかというと。

こちらです。

私は Vagrantを  お勧めします。
皆さんご存知かとは思い

説明は不要かと思いますが

 がVagrantとは仮想マシンのイメージを生成したり起動や停止を扱いやすく
、
 また設定の共有を行ったり、仮想のマシーンを保存

 共有するのに使うものです。


Vagrantの扱い方については

このセッションでは詳しく触れませんので
お調べください。



公式よりPhalconの環境が配布されておりますので

 こちらの利用をお勧めします

ダウンロードのページからダウンロードが可能です。

公式のバージョンは少し古いかもしれませんがチュートリアルを攻略するには遜色はないと思います。

公式ドキュメントのチュートリアルを一通り行ってみましょう。
最近ではドキュメントが充実してきておりパフォーマンスの改善提案やツールの使い方まで書かれています。

関心があれば家に帰ってからお試しください。


>>>


次にPhalconを使う上で構造や特徴的な仕組みや機能を知っていないとバグだと勘違いしてしまい
1日潰したりしてしまうので、、ここでは基本的なところをかいつまんでお伝えできればと思います。


・フォルダー構成や設計などそれぞれのアプリにあった自由な配置にすることが可能です。
公式ドキュメントでも太字で書かれるくらい重要なキーワードです。

これはPhalconは

 とても疎結合なフレームワークであり、

PhalconはDI(dependency injection container)が根幹にあるからです。

bootStrapを書けば動くと思います。


詳しくはチュートリアル 1: 例題で学習しよう をご確認ください。

・controller の公開したいメソッド名には Actionを後ろにつけないと反応しません。
私は 時々よく時間を無駄にします。。。
public indexAction(){
}
逆にWEBブラウザから叩くときはRouterの設定によりますが
後ろのActionは入りません。

・Controller、Model 内 で  __constract() は使いません。
使いたいときは public function initialize() を class内に宣言します


・Model 
データーベースのテーブルと1対1です

tag_db というテーブルがあるとすると

クラス名は
TagDbとします。

他にも
テーブル同士の関係を表す
hasMany 
hasOne
belongTo
hasManyToMany
がサポートされています。

クラス名は変えたいよという場合
いにしゃらいずにて書きます


・ Volt
は非常に高速でとても使い易い 
テンプレートエンジンです。
シンフォニーの Twigを拡張して作られており
Pythonのテンプレートエンジン 神社のようなものだそうです。

使用するにはDIで定義します。

このような形で実際に組むことができます。


・Controller、Model外で DIを呼び出したいとき
例えばライブラリ化や複数のModelと連携したり複雑なことを共通化したいときがくると思います。

\Phalcon\DI::getDefault()->get(“登録したDI名”);
とすれば登録したDIが取得できます。


・Phalcon だけで速くなる?かととわれれば
答えはノーです。
DBにindexを貼ったりcacheを使用したりするという
WEBにおいて基本的なことはあまりかわりがありません。

詳しくは ドキュメントの
・キャッシュによるパフォーマンス改善
・パフォーマンス改善: 次なる手は?
をご確認ください。

・英語のドキュメントばかり日本語で読みたい。
>翻訳プロジェクトがあります。
有志の方が日々翻訳作業をしています。
ご興味があれば参加してみてはいかがでしょうか?


・コマンドラインから動かしたいねんけど。
あります!

ドキュメントの
コマンドライン アプリケーションをご確認ください。

少し面倒ですが。
マニュアル記述のbootStrapを用意できればあとは問題が少ないかと思います。

bashなどに登録しておくと定期実行などに便利ですね。
#!/bin/bash
php /var/www/api/app/cli.php クラス名(Taskの前) メソッド名(Action)の前


・テストはどうするか
ドキュメントのユニットテストの項をご確認ください。
PHPUnit を取り上げています。
実際この通りやると動くことが確認できると思います。

実際PHPUnitを書くのはついついあとになりがちだったりするので、
ビルドサーバーを作ってテストを行った方が効率が上がると思います。
Jenkinsや サークルCI トラビスCIなどです。


少し脇道にそれた部分もありますが注意点や構造、一部機能の紹介でした。

=======================

それでは、Phalconの魅力

使いやすさ、
高速さ 、
軽量さ


という3拍子でサービスの拡張を続ける


ある 事例を

一緒に

 見ていきましょう!

=======================

自分が関わっているプロダクトでのPhalcon の導入事例を紹介したいと思います。

自分が関わっているプロダクトには当初ある開発エンジニアがいました

その名も闇の呪術師兼ソルジャーの I  さん

大学でPHPも学び半年間で作り上げたオレオレフレームワークをいきなり実戦に
使ったそうです。

結果 とてつもなく遅い。

そして、ユーザーからの不満の声とバグとに悩まされる日々、
拡張するにも時間がかかってまさにコードはスパゲティ。

これはヤバイ!!!


ときは少したち



一人のスーパーエンジニア A さんが現れます。


それは昨年(の出来事です。


I さん「Aさん、もっと最速のフレームワーク欲しいですね」

A さん「そうですね」

I さん 「Phalconっていうのが使えるみたいですよ」

A さん 「それは良い選択だと思います。」

このやりとりによりPhalconの導入が決定されました。

まさに、自分が関わっているプロダクトの歴史が動いた瞬間でした。


背景としてはそのとき 「PHP 最速 フレームワーク」
で検索するとPhalconしかなかったなかったようです。


導入にあたって
Phalconフレームワークを初めて触るIさんとAさん

導入の壁なかったんですか?と聞くと
私たちは英語が苦じゃなかったのでと一見すると自慢話に聞こえますが、

初めて触るものに対して
最速というキーワードに惹かれて
 若干厨二病がかかった形で採用し開発をしてこられたようです。

私どもの開発の環境は

API Phalcon
クライアント AnglarJS,iOS,Android

と

 PhalconがわはControllerとModelのみの2層とする開発スタイルで開発しています。



そしてPhalconを使い慣れてきたときにある変化がおとずれてきました。

それはなにかというと

機能拡張の難易度という壁でした。


もう少し壁の内容をお伝えしますと

もとよりFatControllerを避けていたのですが

PhalconではModelとDBが 1:1 でくっついており

なかなか機能を拡張するには見通しが悪いというものでした。


我々はこの壁を打破すべく

考えました。

ControllerとModelの間に中間層を作る

これをなにというかは開発スタイルなどによって違うかと思いますが、

サービスクラスを作って複雑なシステムの機能を容易に追加し、
機能単位でのコードの保守性が向上しました。


自分が関わっているプロダクトにおいて
Phalcon の効果はあったのでしょうか?
特に効果があった事例が2つあります。

この自分が関わっているプロダクトの事例の冒頭部分でお話しした

オレオレフレームワークとの差です。

まずは一つ目。
オレオレフレームワークにメムキャシュを入れるのに21日かかりました。
そしてこれは一部にしかすぎません。
しかし、Phalconでは2日間に短縮化できました。
まさに爆速化!!
これは、システムにたいしてレディスキャシュを追加する際にかかった時間ですが
PhalconのDIという機能とうまくキャシュをラップしている機能があるおかげです。

次に
オレオレフレームワーク 最凶API四天王と言われるものがあり
レスポンスが超絶悪いものがありました。
その中でも3つ紹介したいと思います。

自分が関わっているプロダクトでは大量のSNSの投稿データや大量の授業動画データを保有しています。
日々、サービスが成長する中で大量のデータへの検索性に欠陥が浮き彫りになってきました。

それではまず

 1300%の高速化

そして

その② 2400%の高速化

最後に

その① 7400%の高速化
平均18秒という時間が わずか 平均 0.25秒
にまで縮めることができました!!

まさに爆速化

Phalconのおかげで適切な設計&実装でききたことと
Phalconの軽さと高速さの恩恵をうけた結果です。

以上が自分が関わっているプロダクトの事例となりますが、

ここで少し宣伝をさせてください。

自分が関わっているプロダクトでは一緒に働く仲間を絶賛 募集しています。
興味のあるかたはお願いいたします。


=========================

Phalconについておさらい

それではPhaloconとは

Phalconは
開発しやすさ、
高速さ、
軽量さを備えた、スタートアップでも最速で開発できる言語です。

事例でも述べた通り爆速化!が期待できるものです。

==========================


そして最後にPhalconの歴史を触れながら

Phalconの未来を考えてみることにしましょう


2012/11/14 0.4.5
2013/3/21 1.0


そして
2015/4/17 2.0
がリリースされました。

2.0ではZephirで全面的に書き直されました。

Zephirとは
phpエクステンションを生成することに特化した開発言語で
これによりさらにPhalconの機能の開発や不具合の修正が試薬なっていそうです
PHP7 のコードの修正の恩恵もでると思われるため本当に期待大なフレームワークになることでしょう。

特徴は以下のように言われいます

C言語のようにメモリ操作を特に意識することなく安全にかけるそうです。
また
型を意識するスタイルで静的型付けできたり、PHPのように型を意識しないでかくことができ
PHPの関数を利用する事ができ
PHPを書くようにかけるそうです。

Zephir は非常に高速に動作します
図のようにC言語と同等かそれより速い処理性能を持っています。


また
Zephirは Phalcon開発チームが参画しているようで

募金を募っているようです。

目標金額3万ドルに対して4000ドル集まっています。


今年はPHPとって飛躍の年になりそうですね。
PhalconやZephirも先駆けとしてPHPの歴史を塗り替えるものだと思います。


Phalconは
開発しやすさ、
高速さ、
軽量さを備えた、スタートアップでも最速で開発でき、
未来有望のフレームワークです。


皆さんもPhalconを使って最速で開発をしましょう!


ありがとうございました!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?