ほげほげ見聞録

技術メモ、備忘録、使い方はそのうち覚える

PHPerKaigi 2018本編に行ってきた

行ってきた

dwmemo.hatenablog.com というわけで続き。


内容

本編の発表は六つ(とランチセッション)とLT。
前夜祭が行われたホールでは発表が行われるTrack A、隣ではコミュニケーション用のTrack Bの二面構成になっていた。
聞けた発表メインにメモを書いていく。

今からでも出来る!Webサービスモニタリング!!

紹介文

スピーカー:曽根 壮大(@soudai1025)さん

サービスを作ることの大切さは皆さんよく知っているとおもいます。 しかし如何に育てるか、如何に運用していくかはあまり語られていないのではないでしょうか? そこで今回は - サービスの監視とはなにか? - 運用とはなにか? - どのようにして未来を予測していくか に注目してサービスのモニタリングについてお話します。 この話を聞いた皆さんは明日からサービスの見え方がかわるはず!?

speakerdeck.com soudai.hatenablog.com

モニタリングは大事だよという話。
モニタリングが必要な理由は、素早く障害に気付く為、原因を究明する為、未然に防ぐ為…なのだそう。
自分はインフラ担当でないので、動き始めたサービスがどんな状態かを知らされない。この発表で、サービスを大きな「生き物」として見る必要があると分かった。
モニタリングするにも、サービスを構成する層は複数あるので各所やりやすさが異なる。クライアント部分での不具合は環境が再現できない場合が多いので自分もよく悩まされる。
「リソースを正しく使えているか(不足しても余らせてもダメ)」という話は、PG目線だと気にしない点だった。
また、誰も見ないグラフは意味がないから消す(データだけは取る)というのも、大事だなぁと思った。思い切りが必要だと思うけど。
まとめ「テストコードはプログラムの品質の可視化、モニタリングはサービス品質の可視化」!

スライド中参考ブログ:2015年Webサーバアーキテクチャ序論 - ゆううきブログ

SOLIDの原則って、どんなふうに使うの?

紹介文

スピーカー:後藤秀宣(@hidenorigoto)さん

オブジェクト指向プログラミングを勉強したことのある人なら、一度は聞いたことのあるSOLIDの原則。 特にオープン・クローズドの原則って、意味が分からない! という感想を持った方は少なからずいらっしゃるかと思います。 この講演では、PHPのコード例を示しながら、どのような状況でSOLIDの原則を持ち出すのか、および、原則を適用するとコードがどのように変化するのかを、分かりやすくお話します。

speakerdeck.com blog.hidenorigoto.com

SOLID原則が「良い設計」をよく反映しているという前提で、新人PHPerのコードをリファクタリングしていきながらSOLID原則の有用性を見ていくストーリー仕立ての発表。
どうしてコードが読みにくくなっているのか、どのポイントに注意するとSOLID原則に準拠したコードが書けるのかが分かりやすかった。
時間にせかされてしまうとついついSOLID原則を考えるのが疎かになるし、思ってもみなかったところがバリエーションになるプロジェクトにいるので、今一度勉強しておきたいなぁ。
自分はFactoryパターン使う場合が殆どなので、対応の判定を各クラスに持たせるのが良いかもなぁと思った。

ランチセッション 株式会社ORATTA

スピーカー:渡辺さん
speakerdeck.com

海鮮丼美味しかったです!! ごちそうさまでした!!!
ランチ食べながらの、宣伝とのろけ話が挟まる発表。
バイナリセーフかどうかは罠が多いから気を付けないとなぁ。
いつか自分にもWBMPを使う機会が来るんだろうか…。

サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技

紹介文

スピーカー:yoku0825(@yoku0825)さん

MySQLのバックアップの話をします! - バックアップ手法のおさらい - mysqldump, 物理コピー, .. - 複数のバックアップ手法を組み合わせて運用する - 日々のバックアップにまつわるタスク - どこがどう壊れた時にどうリストアするか - ぼくがかんがえたさいきょうのサーバー1台で自作サービスを作ってる時のちょっとのコストで実現するバックアップのしくみ - ※個人の感じ方によります

www.slideshare.net

スライドの背景の可愛い子が気になって読むのに時間がかかってしまう ><
※追記
コメントいただいて判明。
日本MySQLユーザ会の「非公式な」キャラクター、舞奈たん!
https://github.com/yoku0825/MyNA/tree/master/unofficial_myna_girl

