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

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

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

竹澤有貴さん「PHPデプロイツールの世界」⁠

竹澤有貴さんは,デプロイツールについて,使い方ではなくアプローチの仕方の違い等について発表しました。

画像

デプロイする方法は,FTPを使い手動で行う,rsyncでアップロードするなど,たくさん存在します。また,PEARからComposerに,ライブラリなどはプロジェクトごとで管理する方針に変化しています。GruntやGulpなど,フロントエンドもまた進化し続けています。

デプロイツールの主なタスクと,そのための3つのツール

竹澤さんは,デプロイツールの主なタスクとして次の事柄を挙げました。

  • ライブラリのインストール
  • フロントエンドタスク実行
  • 複数のリモートサーバ(Vagrant, dockerなど)へ接続
  • ローカルタスクの実行(rsyncなど)

これらをPHPに統一したい,また,他の言語で行おうとすると難しいときには,PHPのデプロイツールを使おうと述べ,次の3つのツールを比較する形で説明が進みました。

  • Envoy: リモートサーバタスクツールで,デプロイツールは実装されていない。Laravelの公式に載ってるが,Laravelと親和性はない。
  • Deployer: 完成度が高いリモートサーバタスクツール。
  • Rocketeer: Capostranoスタイルで作られていて,デプロイタスクツールになる。高機能多機能だが,サービスロケータを多用していてソースコードを読むのは難しい。

画像

タスク実行のアプローチ

3つのツールをタスク実行の観点で紹介しました。

  • Envoyでは,Envoy.blade.phpに実行するタスクを書き,コンパイルして通常のPHPコードに変換します。symfony/processによる接続を行い,タスクごとにリモートサーバに接続します。
  • Deployerでは,deploy.phpに実行するタスクを書き,それを読み込みます。phpseclib/phpseclibという使い勝手が良いライブラリを使って接続します。
  • Rocketeerでは,サービスをすべてコンテナに入れてからタスクを実行します。Task Queueは実際は配列になっているなど,とても複雑になっています。

並列のアプローチ

次に,各ツールを並列の観点で紹介しました。

  • Envoyでは,それぞれのプロセスがタスクを実行し,リモートサーバ上にプロセスが立ち上がります。シンプルな並列処理です。
  • Deployerは,ReactPHPを利用した非同期処理です。proc_openを利用し,各プロセスがタスクを実行します。
  • Rocketeerは,pcntl_forkによるプロセスのフォークを行います。各プロセスがタスクを実行します。

タスクのアプローチ

最後に,各ツールをタスクの観点で紹介しました。

  • Envoyは記述したタスクのみ実行し,タスクの前後に処理を行うなどの仕組みはありません。また,ローカルタスクはタスクごとに記述します。
  • Deployer,Rocketeerは,タスクの前後の処理は簡単に記述でき,ローカルタスクについてはDeployerはリモートタスク内で,Rocketeerはタスクごとに実行可能です。

まとめ

最後に,竹澤さんは「同じコンポーネントを使っているがアプローチはそれぞれ異なります。人気度で選ぶのではなく,使ってみてツールの違いやアプローチの違いを知っておくとトラブルに対応しやすい」と述べました。

各ツールの仕組みを理解しながらPHPのデプロイツールについて知ることができた発表でした。

蒋池東龍さん「PHPあるあるパフォーマンス対決」

蒋池東龍さんは2年前の「PHPコアから読み解く定石の嘘ホント」の続編として,似たようなスクリプトのどちらのほうがパフォーマンスが高いのかを論理と数値から確かめた話をクイズ形式で発表しました。

画像

数値に関しては,for文で回してmicrotimeで純粋な実行時間を計測,論理はPHPの最小単位の命令のスクリプトのオペコードで見たものだそうです。

本発表の目的として,⁠数値は大切だけど数値だけで分かったことにならない。だけど論理だけで頭でっかちにならない」⁠数値と論理からパフォーマンスを考えてもらって,PHPの楽しさ奥深さを考えてもらいたい」と話しました。

メソッドチェーン

最初のクイズは,メソッドチェーン vs 非メソッドチェーン(10万回計測)です。

画像

結果は,非メソッドチェーンのほうが早かったと紹介しました。オペコードを見てみると,メソッドチェーンのほうは変数を多用しているため無駄が多くなって遅くなっていて,非メソッドチェーンのほうは1つの変数を使い回しているため無駄がないという結果になったとのこと。

異次元配列の書き込み

次のクイズは,高次元 vs 低次元(100x100x100回計測)です。

