SlideShare a Scribd company logo
1 of 31
Download to read offline
HHVM/Hack を本番投入した話
2018/4/20@KenjiroKubota
Pro le
Kenjiro Kubota
istyle.inc
favorite: PHP Javascript ...Hack!
この中でHackを書いている|書いたことがある人
この中でHHVM環境を本番で使ってる人
アイスタイルでHHVM/Hackを採用した経緯
いくつかの社内サービスAPIをまとめるProxyのようなサーバーサイ
ドアプリケーションが必要だった。
アイスタイルでHHVM/Hackを採用した経緯
いくつかの社内サービスAPIをまとめるProxyのようなサーバーサイ
ドアプリケーションが必要だった。
Golangは社内事例が既にいくつもあった。
アイスタイルでHHVM/Hackを採用した経緯
いくつかの社内サービスAPIをまとめるProxyのようなサーバーサイ
ドアプリケーションが必要だった。
Golangは社内事例が既にいくつもあった。
開発担当者(私)がPHPer。PHP愛にあふれていた
アイスタイルでHHVM/Hackを採用した経緯
いくつかの社内サービスAPIをまとめるProxyのようなサーバーサイ
ドアプリケーションが必要だった。
Golangは社内事例が既にいくつもあった。
開発担当者(私)がPHPer。PHP愛にあふれていた
でもPHPで並列でAPIをコールするのがつらそう
あ、Hackなら並列でAPIコールできるはず
アイスタイルでHHVM/Hackを採用した経緯
いくつかの社内サービスAPIをまとめるProxyのようなサーバーサイ
ドアプリケーションが必要だった。
Golangは社内事例が既にいくつもあった。
開発担当者(私)がPHPer。PHP愛にあふれていた
でもPHPで並列でAPIをコールするのがつらそう
部長が二つ返事でOKだったので採用
あとは部長が社内的にパワープレイで・・・
フレームワーク選定
とくにこだわりもなく、HHVM上で動くものならなんでもよかっ
た。
とはいえあまり大げさなFWは不要
Lumen, Silex, Slim3, ZendExpressive
SymfonyはHHVMのサポートやめたって聞いたのでLumen除外
ZendExpressiveは何回か書いたことあるのですぐに作れそう
ZendExpressiveを採用
最新版のZendExpressiveがHHVM上で動かない
開発当初のv2系がHHVM上で動作しませんでした。
v1系に落としたところ問題なく動作したので開発続行
IDE
HackはPHPer愛用のPHPStormでは一切補完が効かない
Facebook社製AtomPluginのNuclideかVisualStudioCodeの
HackPluginがオススメ
-(というかそれしか選択肢が無い)
後者の場合はローカルにHHVMをインストールしないとコードジャ
ンプできません。(たぶん)
Windowsで開発するのがだいぶ辛いです。
Dir構成
├─config
│ └─autoload
├─data
│ └─cache
├─public
│ └─apidoc
├─src
│ ├─Action
│ ├─Client
│ ├─Entity
│ ├─Exception
│ ├─Foundation
│ ├─Middleware
│ ├─Repository
│ ├─Service
│ ├─UseCase
│ └─ValueObject
├─storage
│ └─logs
└─test
処理の流れとしては
Middleware -> Action -> Service or UseCase -> Repository -> Client
ActionClass層以下はほぼほぼAsync関数で実装していて、各APIコール
のレスポンス時間を無駄にしない。
Action Class
<?hh
final class ExampleAction
{
public function __construct(
private ExampleService $exampleService
) {}
public function __invoke(
ServerRequestInterface $request,
ResponseInterface $response,
?callable $next = null
): JsonResponse {
$query = (array) $request->getQueryParams();
$example = HHAsiojoin($this->exampleService->get((string)$query['hoge']));
$res = [
'count'=> $example->count(),
'hoge' => $example->toArray()
];
return new JsonResponse($res);
}
}
public function __construct(
private ExampleService $exampleService
) {}
はPHPの以下に相当
private $exampleService;
public function __construct(ExampleService $exampleService) {
$this->exampleService = $exampleService;
}
Async function
$example = HHAsiojoin($this->exampleService->get((string)$query['hoge']));
$this->exampleService->get()
この関数はasync関数となっていて、Awaitable型が返却される。
async function get(string $hoge): Awaitable<Map>
その際には HHAsiojoin() で受け取ることで非同期から同期的な処理に
することができる。
感覚としてはjavascriptのPromiseっぽい?
Collection
$example = HHAsiojoin($this->exampleService->get((string)$query['hoge']));
$res = [
'count'=> $example->count(),
'hoge' => $example->toArray()
];
Hackが独自で持っている配列の拡張
Vector , ImmVector , Map , ImmMap , Set , ImmSet , Pair
上の例では $example は Map 型になるので ->count() や ->toArray() 関数を持
っている。(便利)
落とし穴その壱
foreachによるイテレートはブロッキングする
foreachの中でawaitで受け取るパターン
$lists の一つ一つの値を使って並列にAPIをコールしたとする。
foreach($lists as $list) {
$array[] = await $this->getDetail($list);
}
一見非同期的に getDetail() が実行されるかと思いきや、1回ループが
回るたびにawaitを待つような挙動になるのでPHPと変わらず遅い
そういう場合は以下のようにするとブロッキングしない
async function getLists(Vector $lists): Awaitable<Map> {
$handle = $lists->map($list ==> $this->getDetail($list));
return await HHAsiom($handle);
}
(追記)
多分以下でも大丈夫
(Lamdaの書き方がかっこよかったので使ってみたかったマン)
foreach($lists as $list) {
$array[] = $this->getDetail($list);
}
return await HHAsiom($array);
落とし穴その弐
HHAsiocurl_execでHHVMがクラッシュ
どうなっていたのか(再掲)
HHAsiocurl_exec が内部で利用している curl_multi_await という
HHVM(C++)関数でレスポンスが遅いエンドポイントがある場合に
Abortするバグがあった。
PHPのリクエスト、レスポンスの処理とは違い、HHVMではレスポン
スを返した後もこの関数が実行され続けてしばらくすると落ちる挙動に
なっていた
このため、どのタイミングでHHVMがクラッシュするのかの把握が遅
れた・・・
1/5に修正される(再掲)
c++で実装していた curl_multi_await をhack実装に変更
async function curl_multi_await(
resource $mh,
float $timeout = 1.0,
): Awaitable<int> {
$finish_by = microtime(true) + $timeout;
do {
$result = curl_multi_select($mh, 0.0);
if ($result !== 0) {
return $result;
}
await HHAsiolater();
} while (microtime(true) < $finish_by);
return 0;
}
現在の最新ver3.25.2には修正反映済み
PHPerkaigi2018時点では反映されてませんでした。
Hackの良かったところ
Collection型が地味に便利
enumがある!(PHPには言語的にはない)
Pipe Operatorがいい!
f() |> g($$) |> h(5, $$) === h(5, g(f()))
無名関数をしゅっとかけるLamdaが良い
<?hh
$user = 'Joel';
$greeting = () ==> 'Hello '.$user; // Hello Joel
Hackを導入してみて...
PHPに似ているのはPHPerにとっては学習コストがほぼゼロ
(ゼロとは言ってない)
PHPでもう少しこう書けたらいいな、みたいなことができて良い
PHP + JavascriptみたいなノリでAPIの並列コールができてしまっ
た。
バグを踏み抜くと辛い
どんどん新しい要素が盛り込まれていくので楽しみではある
thanks:)