バックアップにも種類があるんだな、沢山あってそれぞれ一長一短みたいだ。
リプレイとはなんぞや、専門用語ではなくログのクエリを再実行する…という使われ方をしている?
グローバルトランザクション識別子 (GTID)とは、各トランザクションに関連付けられる一意識別子だそうで。なるほど分からん。
DB周りはクエリを走らせるといった基本的な部分でしか使っていないので、バックアップという運用面での話は新鮮だった。

参考URL

発表内容の発端の記事:ログの復旧を実施しました – お題箱ブログ
関数を使う場合のリプレイ参考:日々の覚書: MySQLのNOW関数はどのようにして安全にスレーブでリプレイされるのか
GTID :MySQL :: MySQL 5.6 リファレンスマニュアル :: 17.1.3.1 GTID の概念

Hackで作るマイクロフレームワーク

紹介文

スピーカー:竹澤有貴(@ex_takezawa)さん

PSRを活用して、phpのライブラリとの互換性をもたせながら、 自由に入れ替えが可能なライブラリ、コンポーネント作りの作法、 Hackのタイプチェッカーと厳格モードとの付き合い方、 async awaitのハマりどころなどを共有し、 Hackにチャレンジしたくなる内容をお届けします

speakerdeck.com ytake.hateblo.jp

Hackは型チェックがちゃんとしているのがやはり売りなんだなぁ。
HHVM(HipHop Virtual Machine)なんでHipHopなんだろう?
Hackの為のPSRがあるというのは驚きだった。これからどんな独自進化を遂げていくんだろうか…。
自分は型が厳格なのが良ければC#とか他の言語使っちゃえばいいんじゃね…と思ってしまうが、PHPの延長線でできるというのは良いことかもしれないなと思った。特に初学者とか、PHPに慣れ過ぎて他の言語でギャップに苦しむ事がなさそう。

参考URL

Hack:HHVM/Hackはじめの一歩 - ytake Hatena
HHVM:HipHop Virtual Machine - Wikipedia
HHVM:Hack: a new programming language for HHVM | Engineering Blog | Facebook Code | Facebook

BEAR.Sunday

紹介文

スピーカー:郡山昭仁(@koriym)

DI、AOP、およびRESTは開発に役立つ強力なパターンです。BEAR.Sundayフレームワークは大規模PHPアプリケーションにも適用できる強力なアーキテクチャの基礎として採用し、アプリケーションにシンプルな美しさとパワーを提供します。このセッションでは3つのコア技術を説明しながら、フレームワークでどのように適用しているかを紹介します。

speakerdeck.com

この発表はTrack Bに行っていたので聞けなかった、残念…。以下スライドを読んでのメモ。
BEAR.Sundayって何ぞや、PHPのWebアプリケーションフレームワークらしい。
API駆動開発というものあるのか初めて知った。
発表の録画とかしてあったら聞いてみたいなぁ。

参考URL

BEAR.Sunday:BEAR.Sunday


Interactive Round Table テーマ2:DevOps/テスト/CI

司会者:渡辺一宏(@kaz_29)さん
(自動)テストの事が気になったので、ディスカッションメインのTrack Bに行ってみた。
1セッション20分で自分は30分程参加したが、あっという間に時間が過ぎていて驚いた。
テストを上手く回している人、回せていない人それぞれの話が聞けて良かった。
以下は出てきた話題のメモ。

  • テストを書く習慣がなく理解もないチームでテストを理解してもらうには?(書いたテストが間違っていたら意味がないと思われている)
    • あくまでツールとして使う事を分かってもらう
    • コードレビュー時にテストがないコミットをチェック、テストが正しいかチェック

テスト書くのが当たり前でない会社にいるので、以前行ったTDD読書会と同様に「この世界にはテスト書いている人類がいるんだ…良かった」みたいな気持ちになれた。
工数の事とか言われると下っ端は何も言えないので、どうにかこうにか働きかけるしかないのが悲しいところ。

  • メンバーが少ない場合にコードレビューをどうするか、皆が同じレベルでレビューが表層だけになってしまう場合

テックリード、聞いたことはあるけど自分の所にはないので調べてみた。
CTOの進化前みたいな感じだろうか。
テックリードという役割 – Shimpei Takamatsu – Medium

  • レビューのやり取りがそっけないと他の部署から仲が悪いのかと言われる
    • 絵文字やLGTMを使う
    • 修正してもらったらちゃんと返信する