結果は,低次元のほうが早かったと紹介しました。オペコードを見てみると,低次元のほうが処理を分散して値を入れているため速くなっているとのこと。

関数の引数

最後のクイズは,スカラー vs 配列(10万回計測)です。

結果は,配列のほうが早かったと紹介しました。オペコードを見てみると,関数の引数を送受信するのにコストがかかるため,スカラーのほうが遅く配列のほうが速くなっているとのこと。オペコードの量は関数の引数を送受信するのにコストがかかる上に,変更に弱いコードなので引数が多ければ配列で渡したほうがいいと指摘しました。

まとめ

最後に,蒋池さんは「パフォーマンスが高いスクリプトを書くこと」⁠どうしてそうなのか,深い理解すること」⁠自分でも考えてみること」が大事だと話しました。

宣伝として,会場では売り切れてしまったけれども,⁠PHPはどのように動くのか~PHPコアから読み解く仕組みと定石』が技術評論社から発売中であることを紹介しました。また,Skyscanner Japanではエンジニアを募集しているとのことです。

河野匡貴さん「10年続いているwebサービスの画像サーバをノーメンテでftpサーバからS3互換のストレージサーバに移行している話」

ネットショップを作りたい人向けのWebサービスであるカラーミーショップが10週年を迎えます。河野匡貴さんは,今回このサービスをS3互換のストレージサーバに移行したことを発表しました。

画像

カラーミーショップはPHPで,独自フレームワークを使っていて,公開しているAPIはRailsやCoffeeScriptで書かれていると紹介しました。顧客はPCのからAPPサーバにアップすると内部でFTPサーバにアクセスする仕組みです。参照はCDNを通じてアクセスされます。

今回移行しようとしているS3互換のストレージサーバとは,APIがS3互換で,裏側がMogileFSであり,S3と同じと考えてくれれば問題ないと話しました。

最初に,次の事柄について検討したと話します。

  • 1. FTPサーバとやり取りしているロジックを1箇所に集約する。
  • 2. ロジックを変更してS3互換サーバーに更新がかかるように。

そこで,FTPからS3互換サーバに移行するときに便利になるように,ファイルアクセスを抽象化してくれるライブラリを探したとのこと。結果,Flysystemというライブラリが便利なことがわかりましたが,このライブラリは5.4から対応だったため,5.3で運用していたカラーミーショップでは使えないことが分かったそうです。全体を5.4にバージョンアップする時間を割くことはできなかったため,Flysystemをフォークし,次の方法で自分で動くように5.3対応のものを作ったとのこと。

  • PHP5.3でテストを動かす
  • テストコードをPHP5.3対応
  • テストを実行
  • ひたすら直す

具体的には,[]→Array()とかtraitをよしなに変更したそうです。

これにより,Travisで一応5.3-5.6のテストは通ったので,このFlysystemを使いつつ,画像サーバ特有の処理を共有化したものを作ったとのこと。コピペコードにならないように社内用のComposerライブラリに追加し,テストも書いたと説明しました。ここまでで4ヶ月くらい掛かったとのこと。

次に,メンテナンスなしに画像データを移行した方法を紹介しました。

仕様として,APPサーバからFTPサーバとS3互換サーバの両方に更新がされるように修正。両方にアップロードすることにしたと言います。FTPから一時ファイル置き場にrsyncし,s3cmdを使ってファイルをputするようにし,この最中(FTPから一時ファイル置き場にrsync)に削除されると,S3互換サーバに必要の無い情報が入ってしまうため,削除するスクリプトを仕上げに通したと説明しました。

最後に,APPサーバからFTPサーバに更新がされる処理を削除したとのこと。ただ,18台もあったので3ヶ月くらい掛かったと振り返りました。

河野さんは,移行の感想として「画像サーバを移行しようという話が出たのが今年1月で,すべて終わったのが9月で長かった。大きな障害がなく無事移行が完了出来たのが一番良かった」と述べていました。

画像

仲裕介さん「WebRTC開発者向けプラットフォーム「SkyWay」の裏側」⁠

NTTコミュニケーションズの仲裕介さんは,SkyWayの開発体制の推移や裏話(開発の歴史)を発表しました。冒頭,⁠全くPHP関係ない発表に来ていただき,ありがとうございます」と前説していました。

画像

本発表では,SkyWayの裏側(開発の歴史)と,大企業でのスタートアップ的なことも悪くないということを伝えたいと話しました。

WebRTCとは何か

