fuelphp × hhvm サービス開発事例

33
FuelPHP × HHVM サービス開発事例 2015/10/19 株式会社インテリジェンス 大谷 祐司 1

Upload: yuji-otani

Post on 22-Jan-2018

4.010 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: FuelPHP × HHVM サービス開発事例

FuelPHP × HHVM

サービス開発事例

2015/10/19

株式会社インテリジェンス

大谷 祐司

1

Page 2: FuelPHP × HHVM サービス開発事例

2

・山口県下関出身の35歳。

・インテリジェンスの「MIIDAS」開発責任者。

・企画からアプリ、インフラまで幅広く担当。

・趣味は車とプログラミング。

・ビジュアル系バンドやってました。

自己紹介

Page 3: FuelPHP × HHVM サービス開発事例

3

5年 7年10ヶ月

→ →

メイン開発言語の経歴

Page 4: FuelPHP × HHVM サービス開発事例

今日のテーマ

FuelPHP × HHVMサービス開発事例

Page 5: FuelPHP × HHVM サービス開発事例

5

7月にリリースした転職サイトを、

FuelPHP × HHVM(Hack)で構築しました。

Page 6: FuelPHP × HHVM サービス開発事例

6

HHVM/Hackについて

簡単に説明

Page 7: FuelPHP × HHVM サービス開発事例

7

・HipHop Virtual Machineの略

・高速なPHP実行環境。

・Facebookによって開発された。

・HackというPHP拡張言語が実行できる。

HHVMとは?

Page 8: FuelPHP × HHVM サービス開発事例

8

・HHVM上で動作する、PHPと互換のある言語

・2014年にFacebookによって公開

・Facebook本体のコードはほとんどHackに移行済

・PHP5.6をベースに機能追加/削除されている

Hackとは?

Page 9: FuelPHP × HHVM サービス開発事例

・バグのないコードを迅速に書けるようになる

・エンジニアがコーディング体験を楽しめる

・「高速な動作」「大規模開発向きの仕様」

Hack言語の特徴

Page 10: FuelPHP × HHVM サービス開発事例

10

・配列(Map/Vector/Set/Pair)

・Enum

・Generics

・タイプヒンティング(NULL許可の指定)

・hh_client(静的コード解析)

独自に拡張された機能

Page 11: FuelPHP × HHVM サービス開発事例

11

and, or, endforeach, goto, globals, break N

などを非推奨にしています。

PHPソース中にHTMLを書くのもNGです。

Hack非推奨の構文

Page 12: FuelPHP × HHVM サービス開発事例

継続したバージョンアップ(8週間のサイクル)

Page 13: FuelPHP × HHVM サービス開発事例

サポートについて

→LTSを約1年間サポート。

Page 14: FuelPHP × HHVM サービス開発事例

14

Codeigniter:100%

Laravel:100%

CakePHP3:99.65%

Yii:99.78%

HHVMで動作するフレームワーク

http://hhvm.com/frameworks/

フレームワークの対応状況が公開されています。

現在27種が100%対応済みです。

Page 15: FuelPHP × HHVM サービス開発事例

15

サービスのリリースまで

Page 16: FuelPHP × HHVM サービス開発事例

OS :CentOS7

Webサーバ :nginx1.9

DB :MariaDB10.0

インフラ管理 :Ansible

Web開発言語 :Hack(hhvm3.7)

フレームワーク :FuelPHP1.7

バッチ開発言語 :Go言語

採用している技術

16

Page 17: FuelPHP × HHVM サービス開発事例

17

・PHPのノウハウを生かしながら、新しいこと

にチャレンジしたい。

・パフォーマンスが良いサービスにしたい。

・将来的に大規模になった時にも可読性がよく、

スピーディーな改修ができるようにしたい。

・PHP7がまだリリースされないので。

新規サービスでHack言語を採用

Page 18: FuelPHP × HHVM サービス開発事例

18

