見出し画像

PHPカンファレンス関西2024に参加してみた

  • PHPカンファレンス関西2024に行ってきました。

  • 下記に学んだこと等をトーク毎に書いていきますので、もし間違い等あればご指摘ください 🙇

  • PHPカンファレンスは今回が初参加です。


レガシーシステムへのPHPStan導入から半年での課題と効果

  • 最近のPHPの動向として、型宣言やReadonlyプロパティの導入といった、条件を厳しくする流れがある

  • 静的解析ツールを使って型チェック等を行うことによって、よりクリーンなソースコードとなる

  • PHPでこれまで使用してきた静的解析ツール

    • PhpStormのinspection

    • SonarQube

  • PHPStanはレベル0〜9まで設定でき、下記のようなことを解析できる

    • 配列の要素の型が指定されているか

    • nullable型に対して直接呼び出していないか

  • 解析レベルが高い状態で運用するために、既存コードは解析から除外しておく

    • 既存コードに導入するとエラーが(大量に)発生するため

RDBアンチパターンと戦う - 削除フラグ 完全攻略ガイド

  • 削除フラグはなぜダメなのか

    • 削除フラグがtrueのデータ(deleted_atがnullでないデータ)を参照していると、会社は削除したのにユーザー情報は削除されてない、といったことが起こり得る

    • インデックスの利用が難しいため、パフォーマンスが低下する

    • 削除されているかどうかの条件が毎回追加される

  • 既存のテーブルを新しいテーブルに移行する

    • ユーザーテーブルの場合はuser_active、user_leaveのように分ける

    • ビューを使って削除フラグがないテーブルを用意する

  • 一気に全て移行するのはダメ絶対

    • ER図を書き、そこからどうするか検討する

    • 可能ならば1テーブルずつ作業する。とにかく段階的に移行すること。

    • データベースの不具合は致命的

  • データベースの寿命はアプリケーションより短い

    • ソースコードをリファクタリングやリプレイスをしても、データベースそのものはなくならない

  • 失敗を恐れるのではなく、失敗できるようになろう

    • 手を動かしたものだけが世界を変える

レガシーとモダンなシステムが混在する開発環境を改善しよう

  • 登壇者は複数のシステムが絡み合っているシステムを担当している方

  • 開発環境の課題

    • 動作確認時、他メンバーに待ち時間が発生する

    • ソースコードやテストデータのコンフリクトが発生する

    • 開発手順がメンバーによって異なる

  • 現在の開発環境

    • システムの検証用の環境を1人1つずつ用意

    • Dockerを使ってコンテナ化

  • Docker環境について

    • コンテナ開発実行のためのスクリプトを用意した

    • スクリプト作成して、 PHPStormからユニットテストを実行できるようにした

  • WSLはシステムの連携を考慮したため使わなかった

    • WSLを使えばWindows内にLinux環境を作成できる

20年の歴史を持つプロダクトの開発チームの変革:技術広報の本質と効果

  • 登壇者は技術広報副部長とアシスタントマネージャー(エスカレーションマネージャー)を兼任していて、サイボウズのエンジニアブログを管理している

  • 以前は色々な闇の部分があった(ここでは省略します)が、それらを改善していった

    • 自分たちの取り組みに誇りを持てた

    • チームのエンゲージメントが高まった

    • 人のためになることをしようと思うようになった

  • プロダクトのヤバさや理想像は、開発サイドに留めるだけでなく、ビジネスサイドにも認識させる

  • レガシーで問題だらけのチームでは発信活動できないし、やっても継続できない

    • まずはチームを魅力あるチームにする

    • 情報発信しようという空気づくりをする

  • 記事の本数ではなく、記事を書いたことでチーム組織が良くなったかどうかの方が大事

