初めまして、@suzukiです。2016年の1月からメルカリのサーバサイド・エンジニアとして働いていて、今は主にPHPを書いています。ときどきJavaScriptが書きたくなるので、最近は個人活動としてCrowiへpull requestを投げたりもしています。
発表した内容について
2016年5月21日に開催された「PHPカンファレンス福岡2016」で「Guzzle Promiseを使った 非同期処理によるAPIコールの高速化」というトークをしてきましたので、この場を借りて報告します。
スライド中でも触れていますが、GuzzleとはPHPで実装されたHTTPクライアントのライブラリです。Guzzle Promiseは、そのGuzzleから利用されているライブラリのことです。
この話は「これはPHPでは超えられない壁なのかも知れない!?」と思った私が、「Guzzleという素晴らしいライブラリを活用したら、PHPでもどうにかできるじゃん!!」という結論に至るまでのストーリーを元にしています。
また、私が技術調査をしていた時にハマった道筋を再現したスライドになっています。そのため、結論に至るまでが少し冗長かも知れませんが、試してみて失敗して悩んだ時の話も入っていますので、そのあたりを追体験して楽しんで(?)もらえれば良いかなと思っています。
なお、このスライド中に出てくるサンプルコードは GitHub でも公開しています。こちらのコードを実際に動かして頂くことで、よりリアルな追体験ができますので、ぜひ実行してみてください。
発表してみて
このトークはかなりニッチな領域だと思っていたので、カンファレンス参加者のみなさんに来て頂けるのかが不安だったのですが、多くの方に出席いただいたので、ひと安心しました。
ただし、もっと大事なのは「聞いて意義のある話だったかどうか」なので、トーク後のみなさんの反応が心配でした。懇親会などでは「APIコール部分のリファクタリング中だったので使えそう」だとか「外部APIを叩いているところを高速化できそう」といったありがたいレスポンスをいくつか頂くことができ、こちらもひと安心できました。
まとめ、もしくは、更なる高速化!?
このようにPHPとGuzzleの領域でもAPIコールの高速化は可能なのですが、メルカリにはAPIコールを高速化するWidebulletというミドルウェアもあります。
今回はPHP+Guzzleの構成で「いま必要とされるスピード」は確保できたので、Widebulletを利用しませんでしたが、更なる高速化が必要な場合には組み合わせて使う方法を研究していきたいと思っています。
ということで、メルカリでは「PHPじゃ無理じゃね?」と思われる領域を攻略するエンジニアを含め、たくさんの職種を募集しています。ご興味あれば採用情報のページをご覧ください。