PHPカンファレンス2014 スペシャルレポート

PHPカンファレンス2014 当日レポート[更新終了]

この記事を読むのに必要な時間:およそ 11 分

鶴岡達也さん「フリマアプリ「メルカリ」の超高速開発を支えるPHP」

iPhone,Androidとマルチプラットフォームに展開中のフリーマッケットCMSを開発しているメルカリの鶴岡達也さんのセッションです(このセッションはタイトルは超高速参勤交代をインスパイア!したものだそうです)⁠

はじめに

最初にメルカリについて紹介しました。メルカリは,ものを売りたい人がスマホで撮って気軽に出品できるアプリです。メルカリがお金を一時的に受け取る形で,安心を提供しています。毎日10万件以上が出品されており,月間流通額は数十億円あります。テレビCMも開始しています。

サーバー構成

サーバー構成は現在は60台です。昨年の今頃はサーバーは1台(1万円程度)のみで運用してしいましたが,1年で60倍になりました。

現在の構成は実は3代目だと言います。2世代目でWEBとDBを切り離し,3代目でロードバランサとキャッシュを用いて負荷分散という成長を遂げてきました。

第1世代はキャッシュサーバーすらない状況で,Apache+mod_php+MySQLという構成でした。第3世代ではロードバランサとしてnginxを使っています。

メイン言語は実はPHP

開発にPHPを選んだ理由は,創業メンバとつながっている開発者の多くがPHP開発者で確保しやすかったということ,そして単に身近だったからだそうです。

安易に見えますが,実は重要だったこととして(後述のマインドの話にも共通しすが)⁠現実的な問題」を解決したかったを挙げて強調していました(モダンな言語を駆使することが目的ではなかったとも話していました)⁠例えば,WordPressがPHP以外の言語でつくられていれば今ほどの勢いはなかったのではないかと指摘し,身近に問題解決していることの価値をもっと認めようと述べました。

さらに,現在のメルカリの平均レスポンスタイムは50ms台で,普通に使えるレベルです。簡単なのに実用的であること,他言語の技術者でも,すぐ習得できてしまう等のメリットがあることも付け加えられました。

とはいえ,現在のシステムで良くない点もあります。それはメルカリはバッチ処理が多いことです。データを大量に取り入れてプッシュ通知を送る処理は,PHPは不得意だと言及。これに対する対策は「得意な言語に任せる」のがよいとしました。

また,PHPのプログラムを常駐させていると,サーバのメモリを消費してしまうため,たいへんなことになります。できるだけプロセスを落として起動して……と現状は再起動を行っていますが,今後はネックになると考えており,いずれは先の例と同じく「得意な言語に任せる」という話になりそうだと述べていました。現在はサーバースペックでカバーしているそうです。

画像

どんな考え方で開発してきたか

メルカリはまだ成長段階だと言います。日本に限った上では2013年一番成長した会社とは言われてますが,0から100に達する中で1に過ぎないと考えているそうです。会社としてはスピードが最も大事だと考えていて,リリースするまでのスピードを意識しています。具体的には「もっとゆっくり作ればよかった」ということはありえない,という意識を共有していると話していました。

サービスはいくら丁寧に作られていて良くできていても,誰も使わないのであれば意味がありません。そのため,次のことを念頭においているそうです。

  • 継続して作るためには,スピードが必要。
  • 実際スピードを出すのに難しいことって開発者,予算,時間どれも足りないのが普通。

そして,具体的な方法として次のことを挙げました。

  • 1. 迷ったら単純なほうを選ぶ
    • 「低機能だけど単純なもの」を選ぶと学習コストが低く,短期的に結果が出てくる。半年,1年先のメリットよりも今が大事。
  • 2. 最高だと思うものの6割で出す
    • 「完璧を目指すより,まず終わらせろ」というFacebookの考え方に似ている。
  • 3. 最も重要なことにフォーカスする
    • メルカリの場合はホーム画面に表示される商品の一覧にフォーカスし,良くなってきた。盛り込む機能は限界まで絞っていて,初期はAPIが95種類だった(現在は171種類ある)⁠また,インフラも最初は高性能な専用サーバ1台にすべて詰め込むことで,本番環境は1日で構築できた。2ヶ月で負荷限界になったが,それでも準備期間は短くなった。

しかし,スピードのためにすべてを捨ててはいけないと話します。具体的にはテストは省略しすぎないことを指しました。PHPUnitでどんなテストを書くべきかよく考えたそうです。

