はじめに
今年3回目(人生でも3回目)PHPカンファレンス関西2025 に参加しました。
1回目の参加記録:PHPカンファレンス名古屋2025 に初参加しました
2回目の参加記録:PHPerKaigi2025に参加してきました
声援や驚いたときのリアクションが大きい気がするのは、関西ならではなのかな?と感じました。
また、前回までは1人で参加していましたが、今回はなんと(社内でしつこく宣伝した結果)同僚が初参加と相成りました。
以降、感想です。
ソフトウェア・デザインに向かおう ~ 世界を(ちょっとだけ)変えるソフトウェアを目指して ~
「アーキテクチャー」とは
いわゆる「外部設計(ユーザー目線)」と「内部設計(開発者視点)」の両方にまたがり、
設計に先行して検討する「問題と見立て」と「解決の枠組み」であり、
ソフトウェアの構造自体のことではない。
今まで自分が思っていた、アーキテクチャーは「フレームワーク」とほぼ同様の概念という認識を持っていましたが、講演を聞きながら、アーキテクチャーとはドメインの問題を解決するための考え方、手法なんだなと理解しました。
例としてあがった「多次元のデータ集計」(営業別、四半期別、商品グループ別集計、のようなもの)のアーキテクチャーの変化を聞いて納得
- 20年前のシステムでは、リアルタイム分析が(コンピューターの資源的に)困難だったので、事前に集計データを作成する必要があった
- 現在はModelを変えてbitmap index+特殊な範囲集計のアルゴリズムを適用することで、大規模データもリアルタイムで集計できる
- 技術的な可能性を検討し、それを素早く検証して、洗練させていくことで、新しいアーキテクチャーが生まれる
- ⇒ テクノロジードリブンにより、旧来のアーキテクチャーを新しいアーキテクチャーで置き換えていく
- 技術的な可能性を検討し、それを素早く検証して、洗練させていくことで、新しいアーキテクチャーが生まれる
PHPでお金を扱う時、終わりのない謎の1円調査の旅にでなくて済む方法 ~ドメインコードの具体例を交えて~
金額を扱ったことがあるエンジニアなら「あるある」な端数計算のバグと、その解決方法についての講演でした。
僕は以前、C#をメインにしていたので「金額計算は「decimal」を使え、以上」という感じで、PHPでどのように計算するのか?は気にしたことがなかったため、大変多くの学びがありました
- PHPでは「BCMath」を使う(0.1を10回足したら1.0にちゃんとなってくれる)
- 比較演算も「BCMath」の機能を使う('0.1'と'0.10'を同じ値と判断してくれる)
- 型変換にも気を付ける(数値と文字で結果が全く変わる場合がある)
- 値を文字列で持つのはつらいので、BCMath\Numberを使う(PHP8以降)
- 引数の型に意味を持たせるため、ValueObjectを使うと良い
ああ、すみません。まずPHPのバージョン上げるのが先ですね・・・
また、ValueObjectを使ったことがなかったので、目から鱗が落ちました
(変数名ではなく、型に意味を持たせることができる+振る舞いの制限をすることができる)
お昼
ランチマッチングで初対面の方々とお話をしながら食べました。
知り合いが少ない参加者には、本当にありがたい企画です。
「基本的にclassは使っていない、ファイルが大きくなるとrequireで分割する」という話があり
最初???となっていましたが、話を聞いているとなるほどなと思いました。
「外注をせずにほぼ1人で社内システムを作り上げている。今の正しいやり方を学びたいから参加した」
PHPの奥深さ、懐の広さを改めて感じるランチタイムになりました
(今年初参加の自分も含め、カンファレンスは新しいことを学ぶ良いきっかけだなと感じました)
PHPStan 型付け体験教室
うさみさんのワークショップに参加しました。
ワークショップ自体はそんなに難しくないのですが、慣れない作業に少々手間取りました。
(TypeScriptの型と考え方が似ていると気が付いてから、理解が進みました)
以前、ペチコン名古屋の「PHPは脆弱」←これの原因と抜け出す方法についてでPHPStanの存在を知り、試しに社内で使ってみたのですが、あまりの指摘の多さに一時中断中・・・
型定義がしっかりしていると、バグが少なくなる、開発がやりやすくなるというだけではなく、AIの自動生成や、修正が行いやすくなるという副次的な効果もあるはずです。
順を追って少しずつ社内に適用していこうと思っています
PHPStanへのコントリビュートを通して更にPHPStanに詳しくなった話
続いてもPHPStanの講演
静的な型検査にもかかわらず、動的解析もやっているというPHPStan。
組み込み関数は10000行以上ある配列に、型の定義を持っている(PHPはそんなに組み込み関数あるの!!!)
それでいて現実的な時間で、引数に応じて戻り値の型を推論してくれるという、ちょっと凄すぎて頭がオーバーフロー気味でした。
LT
私たちはなぜ PHP をアップデートしないといけないのか? 〜攻めと守り、両面から見たバージョンアップの本当の意味〜
毎回、身につまされる思いで聴く、アップデートの話題。少し進みましたがもう一歩なんとか進めようと思います。
PHPでResult型(クラス)やってみよう
分かりやすく、便利なのでできれば社内の標準にしたいなと思いました
懇親会
懇親会前の待っている時間に、近くの方と話しをしたところ豊岡から参加されている方でした。
昔仕事で「植村直己冒険館」の隣にしばらく滞在したことがあるよ、と伝えたところ場所を一瞬で特定され・・・懐かしい話で盛り上がりました。
(ペチコン名古屋でも隣の人がたまたま同じオフィスビルだったので、思った以上にいろんなところで繋がりがあるんだなーと、関心しきりでした)
懇親会では、PHPカンファレンスに初参加、そして継続的に参加しようというきっかけになった、たつきちさん(@ttskch)、長谷川さん(@tomzoh)とお話ができて、テンションが上がりまくりました!
また、うさみさん(@tadsan)、たけてぃさん(@takeokunn)とはエディタがらみの濃ゆい話、とても興味深かったです。
呑みすぎて一人でぼーっとしていても、いつの間にか誰かと話しをしている、この雰囲気は本当に素晴らしいなと思いました。
最後に
暖かく迎えていただくPHPカンファレンスのスタッフのみなさま、いつも学びと刺激をいただく登壇者のみなさま、本当にありがとうございました。
毎回「すごいな~」と思うだけではなく、少しでも手を動かして、仕事に取り入れていこうと思っています。
(PHPCS+フォーマットの導入ができたので、PHPのバージョンアップや、PHPStanの導入リベンジに取り組もうと思います)
次回は少し観光も込みでどこかに参加したいなと思います(なんかもったいなく感じできた)。
まだどこかでお会いできたらぜひ声をかけてください。