329 (金) 〜 331 (日) まで 練馬区立区民・産業プラザ Coconeriホール で開催されていた PHPerKaigi 2019 に行ってきたので、そのレポートです。

1 日目の レポートはこちらです。

【3/31 (日)】 2日目 セッションレポート

1日目 と同様に、2日目に実施されたセッションのレポートを、セッションの概要と、一言感想くらいで書いていきます。

10:25 #a マニュアルにない引数を与えるとどうなる?php-srcへのバグ報告をした時の話

  • 引数のデータ型を間違えると NULL が返ってくる。
  • strlen(array()), mb_strlen(array()) では 返り値が違う
    • mbstring 関数では違いがある
  • mb_check_encoding() はバージョンによって、引数に配列を与えた場合の返り値が大きく違う
  • PHP に対するバグレポート
    • 簡潔に、英語で書く
    • 再現方法を詳細に書く
      • 今回の場合、引数に空の配列を与えるのか、空でない配列を与えるのか、など
  • 多くの人が使う言語へのバグレポートは全世界に影響を与えているような感じで動揺する

私も GitHub で公開される OSS に PL を送ってマージされた経験がありますが、やっぱり多くの人に使われているものに貢献できるのは凄く嬉しさがあります。それが PHP のような利用者が非常に多い言語となると、その嬉しさはさらに大きいでしょうし、動揺もすると思います。このセッションではバグレポート時にチェックすべき項目、たとえば再現方法では「この場合では起こるけど、この場合では起こらない」みたいなことを漏れなく書く、中の人がわかりやすいように書くことに関して参考になる部分が多かったです。
PHP に限らず何かしらのバグレポートをする際の参考にできると思います。

10:50 #a PHPでURLルーティングをつくる

Router とは

  • パス部分のパース
    • 正規表現
    • 文字列探索
  • Router の I/O
    • inpute
      • path
      • method
      • routing definition
    • output
      • path
      • method
  • Routing map の生成
  • Path の階層は木構造
  • 自作の Router

Router を作るというのは想像したことがなかったので、とても面白かったです。Router って仕組みとしては URL の path とコントローラを結びつける っていう単純なイメージですが、その path の探索を効率よく行うためにはには木構造のアルゴリズムを理解する必要があったり、突き詰めると深いなと感じました。最近は、プログラムを書くに際してアルゴリズムとか数学的な知識も必要かなと思っていたところなので、やっぱりそういった内容の勉強は必要なんだと再確認しました。

11:25 #a Hack HTTP Request and Response Interfaces

  • HHVM and Hack Documentation
  • Hack とは
    • 魔改造されたPHP (昔)
    • PHP のコードはほとんど動かない (今)
      • まだちょっと動く
      • 少しずつ機能削除されている
  • PHP-FIG
    • PSR-*
  • Hack で PHP
    • PHP の型と Hack の型は別物
    • hhi ファイル (型定義ファイル)
  • 今後
    • HHVM で composer が使えなくなる
    • Hack 専用のパッケージマネージャーができる

「Hack とはなんぞや?」ということでこのセッションを聴いてみました。聴いた結果、 なんか PHP っぽいけど PHP と対立してる言語 ということはわかりました。(あんまりわかってない)
とりあえず言語の開発者を募集しているらしいので、気になる方は発表者の @ex_takezawa さんにコンタクトを取ってみてはどうでしょうか。PHP っぽいけど PHP じゃない、マイナーな言語ということで今後の楽しさがありそうだなと思いました。

12:20 #a ランチセッション

PHPerKaigi 2019 の Diamond Sponsor である 株式会社メルカリ の @hidenorigoto さんによるランチセッションでした。

メルカリのバリューについての話から始まり、後半は 視点視野視座 の違いの話でした。視(点|野|座) の話は非常にわかりやすくて面白かったです。
また、最後にあった 『変化のある環境に身を置く、飛び込む』という話はとても大事なことだなと感じました。Q&A タイムであった「転職を考えるきっかけは?」といった趣旨の質問に対するこたえも凄く良くて、その時々で重要視することが変わる (家族との時間を大切にしたい、チャレンジングな環境に身を置きたい など) というのを聞いて なるほどなと思いました。


ちなみに 2 日目 は 無事にランチチケットをゲットできたので、美味しいお弁当をいただくことが出来ました。

PHPerKaigi 2019 ランチ

13:30 #b アンチパターンから学ぶ、RDBの正しい設計

  • 他人の失敗を知る
  • フレームワーク依存症
    • 恩恵と制約
    • 特に顕著な制約は ORM
    • ORM は漏れのある抽象化
    • 制約と規約
    • Active Record パターンは良くない (View と Model が 1対1)
    • フレームワーク、 ORM は絶対悪ではない
    • リポジトリパターン
      • サービス、データ、リポジトリ
      • リポジトリ経由でデータを取得する
      • リポジトリは DB、キャッシュ、WebAPI からデータ取得する
  • 知らないロック
    • RDBMS の仕事はデータを守ること (正しく取得、正しく保存)
    • データを保存するだけなら S3 でいい
    • 暗黙的ロック
      • INSERT … SELECT 文
    • ギャップロック、ネクストキーロック
  • キャッシュ中毒
    • 劇的なパフォーマンス向上
    • システムの複雑度が上がる
      • トラブルシューティングが難しくなる
    • クエリキャッシュ
    • マテリアライズド・ビュー
    • アプリケーションキャッシュ
    • テストやモニタリングが難しい
    • 事故を防ぎにくい
    • そのくせ、キャッシュが絡むトラブルはクリティカル
    • ヒット率、更新頻度
    • 最初からキャッシュありきの設計にしない
  • まとめ
    • データベースの寿命は、アプリケーションの寿命より長い
    • 「失敗から学ぶRDBの正しい歩き方」を買おう

