Slide 1

Slide 1 text

PHP に帰ってきました PHPカンファレンス愛媛2026 LT @msfukui 1

Slide 2

Slide 2 text

自己紹介 ● 福井 将之 (ふくい まさゆき) @msfukui ● PHP を使った Web アプリケーション開発に従事 ● 平日は東京、週末は山梨、たまに香川 ● 車とバイクに乗ることと猫とキーボードが好きです ● PHP もとても好きです 2

Slide 3

Slide 3 text

はじめに ● 2024 年に PHP を使った開発の現場に帰ってきて ● これまでを振り返って感じたことをお話ししてみます ● 10〜15 年ほど前からの昔話成分が多めです 🙇 ● 注意: 生成AIを使った開発の話はいたしません 3

Slide 4

Slide 4 text

主なプログラミング言語との関わり ● 1998年〜2010年: C / Perl ● 2010年〜2015年: PHP(5.x) ● 2015年〜2020年: Ruby on Rails, JavaScript / Vue.js ● 2020年〜2023年: (インフラ関連業務に従事) ● 2024年〜: PHP(8.x) (現職) 4

Slide 5

Slide 5 text

昔の自分(PHP 5.x のころ) ● 独自の Web フレームワークっぽいもの ● サーバサイドのマルチページ構成 + Smarty ● 手続き型のコードが大半 ● 初歩的な OOP の知識はあったが使い所はわからず でもそれで満足していました、あるものを除いては.. 5

Slide 6

Slide 6 text

「保守性」との闘い ● テストが書きにくい ○ リグレッションを確認する手段がない ○ バージョンアップのたびに全てを手動でテスト ○ 工数よりもまず、エンジニアとして気持ちがすり減っていく ● 抽象化ができない ○ C / Perl の CGI 由来の構造化設計の延長 ○ 似た処理が重複し、コードベースが肥大化 ○ 技術力が足りず、問題があることにすら気がつけない 6

Slide 7

Slide 7 text

Rails を選ぶ ● あるプロダクトのリニューアルプロジェクトに参加 ● PHP で行くか、別の選択肢を取るかを最初に議論 ● 幾つかの選択から Ruby on Rails を選択 ○ 個人的にはこの選択はよかったと思っています 7

Slide 8

Slide 8 text

Rails で学んだこと ● テストを書く形があることの大切さ ○ どこでテストを書くか、どのように書くかの型がある ● 自分の書くコードをできるだけ小さく ○ 規約に従ってできるだけフレームワークに任せる ○ gem / bundler で自分が作るものを減らす 8

Slide 9

Slide 9 text

書籍で学ぶ 保守性のある OOP 設計を実感を持って学べた 9

Slide 10

Slide 10 text

Web フロントエンドの開発と学び ● JavaScript / Vue.js を使った SPA の開発に参加 ○ TypeScript が盛り上がり始めた頃だったが採用しなかった ● 純粋関数で処理を組み立て、状態操作は一か所に閉じ込める ● 宣言的に書き、条件分岐をできるだけ減らす ○ テストしやすく、バグが混入しにくいコードの書き方を学ぶ 10

Slide 11

Slide 11 text

帰る準備 開発の現場から一旦離れ、その後現在の現場に 事前に本とハンズオンで今の PHP の書き方を学ぶ PHP の間口の広さのおかげか、数年離れていても、体に馴染んだと感じました 11

Slide 12

Slide 12 text

PHP に帰ってきました 全部ある!すごい! ● 言語の型と OOP のサポートが大きく強化 ● Composer による依存管理 ● Web アプリケーションフレームワークの進化 ● 開発支援のための周辺ツールが充実 ● しかも、さらに漸進的な進化を続けている 12

Slide 13

Slide 13 text

PHP の好きな言語機能 constructor property promotion / readonly class // Before final class User { private string $name; private int $age; } public function __construct(string $name, int $age) { $this->name = $name; $this->age = $age; } // After final readonly class User { public function __construct( private string $name, private int $age, ) {} } 13

Slide 14

Slide 14 text

PHP の好きなところ たくさんの人の総和で漸進的に進化する ● 後方互換性を考慮しつつ、少しずつ前に進む ● 時には貪欲に他の言語の成果も取り入れる ● 言語機能だけでなく、周辺のエコシステムも同様に ● プログラミング言語に関わるたくさんの人の取り組みや 意見が、収斂してより良い方向に進化している 14

Slide 15

Slide 15 text

PHP に帰ってきて見えたこと ● 視野を広く持ち、自身やチームの技術力を高めることが、 プロダクトの保守性向上につながる、そこに近道はない ● プロダクトエンジニアの抱える課題は、保守性に限って 言えば、言語選択に起因することはあまり多くない ● とはいえ PHP は間口が広く、誰でも入ってこられて、 離れても比較的容易に帰ってこられる ● さらに今の PHP なら、もっとテストを書きやすく、 コードを小さく保つことができそう 15

Slide 16

Slide 16 text

ありがとうございました 🙇 16

Slide 17

Slide 17 text

参考資料 ● リファクタリング: Ruby エディション https://www.kadokawa.co.jp/product/201002000196/ ● オブジェクト指向設計実践ガイド https://gihyo.jp/book/2016/978-4-7741-8361-9 ● ちょうぜつソフトウェア設計入門 https://gihyo.jp/book/2022/978-4-297-13234-7 ● learnphptherightway-outline https://github.com/ggelashvili/learnphptherightway-outline 17

Slide 18

Slide 18 text

参考 RFC ● PHP RFC: Constructor Property Promotion https://wiki.php.net/rfc/constructor_promotion ● PHP RFC: Readonly properties 2.0 https://wiki.php.net/rfc/readonly_properties_v2 ● PHP RFC: Readonly classes https://wiki.php.net/rfc/readonly_classes 18