仕事で絵文字はちょっと…と普段から思っていたが、文字だけだと情報量足りなくてきつめに見えてしまうのはあるかもなと。
こちらの修正、修正依頼に対する返答にお礼言うのはレビュー続きだと億劫になるけど、今後も続けた方が良さそうだ。

  • PHPUnitだとstaticメソッドのモックは作れないが、何か方法は?
    • Mockery使うとか
    • staticメソッド作らないのが手っ取り早い
    • 結局はテストしやすい設計にしていくしかない(ルンバが掃除しやすいように家具を配置するのと同じ)

テストを書き始める前から続いている案件をいじっていると、テストし難い事し難い事…。
DB周りとかFWの関数とかはstaticが殆どでどうしようかと思っていたけど、Mockery使いやすそうだし調査してみよう。
他にもrunkit等、真面目に探すとモック系は意外とあるんだなぁ。

  • Seleniumなどで画面の自動テストをした方が良いのか
    • 維持が大変、文言変わっただけでもテストを修正する必要あり
    • 最近は細かい動きにも対応してきたが、人力で確認した方が良い場合もある

確かに参加中の案件でも最初はSeleniumのテスト作っていたけど、FireFox未対応になったり開発が落ち着いたりして忘れ去られている。
FireFoxSeleniumは開発止まったらしいけど、Chromeは未だ息しているらしい。

  • CIやったらテストも走らせるようにした方が良い

この間Jenkinsおじさんをプロジェクトに組み込んだので、次はテストかな…。

PHPStanで始める継続的型検査

紹介文

スピーカー:hiraku(@Hiraku)さん

PHP7から戻り値の型も記載できるようになり、より静的解析をしやすくなったPHPですが、IDEやエディタの中だけでなく、CIのフローの中でも型検査を行いたいものです。 このトークでは、メルカリ社でも活用しているPHPStanというツールを取り上げ、型検査をCIの中で実行する方法や、今のPHPにおける型システムの解説を行います。

speakerdeck.com tech.mercari.com

コード解析はプログラムを動かして読む(dynamic)か動かさずに読む(static)かという分類。
同じ静的解析のSonarQubeは導入検討していたが、PHPStanは名前を初めて聞いた。
stableとdevでオプションに違いあり、設定も違うのでdev版の方がいいんだとか。名前からしてstableの方が良いのかなとか思ってしまうので、こういう話を聞けるのは助かる。
PHPDocを使うので書いてさえいれば楽に導入できそうかも。型固定配列(\DateTime[])が使えるのは初めて知った。
結局大事なのは、開発の負担を減らす・品質確保する事。それができるなら、dynamicでもstaticでも得意な方で柔軟に対応すれば良いという事が良く分かった。

というわけで早速、某案件のローカルにPHPStanを導入してみた。
結果、クラスのないファイルはエラーなし、クラスのあるファイルは「Class not found autoloadがどうのこうの」エラーが出た。
PHPerぢからが足りなかった…。ドキュメント読み直して動かせるようにしたいなぁ。
※追記 dwmemo.hatenablog.com

参考URL

PHPStan本家:GitHub - phpstan/phpstan: PHP Static Analysis Tool - discover bugs in your code without running it!
PHPStanの中の一部:GitHub - nikic/PHP-Parser: A PHP parser written in PHP
PHPStanの対抗馬:GitHub - phan/phan: Phan is a static analyzer for PHP. Phan prefers to avoid false-positives and attempts to prove incorrectness rather than correctness.
ReviewDog:reviewdog を飼ってコードレビューや開発を改善しませんか - haya14busa
PHPDoc:fig-standards/phpdoc.md at master · php-fig/fig-standards · GitHub



PHPerKaigi 2018セッションの動画

www.youtube.com
いつの間にか上がっていた…!
PCのオーディオが息してないのでまだ見れていないが、振り返り等に使えそうだ。

まとめ

自分はこの業界に入ってから外の勉強会に行った事が殆どなく、PHPerkaigiのような規模が大きめの会は初めてだった。
前夜祭の記事でも書いたけど、運営の方々が親切に対応してくださったので安心して会場に向かえたのは本当に感謝感謝です(なお初日は勢い余って練馬文化センターに突撃した模様)。
PHPのコアな面、サービスの一つとしての面等、普段の仕事では考えもしなかった話がたくさん聞けたのは得難い体験だったなぁと思う(呟きすぎてTwitterがロックかかったりしたけどそれはそれ)。
あとは、前夜祭の方が会場がノリノリだったので、本編もBeerを早めに解禁しても良かったのでは…!(自分は呑めないけど周りがほろ酔いでフワフワしている雰囲気は良いなと思ってる)
何はともあれ、次回も参加したいと思える楽しいカンファレンスでした!!