現代のコンピュータはハードウェアから私たちプログラマが書くプログラムの動作までの間が多くのレイヤーに分けられて動作しています。
レイヤーは自分より下を抽象化し、下のレイヤーを詳しく理解しなくても多くの場合プログラマはプログラムを書けます。
一方、プログラムが期待した様に動作しない時には下のレイヤーの動作の理解が問題の解決の助けになることもあります。
このトークでは私たちが愛するPHPをスタート地点にして、「VMって何?」「 PHPやJavaとC言語の根本的な違い」など、コンピュータプログラムがどの様に動作するのかを解説します。
コンピュータのレイヤー構造を理解すると、いままでは見えていなかった角度からプログラミングを楽しめるようになります。
このトークを通じて、低レイヤーが好きになったり、いろいろなレイヤーで面白いことをしたりする方が増えることを期待しています!
PHPアプリケーション開発では主にPHPUnitを使い、ユニットテストを書いていると思います。
PHPUnitは個々のクラスやメソッドをテストするのが得意なツールですが、実際のユーザがブラウザを通して体験するJSやCSSまで含めたレンダリング結果や、複数のページ遷移を伴う複雑なフローへのテストは苦手です。
こんな時にPlaywrightを使うとフロントエンドのテストが効率的にできます。実際にブラウザを動かしてテストを行うツールであり、ユニットテストが苦手としている領域をカバーすることができます。
一方でPHPUnitと比べ実行速度は遅く、メンテナンスのコストも高くなる傾向があります。
本トークではPlaywrightでできることを紹介しつつ、PHPUnitとPlaywrightの特性に沿ってテストをかき分けることでテスト時間を短縮し、より安心してリリースできる環境作りを紹介します。
「抽象化していますか?」ーー抽象化と聞くと、設計やモデリングをイメージするかもしれません。他にも、interface のような言語機能を利用することを思い浮かべる方もいるかもしれません。たしかにこれらも抽象化の一つですが、それだけではありません。また、抽象化には難しそうなイメージを持たれがちですが、実はソフトウェア開発を行なっている私たちにとっては日々利用している身近なものです。
本セッションでは、抽象化(と具体化)という考え方を整理し、設計や言語機能だけでなく、物事の理解や共有、課題解決、トラブルシューティングといった開発現場の広い場面でも活用できる「思考の技術」として具体的な例とともに紹介します。
「使える思考のツール」として抽象化を一緒に見ていきましょう。
ソフトウェアを作る仕事は労苦以外の何物でもありません。
労苦は、複雑な世界に向けて使いやすい道具を作るという仕事の本質的な難しさに起因していて、技術や手法を洗練すれば除去できるものではありません。
アジャイルにすれば楽になると思いきや、開発にまつわる周辺的な複雑さが緩和されることによって、役に立つモノを作ること自体に内在する難しさが却って際立ってきます。
我々は、何のために、労苦を甘受してソフトウェアを作るのでしょうか。
労苦を軽減することも大事ですが、労苦の意味を知ることはそれ以上に重要です。
自分たちが作るソフトウェアの存在意義が腑に落ちなければ、私たちはけっして労苦を乗り越えられず、真っ当なソフトウェアを創り得ないでしょう。
この基調講演では、その糸口として、ソフトウェア作りとは何か、どうして私たちはソフトウェアを作るのか、それを踏まえてソフトウェアをデザインするとはどういうことか、といったことがらについて、一緒に考えてみましょう。
我々の仕事には意味があります。
PHPの実行環境は、アプリケーションのパフォーマンスやスケーラビリティに大きく影響します。
本セッションでは、Laravelで作成したCRUDアプリを用いて、次の環境のパフォーマンスを比較します。
対象の比較環境
各実行環境の特徴と、ユースケースごとの適性を実測データに基づいて比較・考察して、結果を共有し、
実行環境を選定するさいの実践的な知見を持ち帰っていただくこと目標にしています。
会計システムを作る時にPHPの数値仕様をしっかり理解した上で作らないと、後々大変なことになってしまう可能性があります。
小数点以下の誤差によって1円が消えたり増えたりしてしまうことがあり、1円の行方を巡って終わりのない、解決もしない調査の旅に身を投じることになるでしょう。
それが今なのか、いつなのかは分かりませんが、知っていれば防げる問題でもあります。
本セッションでは数値にはどんな問題があり、扱う時に何を気をつける必要があって、さらに扱いやすくするためにおすすめの方法をお話しします。
これらのお悩みを纏めて解決する、よくばりテスト技法として「階層化自動テスト」戦略についてお話します。
本トークは「品質とは何か?」を前提に進みます。
より理解を深めたい方は、PHPカンファレンス関西2024での登壇「『"品質"が高いコード』って何?」をご覧ください。
https://fortee.jp/phpcon-kansai2024/proposal/a60c9e18-bc61-4f60-80d0-0a0ea7a205c4
このトークで得られる知見
このトークで扱わない内容
コードゴルフという競技をご存知でしょうか?
与えられたお題に対して、どれだけ“短く”コードを書けるかを競うもので、今年3月のPHPerKaigi 2025では「PHPerコードバトル」として開催され、大いに盛り上がりました。
コードゴルフでは、可読性や保守性は重視されず、むしろ犠牲にしてでも短く書くことが求められます。
一見実務とは無縁に思えるかもしれませんが、実はこの競技、PHPの文法や関数についての深い知識が求められるため、楽しんでいるうちに言語仕様に詳しくなってしまうという学習効果もあるのです。
このセッションでは、コードゴルフで実際に使われるトリッキーなテクニックと、それを支えるPHPの言語仕様や関数の挙動について解説します。
例えば、PHPの文と式の違い、普段あまり使わないマイナーな関数の仕様など、ちょっとした遊びからPHPの理解が深まる世界をご紹介します!
デシジョンテーブル(決定表)といえばテスト設計の手法として知られていますが、PHPでの実装パターンとしても非常に強力です!
複雑な条件分岐をif文の入れ子で書くと保守性が低下しますが、決定表を使えば条件と結果の組み合わせを表形式で美しく整理できます。
登壇者は実際の業務で、条件の組み合わせが数千パターンにも及ぶ大規模な決定表を実装してきました。
この経験から得たノウハウと実践的なテクニックをご紹介します。
明日のプロジェクトですぐに活用できる実装パターンをお伝えします。
難解なビジネスロジックをクリアに表現できるPHPのデシジョンテーブル実装に、ぜひチャレンジしてみましょう!
PHPStanは簡単に使い始められる便利なツールですが、レベルを上げようとするとPHPStanの型付けの特性について学ばなければ効果的に型をつけることはできません。本ワークショップではブラウザから動かせるPHPStan Playground上で問題を解くことでPHPStanの型についての理解を進めます。
このワークショップではブラウザ上で動作するPlaygroundとPHPが動作するローカルマシンのどちらでも取り組むことができます。
(ローカル環境でのPHP開発環境について本編時間内ではサポートできません)
PHPの文法について基本的に理解していると望ましいですが、可能な限りサポートします。
MySQL9でのベクトルカラム/ベクトル検索サポートは、PHPアプリケーションにおけるAI活用や類似性検索を大きく変える可能性を秘めています。
プロポーザル提出時は、AWSのRDSで取り扱い可能なバージョンは、8系が最新ですが、特にAWS (RDS/Aurora) 環境での利用が現実味を帯びる中、そのインパクトは計り知れません。
本セッションは、ミドルレベルのPHPエンジニアを対象に、この「ベクトルカラム」導入に焦点を絞ります。ベクトルデータの基本的な概念から、MySQL9で予想されるベクトル型・専用インデックス・検索関数の概要、そしてPHPからこれらをどう扱うか、パフォーマンス考慮点、AWS環境特有の設定や制約についてを説明します。推薦システム、画像検索、セマンティック検索といった機能の実装がどう変化するのか?何を学び、どう備えるべきか? 未来のキラー機能開発に向けた勘所をお伝えします。
PHPのsocket拡張を利用するとsocketプログラミングができ、通信プロトコルもPHPで実装できます。
さらに、RAW socketという機能を使うとOSが管理しているTCP/IPプロトコルもPHPで実装可能です。
今回のセッションでは、
プロトコルは仕様が決まっていて、その仕様を見てひたすら実装し、最終的にはサーバやクライアントと通信できるようになります。この通信できた時の喜びは非常に大きく、かつ大変勉強になります。通信できるまでの過程も含めて楽しさが伝えられたらと思います。
PHPを社会人になって初めて触りました。またLaravelというフレームワークを知りました。そして新卒だった自分はアプリの初期開発でフレームワークの自由さに魅了され、振り回され、恥の多いコードを書きました。その後、過去の自分が未来の自分を苦しめ、改善を決意し、小さく小さくコツコツと改善を進めました。
本セッションでは自分がどんな恥の多いコードを書いてきたのか、どうやってコード的な側面、非コード的な側面からシステムを改善していけるかを実体験をもとにご紹介していきます。
セッションを聞いた方が「自分と似た経験をしないための知識」、「しくじりを自分の成長に変えていける引き出し」を得られたら幸いです。
話すこと(変更の可能性あり)
・ 設計を知らないで実装をするとこんなことしちゃう
・ 自分が行った小さな改善作業(技術側面、非技術側面)
副作用が絡み合うロジックを触るたび「どこで何が起きるか分からない」――そんな不安をドメインイベントで断ち切ります!
ドメインイベントは「〇〇が起きた」という事実をクラス化し、処理の流れを“出来事”をベースに組み立て直すことで、依存を一方向に整えることができます。
本トークでは実務でのリファクタリングを題材に、
の3ステップでリファクタリング前と後のコードで比較しながら順に解説します。
チームでドメインイベントをわいわい議論できるようになるきっかけを提供します!
PHPでの開発に慣れてきた若手エンジニアが次に直面するのは、「何をどう学べばいいのか分からない」という壁です。MVCフレームワーク、リファクタリング、SOLID原則、ペアプロ、ユニットテスト、アジャイル開発といった開発に関する考え方や実践はどこから生まれ、なぜ今も大切にされているのでしょうか?
本セッションでは、ケント・ベック、マーティン・ファウラー、ボブおじさん、DHHといった人物を中心に、それぞれの技術や手法が生まれた背景、当時の課題、そしてそれらがPHPを含む現在の開発スタイルにどう影響を与えてきたのかを、歴史の視点から紹介します。
こうした知識は本来「デキる先輩」が後輩に伝えてきたものでした。しかし、周囲にそのような先輩がいない場合もあると思います。このセッションでは、現場の課題を解決するために必要なことを効率よく学ぶための「知識の地図」を提供します。
普段当たり前のように使っている “Git”、その仕組みを理解していますか?
本セッションでは、Git の内部構造を理解するために「PHP で Git の再現」に挑戦した取り組みを紹介します。
実際に再現してわかった、Gitのデータ構造や差分管理の仕組み、そして再現を通じて学べた本質的な気付きについてお話しします。
普段なんとなくGitを使っている方も、このセッションを通じて仕組みへの理解を深めてみませんか?
皆さんは、ご自身が書いたコードがPHPによってどのように解析され、有効な構文として認識されているか気になったことはありませんか?
この発表では、構文解析の理解を深め、文法ファイルを読み解くスキルを身につけることで、
PHPの文法をより深く知るきっかけにしたいと思います。
話す内容は以下のことを予定しています:
この発表の対象者は、PHPの構文解析のしくみに興味を持つすべてのPHPerです。
この分野の知識がない方でも理解できる内容にします。
構文解析器の分野は非常に興味深く、言語設計の奥深さを知る入り口となります。
この発表を通じて、少しでも多くの方がこの分野に興味を持っていただけることを目指します。
PHPStanがどのように解析を行っているのか、型を決定しているのかを普段意識することはほとんど無いと思います。
しかし、仕組みを理解することで活用の幅がもっと広がり、そしてかっこよくなれます!
そこで本トークでは、PHPStanへのコントリビュートを通して、更にPHPStanに詳しくなった経験についてお話します。
話す内容
「とりあえず動くPHP」から一歩進みたい初学者へ向けて、PHP 8の文法と型の表現力を通じて、読みやすく・壊れにくいコードの設計を学ぶセッションです。
match 式や readonly プロパティ、union types、named arguments などの機能が、静的解析ツール(PHPStan, Psalm)と組み合わせてどのように活きるのかを具体的なコード例で解説します。
「型を書くだけで、こんなにミスに気づけるのか」「PHPでも設計って考えられるんだ」と実感できる内容を目指します。
文法の表面的な知識だけでなく、現場でコードを書く上で意識したい“意図を型で伝える”視点を手に入れましょう。
平均80点ぐらい取れるAWS構成とその使い所と細かいハマりポイントを紹介します