EVENT REPORTイベントレポート
ヒカラボレポートとは、開催されたヒカラボにおいて、登壇者が伝えたい講演内容を記事としてまとめたものです。ご参加された方はもちろん、ヒカラボに興味があるという方も是非ご覧ください。
ヒカラボレポートとは、開催されたヒカラボにおいて、登壇者が伝えたい講演内容を記事としてまとめたものです。ご参加された方はもちろん、ヒカラボに興味があるという方も是非ご覧ください。
イベントレポートvol.36
2017/07/19(水)更新
7月16日(火)のヒカ☆ラボにご登壇いただいたのは、株式会社インテリジェンスの大谷祐司氏と杉山隆氏、そしてRetty株式会社の梅田昌太氏の3名。
インテリジェンスの新規事業チーム開発責任者である大谷氏には「FuelPHP&Hackを使ったWebサービス構築事例」を、エンジニア向けイベント情報検索サービス「dots.」の開発者である杉山氏には「PHPフレームワークLaravel 5でのサービスリニューアル実例」をテーマにお話していただきました。
話題のグルメサービス「Retty」の開発を行う梅田氏には「PHPerが支えるRettyのインフラ」というテーマで、スタートアップから現在に至るまでの、インフラ面における課題解決方法についてじっくり教えていただきました。
PHP使いの方はもちろん、Hack言語に興味のある方、現在インフラで問題を抱えている方にもぜひ読んでいただきたい内容です。
講演者プロフィール
こんにちは。インテリジェンスで新規事業チームの開発責任者を担当しています、大谷祐司です。今日は「Hack+FuelPHPによるWebサービス開発」というテーマでお話させていただきます。
HackはFacebookによって開発された、オープンソースのプログラミング言語です。HHVMという仮想マシン上で動く言語で、PHPとの互換性を持っています。弊社では2015年7月にリリースした転職サイト「MIIDAS」で、初めてHackを採用しました。
しかし、Hackというと「全然進化してないんじゃないか?」とか「単純にパフォーマンスの良いPHPでしょ?」と言われることがあります。さらには「PHPのライブラリやフレームワークがHackでは使えないから、コストがかかるのではないか」なんて声もありますね。
でも、実はこれらは全部誤解。Hack言語はすばらしい進化を遂げているんです。
Hackには大きく3つの特徴があります。1つ目はバグのないコードを迅速に書けるようになること、2つ目はエンジニアがコーディング体験を楽しめること、そして3つ目は「高速な動作」ができ「大規模開発向きの仕様」になっていることです。
「大規模開発向きの仕様」なのは、Facebookの思想を色濃く反映しているためですね。例えば、引数/戻り値の型指定ができることや、Map/Vector/Set/Pairといった独自の配列があることが特徴的です。
また、Enumが実装されていたり、hh_clientというコマンドを打つことで実行前に構文チェックを行うことができます。
さらに、Hackはバージョンアップサイクルが非常に早く、最初のバージョン3.1が出て以降、8週間に1回のペースでリリースが行われています。その都度、新機能の追加や既存機能の強化・改善等が行われ、著しい進化を遂げています。サポート面もしっかりしており、リリースされてからの約1年間はサポート期間として保障されています。
弊社では転職サイト「MIIDAS」で初めてHackを採用したとお話しましたが、海外ではFacebookをはじめ、Wikipediaやbox、WP Engineなど、影響力のある多数のWebサイトがHackを採用しています。
Wikipediaでは編集速度が2倍になり、boxではWebレスポンスが3分の1に短縮、WP Engineはレスポンスのパフォーマンスが5.6倍になったという報告が上がっています。つまり、優れたパフォーマンスを求める企業はHackを採用する傾向にあるといえます。
HackとしてHHVM上で動くフレームワークの対応状況をFacebookが公開しており、現在27種類が完全対応しているそうです。有名どころで言えば、CodeigniterやLaravelなどですね。弊社ではFuelPHPを採用しているのですが、Facebookが公開したリストには載っていませんでした。
それでは、なぜ我々がFuelPHPを採用したかというと、社内での採用実績が豊富だったというのが一番の理由です。さらに、標準のライブラリが豊富で、PHP5.3以上を前提として作られたフレームワークだったこともあり、HHVMとの相性が良さそうであったことが決め手になりました。
Hackを実際に使ってみると、PHP経験のあるメンバーであればすぐに理解して使用できるようになる、ということがわかりました。
また、長い間PHPを中心に使ってきたメンバーにとっては、今の自分のスキルを活かしながら新しいことに挑戦できるワクワク感もあったのではないかと思っています。
Hackについて調査していくうちにメンバーのプログラミングスキルもUPしていると感じていますし、Hackを採用してよかったですね。
今までPHPで培ってきたスキルや資産を活かしながら、様々なメリットを活用できるのがHackでの開発だと思っています。
インテリジェンスで「dots.」開発リーダーを担当している、杉山隆と言います。「PHPフレームワークLaravel 5でのサービスリニューアル実例」についてお話させていただきます。私たちが運営しているWebサイト「dots.」というのは、エンジニア向けの勉強会・イベント情報検索サービスです。2013年10月にリリースしまして、ユーザー数は2万人を突破しました。
現状の「dots.」は、フレームワークがCakePHP、NginxがApacheという、いわゆるリバプロ構成となっています。
私たちが今抱えている一番の問題点は「コードが汚い」ということです。消えることのないTODOコメントが大量にあったり、Viewに直接PHPコードがたくさん書かれていたり、Unitテストやテストコードはなかったり…とにかく運用しづらいんですね。
そこで、今回のリニューアルプロジェクトが始動することになったんです。
「dots.」はエンジニアのためのサービスということもあり、リニューアルの大前提として「エンジニアから見てイケてる技術を使いたい」というのがありました。あと、「もう少し新しい技術に挑戦したい」という思いもあり、Googleトレンドでの人気も高かったLaravel 5をフレームワークに選びました。
リニューアル後のサーバ構成は以下の通りです。Webサーバの構成は変わっていませんが、Adminサーバを冗長化しました。Webサーバ内にあったDBを分離し、Adminサーバで動かしていたBatchは切り出しています。
ファイル構成はWeb、Admin、Batchで全て同じrepositoryを使っています。
ルーティングに関しては、プロトコルを指定できます。’https’を指定すると’http’でアクセスしてもページが表示されません。
また、ミドルウェアを使うと全てのルートでCSRF対策を行ったり、CORS設定を追加したりすることができます。
ソーシャルログインの実装もLaravelでは簡単に行うことができます。
今回のリニューアルでBatchもLaravelで書いているのですが、追加機能はほとんど使っていません。それだけLaravelは機能が充実しています。
Artisan schedulaerという機能を使えばcronの設定が簡単にできたり、Queue機能を使って非同期処理したりできます。外部イベントの取得処理だけでなく、メールの配信処理もQueueに溜め込んで順番が来たら自動的に配信されるように設定できます。
とにかく、LaravelはWebサービスに必要な機能がなんでも揃っていますね。Redis、Cacheなどが全て使えます。関数もたくさん用意されていたり、メンテナンスモードへの切り替え機能があったりと、とても便利です。
リニューアル後は「イベントのタグ付け機能の精度向上」や「Google Analyticsのデータを使った解析基盤の構築」などに力を入れていく予定です。
こんにちは、Rettyの梅田です。本日のテーマは「PHPerが支えるRettyのインフラ」です。スタートアップから成長していくにあたって、私たちがどんなところでつまずいて、どんなところで歯を食いしばって頑張ってきたかということをメインにお伝えしたいと思います。
私たちが開発・運営している実名型グルメサービス「Retty」のインフラは、全てAWS(Amazon Web Services)で構成しています。特徴的なのは、マネージングサービスにElastic Beanstalkを採用していることですね。このサービスは使っている人が少ないんですよ。
その他には変わったことは特にやっていなくて、Nginxをフロントに置いてサービスキャッシュさせたり、集計出しにEMR(Elastic MapReduce)を使ったりしています。キューイングをしてくれるSQS(Simple Queue Service)も便利で、これが使えると作業がかなり楽になりますね。
また、私たちは自前で色んなことをやらないと決めています。会社が大きくなればなるほど、サービスや社内インフラ、情報共有において様々な問題が出てくるんですが、それを全て自社開発でまかなうのは大変です。だから、ログの解析にはTreasure Data、リソース管理はGit Hub、情報共有にはQiita:Team、チャットはSlack、といった風に様々なツールを利用しています。
技術スタックは色んなものを試しているんですが、最近だとDockerやScalaが気に入ってますね。監視系ではNew RelicやMackerelを採用しています。
築地時代の状況を一言で表すなら「気合のスタートアップ期」ですね。最初にサービスを開発した男(取締役・長束鉄也氏)は開発未経験者で、「初めてのPHP」みたいな本を買ってきて、気合と情熱でサービスを作ったんですね。
しかし、気合だけではどうにもなりません。秘伝のソースが大変なことになっていて、PHPに設定がベタ書きされている上、エラーログもガン無視されているような状態でした。
そこで、最低限の可視化を図ることにしました。これがユーザー数でいうと100万人くらいまでのときの体制ですね。
フロントにApacheがいて、バックにMysSQLがマスター/スレーブ構成でレプリケーションされています。リソースの監視はCloudWatchを使っていましたが、あまり性能のいいものではありません。また、プロセスの監視はRADIUS、httpdなどの絶対に落ちてはいけないものはMonitで無理やり上げていました。
このやり方だと、計測されないことは改善されないので、とにかく可視化させることを意識していましたね。
社員数が増えて、だいぶ会社っぽくなってきたのが恵比寿時代です。しかし、人数が増えるにつれて、サービス側に様々な問題が生じてくるようになりました。
対策として、まずは気合でミドルウェアをアップデートさせました。また、この頃からマネージドサービスの本格運用を開始しました。先ほどもお話しましたが、Elastic Beanstalkは弊社で特徴的に使っているサービスですね。
大切なのは、とにかく自前でプロビジョニングはしないことです。アップデートが激しい月などは開発をしながら追いかけるのが難しいからです。当時の構成は以下の通りです。
ちょうどこの時期にTreasure Dataを入れることになりました。やはりマネージドサービスを使った方が作業が早く進みますね。
また、社内インフラでいうと人が増えすぎてネットが繋がりにくい、ネイティブアプリの開発環境問題などが生じていました。そこで、RTX-1200系を導入したり、社内DNSとVLAN搭載APを使ったりして、一つひとつ問題を解決していきました。
2015年、社員数はさらに増え、現在の高輪オフィスに引っ越してきました。当初はAPの自動切換えやゲストネットワークの隔離、APの可溶性や拡張性などに悩まされましたね。ここに関しては、L3Wや業務用AP(ArubaのOEM)、VPNルーター(RTX-1210)などを用いて、物理的に解決しました。
また、この時期から状態の可視化には、New Relic とmackerelを採用しました。New Relicは、エージェントを入れるとサービス側へどんどんデータを送ってくれるという非常に便利なもの。これがあれば、PHPやデータベースにどれだけ時間がかかっているかが一目で分かります。一方、mackerelはサーバのリソース監視をやってくれるツールです。
このNew Relicとmackerelは、併用することをオススメします。レスポンスタイム/アプリケーションエラー/ボトルネック処理といったことをNew Relicで、プロセス/リソース/ロール分といったことをmackerelで監視させるようにすると、すごく相性が良いです。
今回の話をまとめますと、チームが先に進んでいくためのインフラ整備で必要なのは「様々なものを可視化する」ということです。何か問題が起きると、どうしてもすぐ手を動かしたくなりますが、現状をしっかり把握できていないと先には進めない、というのが私の考えです。
今ある仕組みは、誰かが試行錯誤して作り上げた結果。それを否定して変えようとすると失敗することが多いです。チームが前進するために情報を可視化する、これがRettyのDevOpsだと私は考えています。
いかがでしたか。
今まで知らなかったHack言語の面白さやLaravelの利便性に気づけた方も多いのではないでしょうか?インフラ整備においては「情報を可視化」することの大切さについて学ぶことができましたね。
今後もヒカ☆ラボでは、様々なテーマを設定して勉強会を開催していきます。エンジニアとしての知識の幅を広げ、深めていくためのお手伝いができればと考えておりますので、ぜひともご参加ください!