その条件分岐って本当に必要?

  • 条件分岐禁止バンド

  • アンチパターンその1:ディープネスト

    • 早期リターンしてネストが深くならないようにする

  • アンチパターンその2:条件の重複と過剰な詳細化

    • 不要な条件が条件式に含まれている

      • 早期リターンできるものは早期リターンする

      • 条件が重複している場合はその重複部分を削除する

  • アンチパターンその3:処理を分割する

    • 1つのブロック(分岐)を関数で分ける

  • if文でネストしまくっていた過去の自分を思い出した

  • リファクタリングに関するトークは意識を高めるという意味でも定期的に参加した方が良いなと思った

PHPコミュニティ、その魅力と熱狂をあなたにも!!!

  • コミュニティによってエンジニア人生を満喫できるし、人生そのものが変わる

    • エンジニアって楽しい!

  • コミュニティの良さは人との繋がり

    • 自分のやってることを外の視点から知れる

    • 縁と縁がつながり、そこからチャンスが生まれるかも

  • コミュニティ成長サイクル

    • 楽しい→やる→アウトプット→良いインプット→楽しい→やる→アウトプット→良いインプット→楽しい→やる→アウトプット→良いインプット→(ry

    • アウトプットすることによって、さらに新しいことをインプットできる

    • コミュニティによってエンジニアとして成長していける

  • 登壇に躊躇しているあなたへ

    • 登壇したことありません

      • 最初はみんな初登壇

    • 話すことがありません

      • 今のあなただからこそ話す価値がある

      • 面白いこと、楽しいこと、共有したいことは今しか共有できない

  • このトークを聞いたことで、これからもコミュニティに参加し続けようと思うようになった

モデルとは何か

  • 世の中にあるモデル → ファッションモデル、プラモデル、食品サンプル、地図、ミニカー(チョロQ)

  • モデル(模型)のメリット

    • 長持ち、色鮮やか、雑に扱える、小さくできる、視点を変えられる

  • モデル(模型)に落とし込む時に何してる?

    • 現実の細部から、目的と関係のない特徴を削ぎ落とす

    • モデル(模型)を使うことによって、少ないリソースで要件を満たせる

  • モデルは現実のものだけでなく、概念で良い

    • PHPerが使うモデル → ActiveRecordパターンのモデル

    • モデルを通して、不要なものを捨てている

  • モデルはリクエストされたことに対して、その内容に応じたことをやる

PHPで学ぶセッションの基本と応用

  • 全てはCookieから始まった

    • ステートレス:Webサーバーがアプリケーションが状態を保持しない制約

    • 状態を持たせたいという欲求から、Cookieが誕生した

  • RFC6265を読んでみよう

  • Cookieについて

    • Cookieはリクエストやレスポンスのヘッダーに入れて、状態を管理する

    • CookieはブラウザとWebサーバー内でやり取りしているhttpに無理やり入れ込んでいる

    • Cookieには鍵となるIDのみ保持している

  • WAF(WEBアプリケーションフレームワーク)を使っていれば、Cookie周りは考慮されてる

    • PHPにSessionの拡張は入っている

    • Sessionの拡張を無効にすると、Laravelの場合そもそも動かない

  • セッション管理の仕組みを理解しよう。セッションをもっと勉強したいなら、徳丸本(安全なWebアプリケーションの作り方 第2版)を読もう(もっと勉強します 💪)

ほげ言語にあってPHPにない機能

  • 「ちょうぜつソフトウエア設計入門」の著者

  • PHPにない機能(詳細は↑のスライド参照)

    • ジェネリクス(型パラメータ)

      • Docコメントと静的解析ツールで何とか補助する

      • PHPStatに@templateがあるけど、TypeScriptの方が優秀

    • 等しさの推移性(暗黙型変換の厳しさ)

      • false == "" // true

      • ==は緩すぎる

    • 文字列以外のハッシュ辞書キー

      • キーは文字列のみしか指定できない

  • 最強のほげ言語なんてものは存在しない

  • PHPの生みの親のインタビュー

  • コミュニティの活発さはフィールドの広さ

おわりに

PHPカンファレンスに参加できて本当に良かったです。めちゃくちゃ良い刺激になりました。これからはこういったイベントは定期的に参加してみようと思います 。登壇者の皆様、スタッフの皆様、ありがとうございました!

この記事が気に入ったらサポートをしてみませんか?