fuelphp × hhvm サービス開発事例
TRANSCRIPT
FuelPHP × HHVM
サービス開発事例
2015/10/19
株式会社インテリジェンス
大谷 祐司
1
2
・山口県下関出身の35歳。
・インテリジェンスの「MIIDAS」開発責任者。
・企画からアプリ、インフラまで幅広く担当。
・趣味は車とプログラミング。
・ビジュアル系バンドやってました。
自己紹介
3
5年 7年10ヶ月
→ →
メイン開発言語の経歴
今日のテーマ
FuelPHP × HHVMサービス開発事例
5
7月にリリースした転職サイトを、
FuelPHP × HHVM(Hack)で構築しました。
6
HHVM/Hackについて
簡単に説明
7
・HipHop Virtual Machineの略
・高速なPHP実行環境。
・Facebookによって開発された。
・HackというPHP拡張言語が実行できる。
HHVMとは?
8
・HHVM上で動作する、PHPと互換のある言語
・2014年にFacebookによって公開
・Facebook本体のコードはほとんどHackに移行済
・PHP5.6をベースに機能追加/削除されている
Hackとは?
・バグのないコードを迅速に書けるようになる
・エンジニアがコーディング体験を楽しめる
・「高速な動作」「大規模開発向きの仕様」
Hack言語の特徴
10
・配列(Map/Vector/Set/Pair)
・Enum
・Generics
・タイプヒンティング(NULL許可の指定)
・hh_client(静的コード解析)
独自に拡張された機能
11
and, or, endforeach, goto, globals, break N
などを非推奨にしています。
PHPソース中にHTMLを書くのもNGです。
Hack非推奨の構文
継続したバージョンアップ(8週間のサイクル)
サポートについて
→LTSを約1年間サポート。
14
Codeigniter:100%
Laravel:100%
CakePHP3:99.65%
Yii:99.78%
HHVMで動作するフレームワーク
http://hhvm.com/frameworks/
フレームワークの対応状況が公開されています。
現在27種が100%対応済みです。
15
サービスのリリースまで
OS :CentOS7
Webサーバ :nginx1.9
DB :MariaDB10.0
インフラ管理 :Ansible
Web開発言語 :Hack(hhvm3.7)
フレームワーク :FuelPHP1.7
バッチ開発言語 :Go言語
採用している技術
16
17
・PHPのノウハウを生かしながら、新しいこと
にチャレンジしたい。
・パフォーマンスが良いサービスにしたい。
・将来的に大規模になった時にも可読性がよく、
スピーディーな改修ができるようにしたい。
・PHP7がまだリリースされないので。
新規サービスでHack言語を採用
18
・最悪ダメだったらPHPに戻す。
・「前例が無いからチャレンジしてみよう」
・英語ネイティブのメンバーがいるから大丈夫。
・PHP7ではなくHackが流行る未来をイメージ。
採用における覚悟
19
・社内で採用実績が豊富。
・標準のライブラリが充実。
・PHP5.3以上推奨でHHVMと相性が良さそう。
FuelPHPを採用した理由
20
・フレームワークはPHPのまま動かす。
・アプリケーションをHackで記述。
・テンプレートエンジンはSmartyを使用。
・index.php→index.hhに名前変更して
<?hhで開始する。
・FuelPHPのDBアクセス部分を若干修正。
FuelPHP採用において
http://hhvm.com/frameworks/
21
改修ポイント①
fuel/core/classes/database/connection.php
カスタムSQLを実行する場合、 `object` が渡ってくるが `string`
にしか対応していない箇所を修正
FuelPHPを動かすために
22
改修ポイント②
fuel/core/classes/database/query/builder.php
引数のクラス指定部分をコメントアウト
FuelPHPを動かすために
23
開発ルールの統一
・定数はenumで作成。
・Arrayではなく、Vector/Mapの積極的な利用。
・タイプヒンティングは必ずつける。
・hh_clientでコミット前の構文チェック実行。
記述の統一化、可読性のUPを実現
24
セキュリティ
Dell Secure Works社のセキュリティ監査を実施。
(インフラ/アプリケーション)
Hack/Hhvmに起因するリスクはゼロでした。
25
・公式のチュートリアル
http://hacklang.org/tutorial
・仕様の読み込み
https://github.com/hhvm/hack-
langspec/blob/master/spec/00-specification-for-
hack.md
どうやって学習したか
26
・hhvmが落ちる→監視して自動で再起動。
・peclが利用できない→golangでextension記述。
・突然のCentOS6サポート停止→CentOS7へ移行。
・フォーマッターが使えない(phpfmt/php.toolsを改造)
問題点
27
ググラビリティが非常に低い。
問題点
28
使ってみての感想
・PHP経験のあるメンバーが早期に習得。
・「新しいチャレンジ」のワクワク感。
・メンバーのプログラミングスキル幅が広がる。
・「PHP以外の言語」への理解が深まる。
Hackを採用してとても良かったです。
29
おまけ:その他やっていること
FuelPHPのRedisクラスを拡張してCluster対応
→Redis3.0から実装された新機能。
複数台のサーバで分割してデータを保持。
FuelPHPをHHVMで動かすことで
便利なHack言語を利用できます。
これから言語選定をされる際、
選択肢に入れてみてはいかがでしょうか。
31
Hack言語に出会って、PHPの今後に大きな
可能性を感じました。
PHP7のリリースも控えており、PHPのこれ
からがとても楽しみです!
32
インテリジェンスでは、Hack言語を採用したプロ
ジェクトがいくつか立ち上がっています。
エンジニアを募集していますので、興味ある方は
お声がけください!
ご静聴ありがとうございました。