y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

PHP BLT #2 に参加しました

1/13 (水) に、PHP BLT #2 に参加してきました。主催、会場は株式会社メルカリさんです。LT 発表枠とオーディエンス枠のどちらも抽選で埋まる人気イベントでしたが、「まとめブログ書く枠」は先着順になっていて、私は抽選を避けてこちらの枠で参加させてもらいました。今回の記事ではイベントの発表内容を簡単にまとめます。
phpblt.connpass.com

(追記)
会場でのツイートが togetter にまとめられていました。当日の盛り上がりの様子はこちらも参照してください。
2016/01/13 PHP BLT #2 - Togetterまとめ

LT 本編

今回は以下の 20 本の LT 発表がありました。順番は発表順です。発表スライドが公開されているものはタイトルからリンクしていますが、本数が多いので埋め込み形式にはしていません。各スライドはリンク先で参照してください。なお、発表者の名前は Conpass の参加者一覧ページでの表記にしています。

PHP の Builtin Server っぽい Apache / uzulla さん

複数Apache を気軽に切り替えられる apachehere コマンドの紹介でした。カレントディレクトリを DocumentRoot として起動するそうです。
github.com

本題の前の導入で VM 環境 vs Native 環境という話がありました。私は日頃 VM 環境で開発していますが IDE まわりが辛いという点は同感です。発表は "M is Mysql" のスライドが表示されたところで残念ながら時間切れになってしまいましたが、懇親会 LT で続き (?) がありました。

BigQuery のちょっとした話 / kunit さん

BigQuery を利用して得られた知見を集めた発表でした。挙手によるアンケートでは BigQuery の利用経験者は少なかったようですが、安い、速い、SQL を使える、という点が良いそうです。ただし、インポートしてから少し待たないとデータを利用できないなど通常の RDBMS とは違った挙動もあり、そういった内容を紹介していただきました。Google のサポートに問い合わせて、バグだという回答をもらったという経験もされたようです。

Composer 並列化プラグイン / Hiraku さん

Composer の処理は (1) パッケージ情報の取得、(2) 依存関係の解析、(3) zip ファイルダウンロードからなりますが、(1) は Hiraku さん作成の Packagist.JP で、(2) は PHP 自体の高速化でそれぞれ解決されており、残る (3) の処理を Composer の並列化によって高速化したという内容でした。Composer のプラグインとして開発され、下記で公開されています。
packagist.org

発表では、技術的な説明の後、LT の残り時間 1 分という状況で、Laravel を取得するデモの実演がありました。事前に通常の Composer で取得したときには 288 秒かかったそうですが、残り 1 分から開始して 49.59 秒で見事に完了し、大いに盛り上がりました。

PSR-1 と PSR-2 を 5 分でざっくり理解する / 寺田渉さん

二択クイズの形式で会場の参加者を巻き込みながら、PSR-1 と PSR-2 に照らして正しいコードを紹介する発表でした。私は、日頃から phpcs に怒られながらコードを書いている成果か 7, 8 割方は分かったのですが、それでも自信をもって答えられない項目もあり、復習になりました。

array_map の引数に簡単な無名関数を渡す場合など、PSR にしたがうことで改行が多くなり、かえって読みにくいコードになってしまう場合もあるように思います。コールバック関数を多用して関数的なコードを書こうとすると、PSR のコーディング規約はあまり相性がよくないという印象があります。

Security Advisories Checker on (Travis|Circle) CI / serima さん

Symfony で有名な SensioLabs が Security Advisories Checker というサービスを提供しており、これを CI に組み込んだという内容の発表でした。Security Advisories Checker は、composer.lock ファイルを参照して脆弱性のあるバージョンが require されていないかチェックしてくれるものです。これを .travis.yml に記述して運用する方法を説明していただきました。発表者の serima さんの GitHub リポジトリにサンプルコードがあります。
github.com

What's new in Symfony3 / yuchimiri さん

Symfony の最新版である 3.0 の紹介です。Symfony のロードマップや 2.x からの移行方法を説明していただきました。Symfony 3.0 は、2015 年 11 月 30 日に 2.x 系の最新版である 2.8 と同日リリースされたもので、2.8 から後方互換性のための deprecated な機能を外した内容とのことです。3.0 系の最初の LTS は、2017 年 11 月リリースの 3.4 になるそうです。

TDD アンチパターン / secret_hamuhamu さん

テスト駆動開発アンチパターンとして、James Carr 氏の 2006 年のブログ記事のエントリ "TDD Anti-Patterns" から、The Liar, Excessive Setup, The Giant の 3 パターンを紹介していただきました。後半の二つは分かりやすいパターンだと思いましたが、最初の The Liar は、規模が大きくなってくると見つけることも難しいのではないかと思いました。テストを作成するときから注意しなければいけませんね。