「すべては本に書いてあります!」 ということだったので、私も 失敗から学ぶRDBの正しい歩き方 (Software Design plus) を買おうと思います。(単純)
とはいえ、セッションの内容だけでも凄く面白い内容で、 RDB を使う上でのアンチパターン、正しい設計方法についての意識改革になりました。特に印象的だったのは「できることからやろう」ということです。 DB まわりのリファクタリングには結構な労力が必要になるので、既存のサービスに手を加えるなら、まずはアプリケーション側でどうにかできないかを考えてみる ということです。

14:15 #a PHP監視、サービスを守る為に行う不測の事態への努力

登壇スライド >> PHP監視サービスを守る為に行う不測の事態への努力

  • SLA 100% は幻想
  • What, Why, How
  • 雰囲気で監視しない
  • ユーザ目線での監視
    • ユーザの目的を把握する
    • 死活監視
    • HTTP ステータスコード
    • レイテンシ
  • 独自で監視ツールを作る (あえてのアンチパターン)
    • faultline
      • 最速での復帰を支援
    • FictionBase
      • faultline で監視できないミドルウェアの監視

昨年末辺りから一世を風靡した(?) 『入門 監視』 のポイントを抑えたセッションでした。私も 入門監視 は読んだので、その内容の復習ができたような感じで良かったです。入門監視 を読んでから実際に業務で携わっているサービスの監視方法も少し変更したりしているので、監視ツールについては今後もチェックして、どのツールで何が出来て何が出来ないのか、サービスごとに適したツールは何なのか、といったことを吟味できるようになれれば良いなと思いました。

PHPer Challenge

今回の PHPerKaigi では、 PHPer Challenge というゲームが裏で (表で?) 同時に開催されていました。ゲームの概要としては、イベントのサイト、スポンサー各社のブログ、会場内の掲示物、ノベルティなどなどに隠された 「”#” からはじまる文字列」 = 「PHPer トークン」 をどれだけたくさん見つけられるか というものです。文字列をみつけたら、専用のサイトに送信することでポイントが貰えて、最終的に獲得したポイントで順位を競うというゲームでした。
PHPer トークン が書かれている場所の例としては、上に書いたもの以外には、登壇者のスライド内や、突発的な LT で使用されたホワイトボードだったり、もういろんなところに存在してました。また、ちなみに各トークンは 100 〜 2000 pt で、最初に見つけた人から少しずつポイントが減少していく といったシステムだったようです。なので、同じトークンでも最初に見つけた人のほうがポイントが高いということです。
また「徳丸浩の挑戦状」と題して、徳丸先生が用意した 脆弱性を持ったアプリケーション の脆弱性を突くことで得られる PHPer トークンというのもありました。これに関しては Web アプリケーションの脆弱性の勉強にもなって、単なる宝探しゲームの域を超えたエンジニアっぽいゲームになってました。

で、最終的に私の順位はどうだったかというと…。

PHPerKaigi 2019 PHPerChallenge result

狙ってなかったものの、順位はゾロ目になりました。ただしゾロ目賞みたいなのはなかったようです。
ちなみに 1 位の方のポイントは 54,700 だったようで、どこにそんなにトークンがあったのか…っていう感じですね。
ただ、順位はともかくメインのセッション以外にもこういったお楽しみがあるイベントっていうのは、新鮮でとても楽しかったです。

2日目 と PHPerKaigi のまとめ

以上、2日目のレポートでした。本当は 15時頃からの LT も聞きたかったんですが、やむを得ず離脱…。あとから Twitter で #phperkaigi で流れてくるツイートを見ながら楽しそうだなーと、感じているところです。
2日目もコアな話、意識改革につながる話を聞くことができて良かったのと、美味しいお弁当も食べることができたのが良かったですね。


あとは、PHPer Challenge ですね。 1日目はほとんど会場内を探索できなかったので、2日目は少し探し回りました。結果的には上に書いた通り 33 位でしたが、ちょっとした宝探し感、徳丸先生の脆弱性を見つけるゲームについては楽しみながら脆弱性の勉強にもなるという、とても楽しいイベントでした。


で、初参加となった PHPKaigi、言語単位のカンファレンス でしたが、一言で言うと 楽しかった に尽きます。他の参加者とのコミュニケーションはほとんど取れませんでしたが、 Twitter では少しフォロワーも増えたりして、また次回もあれば行きたいなっていう感じです。個人的に今年の目標としては、いろんなカンファレンスとかイベントに参加する っていうのを掲げているので、先月の JAWS DAYS に続いて今回の PHPerKaigi 2019 にも参加できたのは、よい経験になりました。

最近は PHP ほとんど書いてないんですが、また久々に書いてみようかなと思うきっかけにもなりました。

運営のみなさま、登壇者のみなさま、お疲れさまでした。楽しい時間をありがとうございました!


以上、よっしー (michimani) でした。

Share to ...

0

Follow on Feedly


comments powered by Disqus