・最悪ダメだったらPHPに戻す。

・「前例が無いからチャレンジしてみよう」

・英語ネイティブのメンバーがいるから大丈夫。

・PHP7ではなくHackが流行る未来をイメージ。

採用における覚悟

Page 19: FuelPHP × HHVM サービス開発事例

19

・社内で採用実績が豊富。

・標準のライブラリが充実。

・PHP5.3以上推奨でHHVMと相性が良さそう。

FuelPHPを採用した理由

Page 20: FuelPHP × HHVM サービス開発事例

20

・フレームワークはPHPのまま動かす。

・アプリケーションをHackで記述。

・テンプレートエンジンはSmartyを使用。

・index.php→index.hhに名前変更して

<?hhで開始する。

・FuelPHPのDBアクセス部分を若干修正。

FuelPHP採用において

http://hhvm.com/frameworks/

Page 21: FuelPHP × HHVM サービス開発事例

21

改修ポイント①

fuel/core/classes/database/connection.php

カスタムSQLを実行する場合、 `object` が渡ってくるが `string`

にしか対応していない箇所を修正

FuelPHPを動かすために

Page 22: FuelPHP × HHVM サービス開発事例

22

改修ポイント②

fuel/core/classes/database/query/builder.php

引数のクラス指定部分をコメントアウト

FuelPHPを動かすために

Page 23: FuelPHP × HHVM サービス開発事例

23

開発ルールの統一

・定数はenumで作成。

・Arrayではなく、Vector/Mapの積極的な利用。

・タイプヒンティングは必ずつける。

・hh_clientでコミット前の構文チェック実行。

記述の統一化、可読性のUPを実現

Page 24: FuelPHP × HHVM サービス開発事例

24

セキュリティ

Dell Secure Works社のセキュリティ監査を実施。

(インフラ/アプリケーション)

Hack/Hhvmに起因するリスクはゼロでした。

Page 25: FuelPHP × HHVM サービス開発事例

25

・公式のチュートリアル

http://hacklang.org/tutorial

・仕様の読み込み

https://github.com/hhvm/hack-

langspec/blob/master/spec/00-specification-for-

hack.md

どうやって学習したか

Page 26: FuelPHP × HHVM サービス開発事例

26

・hhvmが落ちる→監視して自動で再起動。

・peclが利用できない→golangでextension記述。

・突然のCentOS6サポート停止→CentOS7へ移行。

・フォーマッターが使えない(phpfmt/php.toolsを改造)

問題点

Page 27: FuelPHP × HHVM サービス開発事例

27

ググラビリティが非常に低い。

問題点

Page 28: FuelPHP × HHVM サービス開発事例

28

使ってみての感想

・PHP経験のあるメンバーが早期に習得。

・「新しいチャレンジ」のワクワク感。

・メンバーのプログラミングスキル幅が広がる。

・「PHP以外の言語」への理解が深まる。

Hackを採用してとても良かったです。

Page 29: FuelPHP × HHVM サービス開発事例

29

おまけ:その他やっていること

FuelPHPのRedisクラスを拡張してCluster対応

→Redis3.0から実装された新機能。

複数台のサーバで分割してデータを保持。

Page 30: FuelPHP × HHVM サービス開発事例

FuelPHPをHHVMで動かすことで

便利なHack言語を利用できます。

これから言語選定をされる際、

選択肢に入れてみてはいかがでしょうか。

Page 31: FuelPHP × HHVM サービス開発事例

31

Hack言語に出会って、PHPの今後に大きな

可能性を感じました。

PHP7のリリースも控えており、PHPのこれ

からがとても楽しみです!

Page 32: FuelPHP × HHVM サービス開発事例

32

インテリジェンスでは、Hack言語を採用したプロ

ジェクトがいくつか立ち上がっています。

エンジニアを募集していますので、興味ある方は

お声がけください!

Page 33: FuelPHP × HHVM サービス開発事例

ご静聴ありがとうございました。