PHPBrew で学んだ PATH の話 / kurotaky さん

PATH を ":" でセパレートした中に空文字があるとカレントディレクトリと解釈されるという知見の共有でした。これは POSIX 8.3 Other Environment Variables に記載されている仕様で、たとえば以下のように環境変数を連結するコードを書いて $PHPBREW_BIN が空になっていると、カレントディレクトリが PATH に含まれてしまい危険だという内容です。

export PATH=$PHPBREW_PATH:$PHPBREW_BIN:$PATH_WITHOUT_PHPBREW

(スライド 11 枚目から引用)

kurotaky さんは PHPBrew のコードにこの問題が含まれていることを発見してプルリクエストを送り、その結果、PHPBrew では version 1.20.4 で修正済みになっているということです。

メルカリでの 1 年を 5 分で話す / cocoiti さん

メルカリに入社してからの 1 年間の紹介という内容でした。開発フローの改善や PHP をアップデートした話などがありました。スピーディに改善される点がよかったそうです。Wi-Fi は良い機器を買いましょうというアドバイスもありました。

やさしいコーディング規約の導入 / fortkle さん

すでに開発が進んでいるプロジェクトに、コーディング規約を段階的に導入していくときの方法の紹介です。phpcs をデフォルトの状態で導入すると、いきなりエラーが数万件といった状態になりくじけてしまいがちですが、XML ファイルを編集してルールをカスタマイズすることで、一度エラーをすべて除外してしまい、その後で少しずつ直していく方法を紹介していただきました。また、最終的に CI で自動実行するときには、コミットされたファイルのみを対象にするとよいということです。

Re: WebServer BenchMarking / hanhan1978 さん

PHP とウェブサーバの組み合わせについてのベンチマークの報告でした。Qiita の PHP Advent Calendar 2015 に投稿した記事に自ら疑いを持ち、ベンチマーク方法を再検討して計測し直したということです。

PHP という概念が存在しない退屈な世界 / oh-sky さん

AWS Lambda で PHP を動かしたという内容の発表でした。AWS Lambda では PHP はサポートされていませんが、Linux が動いているのだから PHP コマンドをアップロードして強引に動かしてしまおうという発想で、いろいろ工夫しながら最終的に Web アプリケーションを動かすところまで到達したようです。

○○○.Skeleton / qckanemoto さん

"Most popular in the world" な CMS について、コアやプラグインを composer でインストールできるスケルトンを作成したという発表でした。qckanemoto さんの GitHub リポジトリで公開されています。本家の開発者も同じ用途のスケルトンを公開しているのですが、それよりもオススメだということです。
github.com

PHP でダイエット / sotarok さん

自社フレームワークとして開発してきた Dietcube を公開するという発表でした。独自フレームワークを作ることの利点の説明の後、LT 発表の中で GitHub リポジトリを作成して、まさにリアルタイムで Dietcube が公開されました。現在は以下のリポジトリで公開されています。
github.com

PHP メジャーバージョンアップ大作戦 / kenchan さん

PHP 4 系のプログラムを PHP 5 系にバージョンアップした話でした。元々の構成は (1) Nginx -> (2) Apache2 -> (3) Apache1 + PHP 4 というのが N 組というもので、これを、切り戻し可能であることは必須、ダウンタイムゼロを目指す、という基本方針のもとで移行作業を行ったという内容です。(2) と (3) の間に iptables を入れて切り替える方法で実現したようです。

実際にはさまざまな困難、工夫があったのだろうと思いますが、発表スライドでは、特に問題なく簡単に移行できたような印象を受けました。周到に事前の計画を練った成果ということなのでしょうか。

install PHP7 on CentOS7 by Ansible / DQNEO さん

CentOS 7 に PHP 7 をインストールして、Ansible playbook を公開したという発表でした。DQNEO さんのリポジトリで公開されています。LT 発表の中で実演があったのですが、残念ながら途中で時間切れになってしまい、懇親会 LT でインストール結果の披露となりました。
github.com

Introduction of php-ext by rust / gong023 さん

Rust で PHP 拡張を実装した経験からの知見の共有でした。Rust には、危険なメモリ操作などをコンパイル時にチェックする機能などが備わっているそうです。Rust の関数をコンパイルして .so ファイルを生成し、その関数を C から呼び出せるそうです。したがって、Rust で関数を実装して .so ファイルを生成し、これを PHP 拡張からリンクするという方法を用いることで、Rust で PHP 拡張を実装できるという流れです。実際には、config.m4 の記述の中で、そのままではどうしても動かない箇所があり、記述の変更が必要だったようです。