More Related Content

What's hot

LaravelでAPI定義を管理する
LaravelでAPI定義を管理するLaravelでAPI定義を管理する
LaravelでAPI定義を管理するKenjiro Kubota
 
FuelPHPでSentry導入
FuelPHPでSentry導入FuelPHPでSentry導入
FuelPHPでSentry導入fagai
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Masashi Shinbara
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使うMasashi Shinbara
 
Vagrant入門以前
Vagrant入門以前Vagrant入門以前
Vagrant入門以前katanyan
 
PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行Yasuo Ohgaki
 
開発現場で活用するVagrant
開発現場で活用するVagrant開発現場で活用するVagrant
開発現場で活用するVagrantMasashi Shinbara
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Kenjiro Kubota
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装Kenjiro Kubota
 
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方Yuta Matsumura
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話Daijiro Abe
 
Vagrant - 最近流行ってるらしいけど何者?
Vagrant - 最近流行ってるらしいけど何者?Vagrant - 最近流行ってるらしいけど何者?
Vagrant - 最近流行ってるらしいけど何者?Yoshinori Nakanishi
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようMasashi Shinbara
 
20191003 classi night-04
20191003 classi night-0420191003 classi night-04
20191003 classi night-04Akihiko Kigure
 
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTipsKenjiro Kubota
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Shogo Kawahara
 
