PHP Conference 2019に参加してきました!
(株)ライトコードの神田です!
少し時間が経ってしまいましたが、12月1日(日)に「PHP Conference 2019」があり、当日スタッフとして参加しました。
初めての参加だったので知らなかったのですが、PHP Conferenceは2000年から始まり今年で20年目とのこと。
先日参加したJJUG CCCが12年目だったので、日本では最も歴史のあるカンファレンスなのかもしれませんね。
まずは、前日の様子からどうぞ!
PHP Conference 2019~前日の様子~
消防署で救命講習
私は、当日スタッフでの参加ではありますが、作業は前日から始まりました。
午前中は会場近くにある消防署に向かい、救命講習を受けることになりました。
過去に急病人が出たことがあり、それ以来、希望者のみ救命講習を受けるようになったそうです。
会場の準備
午後は、会場の準備に参加。
会場である『大田区産業プラザPiO』に集合し、設営や参加者に配布するパンフレットや、ノベルティ(シール等)の準備を行いました。
1500人近くの参加者に、33のスポンサーのパンフレットを配布する予定です。
そのため、なかなか疲れましたが、午後6時過ぎに終わったのでちょっとホッとしました。
スピーカーズディナーに参加
そして、当日に数名枠が空いていたため急遽、スピーカーズディナーに参加。
ちなみに、このスピーカーズディナーは本来、運営スタッフとスピーカーの方のみのイベントです。
スピーカーの方と話せたりと、とても有意義な時間が過ごせました。
PHP Conference 2019 開催日!!
PHP Conference 2019 の当日は、午前7時45分に会場に集合。
前回の別イベント参加時の反省を活かし、近くのホテルに宿泊していたので幸い遅刻せずに済みました。
スポンサーブースおよび各部屋の準備をし、午前9時半に開場。
開場早々から参加者がごった返して、受付担当の私はてんやわんやの状態に。
そして、ついにオープニング
写真は、オープニングの様子です。
かなりの参加者がいらっしゃったのと、海外から参加された方などの応対など、気が抜けない状態が続きました。
そんな状況だったのため、聴講したかったセッションがいくつかあったのですが、結局1つしか行けず…!
さらに、参加したセッションと同時間帯に、PHPUnitの開発者であるSebastian Bergmannさんのセッションがあったのですが、やむなく断念しました…
Webサービスのトラブルの現場 ~ Webサービスの今と昔 ~
今回、聴講できたセッションは、この1つだけでした。
登壇されたのは「オミカレ」という婚活サービスを運営している会社で、CTOをされている「曽根壮大」さん。
曽根さんというと、データベース、特にPostgreSQL界隈で有名です。
JPUG(日本PostgreSQLユーザー会)の理事(勉強会担当)でもあります。
このセッションの話は、曽根さんが書いているブログの内容を基にされたとのことでした。
【ブログ】
https://soudai.hatenablog.com/entry/2019/08/24/030631
ただ、PHPの話はあまり出ず、どちらかというとSREというか運用保守周りの話が中心でした。
Webサーバーが死ぬ場合がある
最初は、「Webサーバーが死ぬ場合がある」といういきなり強烈な話が出ました。
理由は様々で
-
- アプリケーションのバグ
- ハードウェア障害
- アクセス過多
- 共有サーバーの様子が…
といろいろとあるみたいですが、やはりアプリケーションのバグが圧倒的に多いとのことです。
やはり「テストはちゃんとやりましょう」ということですね。
パブリッククラウドを用いている時はあまり意識しにくいですが、ハードウェア障害も要注意ですよね。
(私自身WebサーバではなくDBサーバですが、ハードディスクの障害にハマり泣きそうになったことがあります。)
他にも、アクセスが殺到して503エラーを起こしたり、そして共有サーバーのことが取り上げられました。
他システムとの影響も考える必要がありそうです。
特にアクセス過多の場合は、Webサーバーへのモニタリングツールで、以下観点で監視すると良いとのことでした。
-
- OS側の情報
- ApacheないしNginxの情報
- PHPの実行情報
- Webサイトの情報
バッチ処理が突き抜けてしまう
続いて、バッチ処理が突き抜けてしまうという話が出ました。
私の中ではバッチ処理というと、ジョブネットという感じですが、まさに先行ジョブが終了しないため、後続ジョブが開始されず、結果致命傷になるという話でした。
実際に大量データを扱うバッチ処理とかですと、非同期処理は普通に行われ、突き抜けは後続ジョブの影響だけでなく、翌日の活動にも影響するので気をつけたいものです。
(過去にバッチ処理の突き抜けで痛い目に遭ったことがあるので。)
やはりバッチ処理の実行状況把握は確実にしていきたいものです。
ここでは、「Mackerel」という監視ツールのプラグインを紹介されました。
私的には「処理時間の可視化専用」という感じがして、ちょっと話題になった JP1/AJS3 のような実行状況が、確実に把握出来たらいいのにと思ってしまいました。
【Mackerel】
https://github.com/ariarijp/mackerel-client-php
パブリッククラウドでも死ぬ場合がある
次のアジェンダでは、「サイトにアクセスができなくなった時は、落ち着いてレイヤの特定をし、問題箇所が何なのかというのを裏付けを含めて調べることが大事」とのことでした。
さて、先日あるクラウドで大規模障害が発生しましたが、パブリッククラウドでも死ぬ場合があるという、いくらパブリッククラウド上にマルチAZでネットワーク構成をしても、死ぬ場合があるという話が出ました。
ここでは、稼働率と急所というべきか、トレードオフを理解した上で必要な技術を選ぶという、特に初期構築時には必要なことではないのかなという感じがしました。
勿論、状況によってはリプレース等で変更する場合があったりしますが。
trdsqlについて
最後に、Webサーバーへのモニタリングの話で「trdsql」の紹介がありました。
trdsqlとは、「CSVやJSON形式のファイルをSQLで抽出できるコマンドラインツール」とのことです。
インストール方法も含め、詳細は以下をご参照下さい。
【資料】
https://qiita.com/noborus/items/f253961cca6f4465f20c
【trdsql】
https://github.com/noborus/trdsql
当セッションのスライド
【スライド】
https://speakerdeck.com/soudai/web-server-is-dead
【記事】
https://www.atmarkit.co.jp/ait/articles/1912/25/news015.html
クロージング前LT
クロージングの前にLTが13本あったので、その中で何本かを紹介しようと思います。
PHP on AWS Lambda!
AWS Lambdaで、PHPが使えるという話。
ただし、ご存知の通り公式サポートはしていないため、カスタムランタイムを利用することになるとのこと。
今年のre:Inventでは、LambdaでPHPがサポートするという話がなかったので、まだカスタムランタイムを用いるしか方法はなさそうです。
ただ、やり方については本も出ているらしく、Qiitaとかにも色々ありそうな感じがします。
【スライド】
https://slide.seike460.com/slides/phpcon2019#/
運用経験ばかりのメンバーと新規開発で初めてしっかりと設計から開発までを経験した話
内容は、課題解決のためにたまたまクリーンアーキテクチャを採用したら、上手くリリースできたというものです。
この話に出てくる、以下の内容は役立つのではないかと思いました。
-
- 発足時に何が良いかをアピールする
- 全エンドポイントのモックを作成
- 導入しやすいようにサンプルを作成
- 率先して全てのPRに目を通す
- 正解は誰もわからないので議論する
- 非クリーンアーキテクチャ至上主義(良いところは採用し、やりづらいところは無理しない)
あと、私も同意したのはこの2つでした。
-
- コントローラーの肥大化は嫌
- 書きづらいテストは嫌
【スライド】
https://speakerdeck.com/ohshige/php-conference-japan-2019-lt
余裕を生み出すコードレビュー
はてブにも、ちょくちょく出ていたLTです。
私自身、レビューイであったことが多かったので共感することも多かったのですが、PRを出す時は、キリのいいところで出した方がいいよという話でした。
確かに、レビュワー側からしたら「なんでこんなに変更量の多いPRを出したの?」となってしまい負担も大きくなりますし。
【スライド】
https://speakerdeck.com/fortkle/code-review-phpcon-2019
社内最長老のシステムにPHPUnitで立ち向かう方法
なんと、18年間稼働しているPHPのシステムの一部をバージョンアップする際に、全機能試験の一部をPHPUnitを使って品質担保をしようとしたという話。
でも、考えたら10年以上前のPHPというと、変数スコープがグローバルなものが多く、おまけに移行できずに塩漬けされたソースコードが山積しているという印象があります…
ただ、以下のことは私も納得しました。
-
- 既存テストや重要機能に関する小さな関数等はカバレッジを取得する
- トランザクションスクリプトは取捨選択して見えている箇所のみカバレッジを取得する
開発合宿のススメ!
このLTは、PHPは全く登場しませんが、開発合宿はやったほうが良いという話。
聞いていてPCは使わず、コミュニケーション重視というのはちょっと意外な感じがしました。
普通開発合宿といったらPCを持ち込んで、ひたすら黙々とコーディングをしているイメージでしたが、このLTを聞いて「こんなやり方もありなんだな」というのを実感しました。
【スライド】
https://speakerdeck.com/ytajima/phpcon2019-kai-fa-he-su-falsesusume
企業および書籍ブースにて
休憩時間に行ってみましたが、33社も出展しているので、かなりのスペースを取っていたことにびっくり…。
朝は、そんなに混んでいなかったのですが、午後からかなり混んできてました。
この企業ブースを利用してスタンプラリーがあったのですが、シール10枚が当たりました。
また書籍のブースもあり、実際に登壇された方が執筆した書籍も販売されていました。
懇親会にて
当日スタッフとしての会場片付けの作業があったため、30分ほど遅れてしまいましたが参加することができました。
LT大会
懇親会途中には、LT大会もありました。
まさか「失敗から学ぶ RDBの正しい歩き方」の闇版が出るとは…。
しかも、「データベースは死ぬ」ことがあるという話が。
ちなみに、懇親会のLTはこんなユルい感じで決まりました。
記念のケーキ
最後には、PHP Conferenceの20周年記念のケーキが!!!
とにかく、時間があっという間に過ぎたのは言うまでもありません。
最後に
今回、初めてPHP Conferenceに参加しました。
参加者が1400人強だったこともあり、本当にバタバタしながらあっという間に過ぎたという感じでした。
聞きたかったセッションがいくつかあったものの、スタッフ兼務のことを考えると断念せざるを得ませんでした。
しかし、セッションなりLTを聞いていて「これは試してみようかな」というのがありましたので、またブログ等で形に出来たらと思っています。
次回は、一参加者として行こうと思います!
最後は、色々とおまけをご紹介して終わりたいと思います!
ノベルティとパンフレット
参加者に配布された「ノベルティ」や「パンフレット」はこんな感じでした。
とにかくパンフレットの量がハンパないです!
(写真を撮る関係で抑えてますが、実際はかなりの量です。)
また、当日スタッフとして関わっていたため、「ElePHPant」というPHPのマスコットキャラクターのぬいぐるみを戴きました。
ちなみに、日本では今回が初めてとのことでした。
小さいものを戴いたのですが、大きいものもあってこちらは10000円します(笑)
打ち上げ
最後は、スタッフ間での打ち上げがありました。
なんか不気味な感じ(笑)
では、また!