はじめに
今年もPHPカンファレンスの時期になりました。
オンライン視聴するライトユーザーですが、毎年楽しみにしております。
2024年はTrack1,2のみオンライン視聴できたので、レポートしていこうと思います。
(オンライン参加が朝イチの段階で60人くらい...少なくないか?)
対象者
この記事は下記のような人を対象にしています。
- PHPカンファレンス2024に参加したいが出来なかった方
- アーカイブ動画を見たいが、どれから見るか迷ってる方
・あくまで個人のメモのため、実際の内容と異なる場合があります
・興味のある部分しかメモしていないので、網羅的でない点、ご了承ください
・Track1,2のみオンライン視聴可能だったので、その範囲のレポートです
PHPの今とこれから2024
- PHP8.4のリリースマネージャに日本人が起用
- Nikita氏がPHP開発から離脱→PHP Foundation設立(2021)
- セキュリティ修正が4年に延長
- とはいえ8.0までEOL
- 8.4の変更ポイント
- JIT強化(新CPUサポートが容易に)
- プロパティフック(set/getが簡易に)
- 非対称プロパティ可視性(readonlyよりも自由度高くpublic/protectedが設定できる)
- 遅延オブジェクト(状態が参照/変更されるまで初期化を遅延)
- HTML5対応
- array_find系関数追加
- 廃止:暗黙のnullable型宣言
- 廃止:GET/POSTでsession利用
- FrankenPHP
- Goを利用したWEBサーバ
- apache / nginxより高速
PHP RMは何をする?コア開発者と兼任するメリット/裏話
- マイナーバージョンごとにRMを3人(ベテラン1人+ルーキー2人)置く
- 立候補社が多い場合は選挙で選定
- 前ver.のルーキーが次ver.のベテランに昇格
- Slackでマイナーバージョンごとの部屋がある
- 毎週木曜にリリース
- マージ許可/却下の判断
- セキュリティ修正の手動マージ
- コア開発者は月1回MTGあり
- コミュニケーションは英語(googleMeetでリアルタイム翻訳字幕も活用)
PHPで学ぶプログラミングの教訓/PHPで学ぶバックエンドソフトウェアアーキテクチャ選定の勘所
教訓
- 再代入を避ける
- システムハンガリアンを避ける
- アプリケーションハンガリアンはOK
- ド・モルガンで読みやすくしよう
- デットコードを葬る
- DRY
- OAOO(Once And Only Once)
- ループ処理で入力・処理・出力を分けると読みやすい
- 相互参照を避ける(Mediatirパターンを利用する)
- Tell, Don't ask
- KISS
- Secure by Default
- 継承よりコンポジション
- 単一責務の原則
- クラスの変更を要求する主体が一つであるべき
- 開放閉鎖の原則
- 読めないコードはない
- 予測するな、計測せよ
- 書く努力をせよ
- ボーイスカウト原則
- ルールよりレール
アーキテクチャ選定
- ヘキサゴナルアーキテクチャ
- ポートとアダプタ
- ビジネスロジックをアプリケーション内に留める
- レイヤードアーキテクチャ
- クリーンアーキテクチャ
- どう選ぶべきか
- チームの成長段階次第
- 自走できるなら:ヘキサゴナルアーキテクチャ
- 成長途中:コード自動生成ツール導入+クリーンアーキテクチャ
- チームの成長段階次第
そーだいさんに聞く!コミュニティとともに在るエンジニアの良いキャリアの歩み方
- そーだいさんも自分と同じく他業種からエンジニアになったとのことで、励みになった
- 自分の軸を見つけること
- 色々経験してみて、楽しいなーと思ったものを残す、でOK
- 自分が好きな動詞に注目すべき
- ゴールを決めるのは大事だが、ライフステージで変わるので、固定しすぎも良くない
- マネージャーとプレーヤーを行ったり来たりするキャリアもいいよね
- バッターボックスに立つ回数を増やせばヒットも増える
- エンジニアにおける技術力とは「ソフトウェアを通じて問題解決する力」
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策
- アクセス数が多いだけではDDosとは言えない
- 対策方法
- モニタリング
- Rate Limit設定(サーバーのリソースを使う)
- リバースプロキシ
- CDN…第3,4層
- WAF…第7層
- EDos攻撃:AutoScalingなどで大量のリクエストを捌いてしまうが、高額請求されてしまう
- 攻撃側よりも防御側の方が圧倒的に不利
情報漏洩させないための設計
- DDDのコンテキストの分離の実例紹介
- アクターによって、必要な情報だけ出し分けたい
- PHP StanのNarrowing Typesを活用
- deptracで依存して良いレイヤーを設定することで、事故を防ぐ
責務を分離するための例外設計
- Error
- Exception
- LogicException
- RuntimeException
- CustomException
- 問題がある場合は早く中断する
- 解決できない例外は呼出側に任せる
おわりに
カンファレンスは楽しい!
また来年も参加しようっと。