RespClient - Minimal Redis Client for PowerShell
RespClient - Minimal Redis Client for PowerShellRespClient - Minimal Redis Client for PowerShell
RespClient - Minimal Redis Client for PowerShellYoshifumi Kawai
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 

What's hot (20)

LaravelでAPI定義を管理する
LaravelでAPI定義を管理するLaravelでAPI定義を管理する
LaravelでAPI定義を管理する
 
FuelPHPでSentry導入
FuelPHPでSentry導入FuelPHPでSentry導入
FuelPHPでSentry導入
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使う
 
Vagrant入門以前
Vagrant入門以前Vagrant入門以前
Vagrant入門以前
 
PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行PHP5.6からPHP7.0への移行
PHP5.6からPHP7.0への移行
 
開発現場で活用するVagrant
開発現場で活用するVagrant開発現場で活用するVagrant
開発現場で活用するVagrant
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装
 
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話
 
Vagrant - 最近流行ってるらしいけど何者?
Vagrant - 最近流行ってるらしいけど何者?Vagrant - 最近流行ってるらしいけど何者?
Vagrant - 最近流行ってるらしいけど何者?
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみよう
 
Word bench7月号
Word bench7月号Word bench7月号
Word bench7月号
 
20191003 classi night-04
20191003 classi night-0420191003 classi night-04
20191003 classi night-04
 
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
 
RespClient - Minimal Redis Client for PowerShell
RespClient - Minimal Redis Client for PowerShellRespClient - Minimal Redis Client for PowerShell
RespClient - Minimal Redis Client for PowerShell
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 

Similar to HHVM/Hackを本番投入した話

Heroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションHeroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションMasashi Shinbara
 
php-timecopを実戦投入してみた
php-timecopを実戦投入してみたphp-timecopを実戦投入してみた
php-timecopを実戦投入してみたYoshio Hanawa
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例Yusuke Naka
 
PHPべんちまーく
PHPべんちまーくPHPべんちまーく
PHPべんちまーくchichi1091
 
Phpcon2020sponsor lt php8_on_lambda
Phpcon2020sponsor lt php8_on_lambdaPhpcon2020sponsor lt php8_on_lambda
Phpcon2020sponsor lt php8_on_lambdaHideo Kashioka
 
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話Yuki Kanazawa
 
Facebook対応と大規模サイト移転のトライ&エラー
Facebook対応と大規模サイト移転のトライ&エラーFacebook対応と大規模サイト移転のトライ&エラー
Facebook対応と大規模サイト移転のトライ&エラーGaryuten
 
Server pushnavigations
Server pushnavigationsServer pushnavigations
Server pushnavigationsivoryworks .
 
appengine ja night #25 Google App Engine for PHP
appengine ja night #25 Google App Engine for PHPappengine ja night #25 Google App Engine for PHP
appengine ja night #25 Google App Engine for PHPRyo Yamasaki
 
Terraform with Bitbucket pipeline
Terraform with Bitbucket pipelineTerraform with Bitbucket pipeline
Terraform with Bitbucket pipelineMasatomo Ito
 
Datadog monitoring with HashiCorp
Datadog monitoring with HashiCorpDatadog monitoring with HashiCorp
Datadog monitoring with HashiCorpMasatomo Ito
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12Ryuji Yamashita
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo!デベロッパーネットワーク
 
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったHironobu Saitoh
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Yahoo!デベロッパーネットワーク
 

Similar to HHVM/Hackを本番投入した話 (20)

20190608LT資料
20190608LT資料20190608LT資料
20190608LT資料
 
Heroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーションHeroku で作る
スケーラブルな 
PHP アプリケーション
Heroku で作る
スケーラブルな 
PHP アプリケーション
 
php-timecopを実戦投入してみた
php-timecopを実戦投入してみたphp-timecopを実戦投入してみた
php-timecopを実戦投入してみた
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例
 
PHPべんちまーく
PHPべんちまーくPHPべんちまーく
PHPべんちまーく
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
Phpcon2020sponsor lt php8_on_lambda
Phpcon2020sponsor lt php8_on_lambdaPhpcon2020sponsor lt php8_on_lambda
Phpcon2020sponsor lt php8_on_lambda
 
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
 
