弊社のプロダクトの1つ「NEXT ENGINE」。10年以上運営しているので、冗長なコード・誰が管理しているのかわからない箇所など、いわゆる"秘伝のタレ"と呼ばれているものが数多くあります。
そこで現在弊社ではこれらに対してどう向き合っているのかご紹介いたします。
PHPは動的型付け言語で型推論してくれますが、きちんと「型」があります。
昔のPHPでの開発は「型」をあまり意識せずプログラムすることが多かったのですが、
最近では保守性や堅牢性を重視するために、この点を意識して作ることが多くなっています。
今回のセッションでは、PHPの「型」の種類や使い方、メリットデメリットや実践について、わかりやすくお話しします。
PSR-7がPHPにおけるHTTPの標準的なインターフェイスとして採択されて久しく、それに対応するHTTPハンドラ/ミドルウェアの仕様であるPSR-15を使えば特定のフレームワークに依存せずWebアプリケーションを実装できます。ピクシブ百科事典はPSR-7/PSR-18ベースのWebアプリケーションで実装されており、このトークではその経験を踏まえたアプリケーション実装パターンについて紹介します。
この発表ではPSRで学ぶHTTP Webアプリケーションの実践などで説明しているHTTPとPSR-7の関係について知っていることを前提に、よりアプリケーション実装やユニットテストなどの実践にフォーカスして説明します。
PHPerKaigi2022は事前録画方式でした。それら動画を全チェックするパーソンによる、独断と偏見と主観によってまとめられた全トークの感想についてつらつらと語る動画です。
全部のトークを見きれないよ…という人、ぜひこのトークで全トークをキャッチアップし、タイムシフト再生など後日視聴の参考にしてください!
※動画内でも語っていますが、深夜のホテルで疲れたそして謎のテンションで一気に作成していますので、一部不明瞭、読み上げのミスがあります。ご容赦ください :bow: :bow: :bow:
さくさく開発を進めるにあたってコンテナイメージのビルドには時間をかけたくありません。
typoをなおしただけなのにvendorのインストールを待っている時間はじれったいです。
キャッシュを使って時間短縮しつつ、完成物は小さくまとめる方法を考えます。
時間があれば、継続的アップデートやLambdaで動かすPHPコンテナへの適用についても触れます。
みなさんはパフォーマンス改善のためにアプリケーションの最適化に取り組んだことがありますでしょうか?
何もデータベース構造を再構築したりと大規模な改修することだけが最適化ではありません。機能実装のついでに関連処理をリファクタリングしてあげるだけでも十分な最適化になります。
このトークでは気づいた時にちょっとリファクタできる程度のデータベースクエリの最適化Tipsを解説いたします。
5分間で可能な限り詰め込んでお届けします!
こんな方におすすめ
レガシーバージョンのPHPから、最新バージョンのPHPへ移行したい方へ
PHP5.3.2より前のバージョンのPHPだと、setAccesibleが使えません。
そのため、private, protectedなメソッド、プロパティをテストしたいときは、本体をpublicにするしかありませんでした。
「setAccesibleを使いたいからPHPのバージョンアップをしたい」でも「PHPのバージョンアップをするためにはsetAccesbleを使ってユニットテストを書かないと行けない」というジレンマにずっと苦しんでおりました。
しかし、今回runkitを使うことで、PHP5.3.2より前のバージョンのPHPでも、非公開なメソッドのテストをすることができるようになる方法を考案しました!
これを導入すれば、テストコードの実装がどんどん進みますよ!
みなさんよくご存知の通り、PHPには等価演算子が2つあります。
「==」と「===」です。
前者は緩やかな比較、後者は厳密な比較が行われます。
PHPやJavaScriptに馴染みのある方ならよくご存知だと思います。
言語問わずよく使う演算子の1つである等価演算子ですが、実際の言語仕様は知っていても
内部の実装は知らないなんてことはよくあると思います。
今回はみんな嫌いな緩やかな比較の実装がどこにあるのか、そしてどんな実装がされているのかをお話しようと思います。
N + 1問題とは、ループ処理の中で都度SQLを実行してしまうことで必要以上にSQLが発行されてしまい処理が遅くなってしまう問題です。
N + 1問題が存在していても、ユーザーに影響のない程度の処理時間なら改修する必要はありません。
しかしながら、データ量が増えたりページへのアクセスが増えることで後から問題になってしまうこともあります。
今回は、そんなN + 1問題をサクッと検出して、問題が発生する前にN + 1問題を撲滅する方法をご紹介します。
PHP8.0から追加された機能、Attributes。
これを使ったメタプログラミングの例として、クラスのプロパティにAttributesを付与することで
・データベース(PDO)から取得したデータをクラスのインスタンスに変換する
・JSON文字列をクラスのインスタンスに変換する(あるいはその逆)
といった処理が自動で出来上がるプログラムの解説をします。
PhpStorm 使っていますか?
ご存知の通り、PhpStorm は、開発を効率的に進めるための機能がたくさん搭載されており、PhpStorm を使いこなして開発を進めている人の作業を見ると、素早いコーディングに驚かされると共に、自分も同じように PhpStorm を使い倒したいと憧れます。
しかし、一方でいざテクニックを覚えようとしても、何から覚えていけばいいかとっかかりがわからず、結局自身の知っている範囲でのショートカットやテクニックのみを利用してしまうといったことはないでしょうか?
このセッションでは日常の業務で使えそうで、手をつけやすい PhpStorm のテクニックを段階ごとにまるっと解説し、少しずつ PhpStorm エキスパートに近づくことを目指します。
Pull Request(PR)ベースでCIを回している時に、「ここのコードがおかしいよ!」と分かりやすく指摘が入るのは、飛躍的に開発者体験をよくしますよね。
cs2prは、そんな良い体験をサクッと提供してくれるツールです。
GitHub Checks APIを用いて、PRの該当箇所上に指摘内容を表示してくれます。
(Reviewdogなどを利用している方にはイメージしやすいかも知れません。)
PHPCS、PHP-CS-Fixer、PHPStan、Psalm 辺りにはもちろん標準で対応しています!
ちょっと手間を加えれば、PHPUnitでも同様に「結果をPR上に出す」ことが可能になります。
どんな事をしてくれるのか?どうやって使うのか?を紹介します!
コーディングの中でいわゆる「共通化」について考えるとき、プロダクトコードとテストコードではやや違う観点が必要になるようです。テストコードを書き始めて間もない現場には「プロダクトコードは書き慣れているがテストコードには不慣れ」なメンバーが多く、レビュー時などにこの勘所をうまく説明できず困ることが時折ありました。
最近、DRY (Don't Repeat Yourself) 原則と対になる DAMP (Descriptive and Meaningful Phrases) 原則という概念に触れたことで、この状況を腑分けし言語化できるようになってきました。DRY と DAMP について最近考えていることをお話ししたいと思います。
高速化が進み、JITコンパイラも導入されたPHPですが、残念ながら高速なスループットを求められる現場においては他のコンパイル型言語が選ばれることが多いようです。
最近では、ISUCONにPHPで挑戦するものも少なくなりました。しかし、だからこそ!PHPでウェブサーバーを書いて、色んな言語に速度で挑戦してみましょう!