ただ,費用対効果の高いテストを書くのは,開発者のセンスが問われます。未来の開発者が救えるかどうかという視点が重要で,カバレッジではなくエンドツーエンドで正しさをテストすることを挙げました。エンドツーエンドのテストがあれば,安心して元のコードを大胆に変更できます。また,優れたテストがあれば,テストのためにコード品質が犠牲になっても許容できるとしました。

まとめ

最後に,⁠PHPで素早くハイパフォーマンスなアプリを作りましょう。別の言語でつくろうとかではなくて,PHPで自信を持って出していきましょう!」と述べていました。

画像

岸田健一郎さん「擬人化から始めるPHPerのためのオブジェクト指向超入門」⁠

岸田健一郎さんの発表です。今日はオブジェクト指向のプログラミングではありません!と述べ,セッションが始まりました。

画像

class Hogeやら,class Fuga implements FugaInterfaceとかのオブジェクト指向を実現するための構文はさておき,現実世界の話を例に,オブジェクト指向とはなにか?を理解することを目的としたセッションです。

そもそもオブジェクトとは,複雑なタスクを実行するためにコミュニケーションを取り,協調して課題を解決するためにあるもの。いくつかのステップを経てオブジェクト指向を理解していきましょうと話しました。

「生命と知性を与える」⁠対話形式を用いる」ことにより,実世界に見えない存在も考えだすと言います。つまり,擬人化できます。そしてオブジェクト指向の場合,次の6パターンのいずれかの役割になるそうです。

  • 情報保持役
    • モデルやエンティティ。情報を知ってる。保持するデータから計算するのはOK。
  • 構造化役
    • ざっくりグループ化する。リストや配列,ハッシュとかキューとか。エンティティの関連とかを表現する。
  • サービス提供役
    • 特殊な処理を提供する。WorkerやWriterみたいに,-erになっているクラスを見つけたら,それは大抵サービス提供役。
  • 制御役
    • 他の複数のオブジェクトから状況を聞き出して判断する。判断した結果を支持する。
  • 調整役
    • あるオブジェクトから情報を受け取って,他のオブジェクトに渡す。
  • インターフェース役
    • イベントを受け取って,誰かに依頼したりする。

まずは,それぞれの性格(ロール)を決めます。フレームワークでよくあるcontrollerが太るとかは,MVCの3つという枠組みだと,1つのクラスが肥大化してしまうことです。

ここで,実現したい機能について役割を書き出してみます。その際,⁠適切な名前をつけること」⁠6つの中の役割にあてはめてみること」を考えるようにします。次の例を挙げて説明しました。

  • 1. 社長が雑談している時の社長の発言を保存したいとき
    • (登場人物)社長,秘書,広報,事務
    • 社長→秘書 ⁠今日xxxなことがあってさ。社長語録に書き留めて,SNSに投稿しておいて」
    • 秘書→事務 ⁠社長語録に記録しといて」
    • 秘書→広報 ⁠SNSで広めておいて」
  • 2. コピーを10部ソートしてホッチキスとめしたいとき
    • (登場人物) 社長,コピー係,複写係,ソート係,ホチキス係
    • 社長→コピー係 ⁠コピーしといて」
    • コピー係→複写係 ⁠印刷しておいて」
    • コピー係→ソート係 ⁠並べ替えておいて」
    • コピー係→ホチキス係 ⁠ホチキス留めておいて」

この時,上記の関係を図に書くことが重要だそうです。性格が決まると責務はおのずと決まってきます。

オブジェクトの相互作用も明確になります。PHPにおいての関連性は,⁠クラス名=役割」⁠プロパティ=性質」⁠メソッド=できること」になります。

最後に,実現したい機能を,まずは擬人化して図を書くことから始めると学びやすいこと, オブジェクトデザインを入門書として読んでみてほしいと述べていました。

画像

著者プロフィール

梶沼翼(かじぬまつばさ)

東京目黒区在住。渋谷の会社でポイントサイトの開発を担当。業務でもプライベートでも一番長く触っている言語はPHPだが,最近はNode.jsやアプリ開発に浮気中。


中村慎吾(なかむらしんご)

東京都港区在住。仕事でPHPを使うようになって9年。楽しい事には何でもやってみるスタイル。趣味はプログラミング,仕事もプログラミング。最近はアプリ開発が多くなっているが,Web開発となるとPHPは手放せない。

URL:http://d.hatena.ne.jp/n416/
Twitter:@n416


塚本久博(つかもとひさひろ)

Groupon Japan,Inc技術本部所属。

横浜市在住,もっぱら仕事でしかPHP書いていません。すみません。でも5.5は素敵だと思っています。

Twitter:@hihats
URL:http://d.hatena.ne.jp/hi-hats/

バックナンバー

PHPカンファレンス2014 スペシャルレポート