Facebook対応と大規模サイト移転のトライ&エラー
Facebook対応と大規模サイト移転のトライ&エラーFacebook対応と大規模サイト移転のトライ&エラー
Facebook対応と大規模サイト移転のトライ&エラー
 
PSGIへの誘い
PSGIへの誘いPSGIへの誘い
PSGIへの誘い
 
Server pushnavigations
Server pushnavigationsServer pushnavigations
Server pushnavigations
 
appengine ja night #25 Google App Engine for PHP
appengine ja night #25 Google App Engine for PHPappengine ja night #25 Google App Engine for PHP
appengine ja night #25 Google App Engine for PHP
 
Xhprof
XhprofXhprof
Xhprof
 
Terraform with Bitbucket pipeline
Terraform with Bitbucket pipelineTerraform with Bitbucket pipeline
Terraform with Bitbucket pipeline
 
Datadog monitoring with HashiCorp
Datadog monitoring with HashiCorpDatadog monitoring with HashiCorp
Datadog monitoring with HashiCorp
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 

More from Kenjiro Kubota

いまどき(これから)のPHP開発
いまどき(これから)のPHP開発いまどき(これから)のPHP開発
いまどき(これから)のPHP開発Kenjiro Kubota
 
アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演) アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演) Kenjiro Kubota
 
アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例Kenjiro Kubota
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Kenjiro Kubota
 
フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界Kenjiro Kubota
 
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組みPHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組みKenjiro Kubota
 
カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話Kenjiro Kubota
 
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たFirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たKenjiro Kubota
 
introducing vue-wait-component
introducing vue-wait-componentintroducing vue-wait-component
introducing vue-wait-componentKenjiro Kubota
 
HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話Kenjiro Kubota
 
2017: A CSS Design Odyssey
2017: A CSS Design Odyssey2017: A CSS Design Odyssey
2017: A CSS Design OdysseyKenjiro Kubota
 
Introducing hhvm hack-async
Introducing hhvm hack-asyncIntroducing hhvm hack-async
Introducing hhvm hack-asyncKenjiro Kubota
 
土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!Kenjiro Kubota
 
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦うViewを活用して複雑化と戦う
Viewを活用して複雑化と戦うKenjiro Kubota
 
Laravel aspectで関心の分離
Laravel aspectで関心の分離Laravel aspectで関心の分離
Laravel aspectで関心の分離Kenjiro Kubota
 

More from Kenjiro Kubota (16)

いまどき(これから)のPHP開発
いまどき(これから)のPHP開発いまどき(これから)のPHP開発
いまどき(これから)のPHP開発
 
アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演) アイスタイル特設サイトにおけるVue.js導入事例(再演)
アイスタイル特設サイトにおけるVue.js導入事例(再演)
 
gRPC入門
gRPC入門gRPC入門
gRPC入門
 
アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例アイスタイル特設サイトにおけるVue.jsの導入事例
アイスタイル特設サイトにおけるVue.jsの導入事例
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
 
フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界フロントエンドエンジニアが知るべきFirebaseの世界
フロントエンドエンジニアが知るべきFirebaseの世界
 
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組みPHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み
 
カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話カメラを利用したアプリを作って約1000人で遊んだ話
カメラを利用したアプリを作って約1000人で遊んだ話
 
FirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見たFirebaseとNuxtでLPを作って見た
FirebaseとNuxtでLPを作って見た
 
introducing vue-wait-component
introducing vue-wait-componentintroducing vue-wait-component
introducing vue-wait-component
 
HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話HackのAsyncCurlで死んだ話
HackのAsyncCurlで死んだ話
 
2017: A CSS Design Odyssey
2017: A CSS Design Odyssey2017: A CSS Design Odyssey
2017: A CSS Design Odyssey
 
Introducing hhvm hack-async
Introducing hhvm hack-asyncIntroducing hhvm hack-async
Introducing hhvm hack-async
 
土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!土日でLineみたいなチャット作ってきた!
土日でLineみたいなチャット作ってきた!
 
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦うViewを活用して複雑化と戦う
Viewを活用して複雑化と戦う
 
Laravel aspectで関心の分離
Laravel aspectで関心の分離Laravel aspectで関心の分離
Laravel aspectで関心の分離
 

HHVM/Hackを本番投入した話