PHPerの学びの場「PHPカンファレンス2019」に参加した
自身としては今年で3回目の参加となるPHPカンファレンス2019に参加してきた.年に一度開催されるPHPカンファレンスは今年も盛況でとても学びのある面白いセッションが多かった!自分の参加したセッションのメモと感想を残そうと思う.
MVCにおける「モデル」とはなにか
MVCにおけるモデルって何だっけ?という技術よりもむしろ思想や概念に近いお話をされた.
- ドメインモデル
メンタルモデル
- メンタルモデルとは頭の中にある「ああなったらこうなる」といった行動のイメージを表現したもの
- 道具から適切なメンタルモデルを構築するにはフィードバックも重要.フィードバックに即時性がないとメンタルモデルを作り上げられない.
- コンピュータのメンタルモデルを作るのは難しい
- ユーザイリュージョンとは,ユーザに錯覚を起こさせることで本来なら理解し難い対象をあたかも理解したかのように思わせること.
- スプレッドシートはユーザイリュージョンが働いているいい例
- コンピュータのメンタルモデルにおいて,人は作業そのものに取り組んでいる状態がいい
パーソナルコンピュータ
- システムと個人の関係を変える
- 人がシステムをコントロールする.そのために,コンピュータの言語を理解する必要がある.
MVCとは何か
感想
MVCについてこんなに考えたことはなかったし,思想や概念の話がメインですごく頭を使った.理解が追いつかない部分もあったが,自分の中にあるふわっとした考えを深めて言語化できそうな情報源や言葉を知ることができたのでまた後で見直したい.
徳丸先生による徳丸試験例題解説とPHP7初級書籍贈呈キャンペーンと市場動向
ランチセッションは2019/12から始まるWebセキュリティ試験(通称徳丸試験)の例題を徳丸先生自ら解説された. www.phpexam.jp
大学院生の頃に「体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践」(通称徳丸本)を読みふけっていたので出題された3問の例題に正解できた🎉出題範囲は徳丸本(第二版)からだそう(ただし7章 脆弱性診断入門は範囲外)なので受けみようかという気になってきた.
思想と理想の果てに -- クリーンアーキテクチャのWebフレームワークを作ろう
クリーンアーキテクチャのフレームワークを作っているお話をされた.
- クリーンアーキテクチャを推す理由は,本質ではない悩みから解放するため
- ヘキサゴナルアーキテクチャはプラガプルを実現
- クリーンアーキテクチャの根底にあるのはSOLIDの原則
- SOLIDの原則の中でも「依存関係逆転の法則」が重要
- データモジュールを変更したときに,ロジックも巻き込まれてしまう.インタフェースを用意することで,変更時はロジック側が主導権を持つように依存を逆転させる.
- クリーンアーキテクチャはファイル多すぎて作成が大変かつWebのビューに微妙にマッチしないので,フレームワークを作る(本題)
- クリーンアーキテクチャで必要なファイルを作成するスキャフォールディング機能を作る
- PHPのプログラムを作成するパーサを作成したが,似たようなものが存在し「車輪の再開発」をしてしまった.しかし,欲しい機能が微妙に足りないので自分で作成したパーサを使った.my favorite 車輪を作ってみるのも大事.
- フレームワークもクリーンアーキテクチャで作る
- Webの考え方とクリーンアーキテクチャが致命的に合わないのでMVCを捨て,戻り値をなくす
- Laravelのmidleware使ってビューを楽に実現できるので,Laravelのプラグインとして作る
- まだフレームワークではなくプラグインなので,フレームワークとして必要な機能を入れたプロダクトを作る
- 10年くらい経つとフレームワークを入れ替えることがある.クリーンアーキテクチャはフレームワーク非依存なのでそこがよい.
質疑応答
Q ユースケースからのエンティティは直接操作してよい?
A ユースケースからのエンティティはインタフェースを介さないので直接操作してOK
感想
前半部分のクリーンアーキテクチャの解説がとても分かりやすく,それだけでもとても勉強になった.フレームワークを作成する話では試行錯誤の様子をたくさん話されていた.大事なポイントはアウトプットすると情報が集まってくるだと思う.新しいことにチャレンジするには,まずやってみてアウトプットして周りからの反応やアドバイスをもらいさらに改良していくことの重要さを改めて感じることができた!
Webサービスのトラブルの現場 ~ Webサービスの今と昔 ~
昔に経験した現場のトラブルを振り返り,今はどのようなことに気をつければよいかをお話された.
Webサーバが死ぬ原因
- アプリケーションのバグ
- テストを書こう
- ハードウェア障害
- アクセス過多
- モニタリングしよう
- trdsqlがめちゃくちゃ便利
- おや?共有サーバの様子が...
- 一緒にホスティングされている他のサービスがおかしいと巻き込まれることもある
バッチの突き抜け
- 結構気づきにくい
- php.iniとかでmaxMemoryを-1にして,めちゃくちゃメモリを使用する処理を実行するとswapが起きて死ぬ
- 実行結果を知ろう
- 可視化しよう
サイトにアクセスできない
- どこのレイヤーがダメなのか把握するためにしっかり切り分けする.
失敗から学ぶクラウドの正しい歩き方
- データストアが死ぬと対応が難しい
- 制御できるところできないところを知る
- 自分たちの急所を知る
まとめ
- 便利になるということは抽象化されている.トラブル時は抽象化されているものの仕組みを知っている必要がある.
質疑応答
Q 障害など何か問題が起きた時,自分の知らないところが原因だった場合はどうやって調べる?
A 知らないことはTwitterで調べたりして,知らない人から聞くことも1つの方法.
感想
全体としてインフラっぽい内容だった.身の周りで起きた障害を紹介しつつ,n+1構成やシステムの切り分けの話など基本的な部分の大事さをお話された.システムを作るにあたって基本は大事だしおろそかにしてはいけないと感じた.さらに,trdsqlといった便利なツールや可視化の方法などは実務で使えそうでとても有意義な時間だった.
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法
オニギリペイという架空の決済システムのロールプレイを通してサービスの構築を学ぶ.
オニギリペイの8つの試練
- キャンペーンを実施したら,某筋からお叱りを受ける
- ログインIDを発番したのに不正ログインが多発
- 二段階認証を強制したのに不正ログインが止まらない
- ヘルプデスクが狙われる
- スマホアプリの脆弱性を指摘される
- スマホアプリのアップデートを広報したらアプリがリジェクトされる
- 「あの有名な脆弱性」で大変なことに
- WAFを導入したらかえって脆弱になる
オニギリペイから学ぶ今後のセキュリティ
- 開発時のセキュリティも重要だが,上流からのセキュリティの検討も大事
- リスクアセスメントの方法
- ベースラインアプローチ:既存の標準や基準をもとにベースライン(自組織の対策基準)を策定し,チェックしていく方法.徳丸本を活用するのもよい.
- 非形式的アプローチ:徳丸さんのような専門家に聞く.
- 詳細リスク分析:情報資産に対し資産価値,脅威,脆弱性,セキュリティ要件を識別し,リスクを評価していく.
- 組み合わせアプローチ:よく用いられるのがベースラインアプローチと詳細リスク分析のいいとこ取り.
- 業務フローでリスク分析
- 発注がセキュリティを左右する.発注者が提案書の内容に関与できるのは提案依頼書を出すタイミングだけ.
- 脅威分析はIPAが公開している「IoT開発におけるセキュリティ設計の手引き」がよくまとまっているので参考にすると良い
感想
業務で開発現場を離れインフラをメインでやるようになってからセキュリティについて考えることが増えてきた.そんな状況の中,今起こりうるシチュエーションでセキュリティのお話を聞けたのはすごくよかった.開発現場レベルのセキュリティももちろん大事だが,脅威分析やセキュリティアセスメント等の上流工程でのセキュリティも重要だということをしみじみ感じた良いセッションだった.
www.slideshare.net
LT
PHPカンファレンスはメインのセッションの後にLTが行われる.弊社からも3人の新卒が発表したので紹介させていただきたい.
1人目は新卒2年目の@yu12co_mmさん.1つのリポジトリで管理されていた2つのサービスを分割する際に使用したビジュアルリグレッションテストの話をされた.この言葉を聞いたことのない方はお読みいただければと思う.スライドのストーリーも面白い!
2人目もまた新卒2年目の@shimamizさん.PHP力を高めるためにPHPで競技プログラミングをやった話をされた.PHPtという標準入力で便利なツールがあるらしい.
2年目エンジニアがスキルアップのためにPHPで競プロやってみた by 瑞 | トーク | PHP Conference Japan 2019 #phpcon - fortee.jp
3人目は新卒6年目の@_ohshigeさん.今まで実績のないクリーンアーキテクチャを採用してプロダクト作った時の話をされた.クリーンアーキテクチャの導入を検討しているそこのあなたにおすすめ.
全体の感想
毎度のことながら参加したすべてのセッションがとても面白かった.登壇者や関係者のみなさまにお礼を申し上げたい!
PHPにあまり関係のないセッションもあったりするが,それがとても勉強になったりして,いい意味で裏切られる感じが好きだ.
一応PHPカンファレンスなのでPHPの話もしておくと,次のPHP8ではJust-In-Time Compilerにより処理が早くなることといくつかの構文のシンプル化と型の強化が見所だ.PHP7が出たと思ったのがすごく最近な気がするのにあっというまにPHP8がくる.開発が早く活発なのでこれからも楽しみだ.
あと,先輩や後輩が発表してたのを見て刺激をもらったので自分もどこかで発表したいなと思った.また来年も行くぞ!