最初に,WebRTCについて,ブラウザだけで(プラグインなどのインストールなしで)動作するリアルタイム通信の技術であると説明しました。音声,映像データのやり取りが可能で,ブラウザに限らず動くことも合わせて示しました。

SkyWayとは

SkyWayは,WebRTC技術を用いたP2Pのビデオチャットなどが簡単に扱えるライブラリ/サービス/プラットフォームです。SkyWayにはJavaScriptだけではなく,iOSやAndroid向けのSDKもあることや,ファイヤーウォールやNATを越えるときに必要なサーバ機能などがあることを紹介しました。

WebRTCはネットワークからアプリケーションレイヤまで幅広い技術が必要となります。ネットワーク側はアプリケーションレイヤの人にはかなり難しく,そのあたりを肩代わりすることで,アプリエンジニアが実装に集中できる環境を提供していると説明しました。

SkyWayの裏側: 開発の歴史

仲さんのチームはR&D的な側面も持っていて,NTTコミュニケーションズとしてはネットワーク分野に強い会社なので,その強みや色を出そうということからSkyWayのプロジェクトが発足したそうです。

次のような進行で開発が行われたと紹介しました。

  • ステップ1
    • サーバーは自社クラウドCloudn
    • 開発言語はErlang
    • JS SDKは peerjsをフォークしてつくった
    • Webサイトはgh-pagesで公開.ioのドメインでやったらかっこいいという理由(笑)
  • ステップ2
    • インフラ構築自動化
    • モダン感が出てきた
    • 管理画面側のバックエンドはFuelaPHP
    • 同じくフロントエンドはSPAな構成に
    • FuelでのサーバーサイドレンダリングとSAP側の住み分けを行った
  • ステップ3,4
    • 自動化をさらに加速
    • TRUNサーバーを追加
    • iOS/AndroidSDKの公開
  • ステップ5
    • システム冗長化
    • Log収集と解析機能
    • Golangの導入

最初はなかなかモダンな開発にできなかった開発体制も,時を経るにつれてモダン環境に進化していったと振り返っていました。

画像

まとめ

WebRTCはかなり難しい技術が折り重なっていますが,これをユーザが使いやすい形に落とし込んでいるSkyWayにはいろいろなバックグラウンドがあると感じました。PHPユーザの皆さんもぜひ一度試してみてはいかがでしょうか。

著者プロフィール

大橋勇希(おおはしゆうき)

東京都渋谷区在住。Webアプリケーションエンジニアで,主な使用言語はPHP。最近は,TDD(テスト駆動開発)やDDD(ドメイン駆動設計)に取り組みエッセンスを吸収している。

Twitter:@secret_hamuhamu URLhttp://hamuhamu.hatenablog.jp/


柏原幸治(かしわばらこうじ)

東京都豊島区在住。仕事はブラウザーゲームのバックエンドをPHPで開発している。他の言語もいろいろいじるが,一番長く使ってるPHPが一番使いやすい。

Twitter:@noah0x00
Facebook:https://www.facebook.com/koji.kashiwabara


菅原のびすけ(すがわらのびすけ)

株式会社LIG エンジニア。1989年生まれ。岩手県立大学在籍時にITベンチャー企業の役員を務める。同大学院を卒業後,株式会社LIGにWebエンジニアとして入社し,Web制作に携わる。最近は特にIoT領域,インタラクティブな企画実装などに従事している。

マッシュアップアワードを始めとしたハッカソン等で入賞歴あり。家賃0円クリエイターズシェアハウス第1期生。ジーズアカデミー第1期メンター。LIGinc,HTML5Experts.jp,さくらのナレッジ,gihyo.jpなどでも執筆・寄稿をしている。Milkcocoaエバンジェリスト,特技はわんこそば,趣味は雪合戦。

Twitter:@n0bisuke

LIGincプロフィール:http://liginc.co.jp/member/member_detail?user=nobisuke


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

仕事でPHPを使うようになって10数年。楽しい事には何でもやってみるスタイル。趣味が講じて(拗らせて?)会社も作りました。Web開発となるとPHPは手放せません。

Twitter:@n416
URLhttp://kisaragi-system.co.jp


仁多見遼(にたみりょう)

岩手県立大学大学院 ソフトウェア情報学研究科 2年。主にAndroidアプリ開発をしているが,2016年4月から東京でWebエンジニアとして働くことになり,PHPやJavaScriptを書き始めた。いろんなイベントに参加したり,自身でハッカソンを主催するなどイベントが大好きな人。

Twitter:@bird_nitryn
URLhttp://rnita.me

バックナンバー

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