PHP をビルドしてみた / b-kaxa さん

PHP を初めてビルドしてみたという経験談でした。これは初心者向けの発表かなと思いかけていたところ、PHP 6 のビルドという内容で驚かされました。PHP 6 はリリースもされていないので、よくわからないミラーサイトからソースコードを入手して何とかビルドしたようです。

b-kaxa さんの GitHub リポジトリで Ansible の playbook が公開されており、気軽に PHP 6.0 環境を構築できるそうです。PHP 6 なので Unicode 対応されており絵文字も表示できるようです。
github.com

Enjoy, Twig / のりぃさん

テンプレートエンジンの Twig の良いところの紹介でした。CMS で Twig を書きたいという動機から template_from_string の説明がされましたが、スライドにも、ユーザ入力に対して使わないよう注意が書かれているように、それはやめたほうが・・・という声があがっていました。

今さら CakePHP 2.3 で WebAPI を作った話 / rittyan さん

CakePHP を使って WebAPI を作成した経験から得られた知見の共有でした。よかった点としては、テストコードを書いて CI を回せたこと、プルリクエストを用いてコードレビューしながら進められたことなどが挙げられました。また、ページネーションのベストプラクティスがほしいという話があり、以前 ページャNight <[1]> on Zusaar という勉強会があったことを思い出しました。私は参加できなかったのですが、募集開始後、あっという間に埋まっていたような記憶があります。ページネーションは悩ましいテーマですね。

懇親会 LT

本編の LT の終了後は懇親会ということでしたが、飛び込み LT も行われました。こちらも簡単にまとめます。

uzulla さん

ヨーロッパで開催された YAPC に行ってきたという話から始まり、複数PHP 環境を作って使うときに便利な setmyphpini.php の紹介、pseudo_sendmail.php の紹介、mysql_data_setup.php の紹介がありました。最後の mysql_data_setup.php は、本編の LT で時間切れになってしまった後のスライドで紹介予定だったもののようです。
uzulla/setmyphpini.php · GitHub
uzulla/pseudo_sendmail.php · GitHub
uzulla/mysql_data_setup.php · GitHub

DQNEO さん

続いて DQNEO さんから、本編 LT で時間切れになってしまった PHP 7 インストールのデモがありました。無事に 7.0.2 がインストールされて、ウェブサーバが動いていました。

shoma さん

職場の方が作成したという PHP 7 での拡張モジュールの紹介がありました。拡張モジュールを作成する際の参考にということです。
php-yrmcds by cybozu

@cubicdaiya さん

『nginx 実践入門』という書籍を執筆したという紹介がありました。1/16 (土) に出版されるそうです。nginx の本ですが、6.3 節で PHP アプリケーションサーバの構築について 5 ページほど書かれているということでした。
nginx実践入門(WEB+DB PRESS plusシリーズ)|gihyo.jp … 技術評論社

また、2/8 (月) には出版記念イベントがあり、参加者募集中ということです。
eventdots.jp

uzulla さん

Perl には guard という便利な機能があり、PHP にも欲しいという動機で guard_php を作ったという話がありました。その他、ssh-pubkey-encrypter, SLog.php の紹介、Packagist を監視して twitter に投稿する @call_user_func の紹介がありました。
uzulla/guard_php · GitHub
uzulla/ssh-pubkey-encrypter · GitHub
uzulla/SLog.php · GitHub

twitter.com

kenchan さん

本編 LT の内容から派生して、nginx + php-fpm の構成について、php-fpm が graceful restart できないという話がありました。また、PHP 4 から PHP 5 への移行前後での負荷か何かだったでしょうか、グラフを提示してお話されていました。このあたりは片付けながら立ち見になってしまっていたので、スミマセン。

感想

第一回は参加できなかったので今回が初参加でしたが、楽しく過ごせました。私は、PHP を使っているといってもウェブアプリケーションを書いたりする経験はそれほど多くないので、全く内容がわからなかったらどうしようかと (まとめブログを書く枠での参加だったこともあって) 不安もありましたが、皆さん分かりやすい発表でとても助かりました。発表に慣れている方が多かったのかなという印象を受けました。

PHP BLT #3 が開催されます

ということで早速、次回の PHP BLT #3 開催の告知がありました。日程は 3/1 (火) で、今回と同じくメルカリさんでの開催となります。すでに募集が始まっていますので、興味を持たれた方は参加してみてはいかがでしょうか。
phpblt.connpass.com