ImagePHPカンファレンス小田原2026

小田原の地でつながる、
気張らないカンファレンス

  • コンパクトでレトロな「小田原」という地を活かす

    コンパクトでレトロな「小田原」という地を活かし、 新しいつながり・深いつながりを生む体験をつくります。

  • 自然体でいられる、リラックスした雰囲気

    参加者が自然体でいられるような、リラックスした雰囲気をつくります。

  • 「良い発表」を創出する場

    学びや発見を共有し合いながら、カンファレンスという形で この世に「良い発表」を創出する場をつくります。

実行委員長・あすみ

キーノートセッション

Online Session, Q&A Session

Sebastian Bergmann

Sebastian Bergmann

Sebastian Bergmann is the creator of PHPUnit, the industry-standard testing framework that has greatly improved the professionalism of PHP software development.

As founding partner of and consultant with The PHP Consulting Company (thePHP.cc), he assists teams in adopting PHPUnit, optimizing its use, refining development workflows, and writing more testable code.

タイムテーブル

かま
ぼこ
あじ
かま
ぼこ
あじ
09:3010:00
09:30-10:00開城
10:0010:10
10:00-10:10かま
オープニング
asumikam
10:2010:40
10:20-10:40かま
nsfisis

Deep Dive into Xdebug

nsfisis@nsfisis

Xdebug は PHP の拡張で、デバッグのためのさまざまな機能を提供します。 ステップ実行からコードカバレッジ測定までできる Xdebug を使っている中で、こう思ったことはないでしょうか。 「これどうやって実現してるの?」 この発表では、Xdebug のステップ実行機能について、その内部実装を詳しく説明します。 あたかも魔法のように動作する Xdebug を、ほんの少し理解してみましょう。

※ Xdebug が持つステップ実行以外の機能については扱いません。

10:20-10:40ぼこ
きんじょうひでき

PCOVから学ぶコードカバレッジ

きんじょうひでき@o0h_

ユニットテストなどでPHPソフトウェアのコードカバレッジを測る際に、XdebugやPCOVといった拡張が用いられます。

皆さんは、 どうやって「アプリケーション(ユニットテスト)を実行しながら、実行された箇所の情報を収集しているのだろう」 と不思議に思ったことはありませんか? どうしたら実行箇所の情報を把握できるのか、そして把握した情報を出力できるのか… 少なくとも、この2点は確実に押さえる必要がありそうですよね。

そうした話を、PCOVを例に取りながら覗いてみましょう。 「PHPのコアの機能のうち、何を活用しているのか」「それをどんな風に使っているのか」を中心に、 実装内容とアイデアの観点から探っていきます。

10:20-10:40あじ
善住直紘

strict_typesを雰囲気で終わらせない:PHPの型変換とTypeErrorの境界

善住直紘@zumi_engineer

declare(strict_types=1) はどこで型チェックを切り替えているのか。本セッションでは php-srcの中でもstrict_typesを扱っているZend/zend_execute.c zend_compile.cを参照し、strict_types がコンパイル時に立てるフラグと関数呼び出し時の型チェック分岐を追います。再現コードと図を用いて、TypeError が投げられる境界と暗黙変換が起きる条件を整理。strict_types の仕組みを理解し、プロジェクトでの適切な使い分け指針を持ち帰ってもらうことを目指します。

想定聴講者 型ヒントや静的解析は使っているが strict_types は雰囲気で運用している人 PHPがどうやって型を見ているか気になっている人 strict_typesの使い分け方が知りたい人

10:5511:15
10:55-11:15かま
Futoshi Endo

Webアプリケーションエンジニアにも知ってほしい オブザーバビリティ の本質

Futoshi Endo@Fendo181

「障害が起きたらログを見る」、「メトリクスを眺めて原因を探す」 果たしてそういった活動を日頃から意識するのが オブザーバビリティ でしょうか?

オブザーバビリティはSREやインフラエンジニアだけのものではありません。 Webアプリケーションの設計・実装段階から オブザーバビリティ を意識することで、障害調査が速くなったり、チームの運用負荷が下がる、といった効果を得ることができます。 本セッションでは、アプリケーションエンジニア、特にバックエンドエンジニアに向けて オブザーバビリティの本質を実際の現場の経験を元にご紹介します。

10:55-11:15ぼこ
岩堀 草平

本番環境でPHPコードに触れずに「使われていないコード」を調べるにはどうしたらよいか?

岩堀 草平@egmc

概要

長年運用されたPHPアプリケーションには、使われなくなったコード(デッドコード)が蓄積していきます。しかし実際に本番環境で使われているのか調べるのは困難です。

本セッションでは、PHPがもともと備えているトレースポイント(DTrace)の仕組みとeBPFを活用して本番環境で実際にコンパイルされたPHPファイルを記録し、デッドコードを検出する方法を自作のツールphp-dcrの実装を通して紹介します。

実装の話とデモに加えて中心となる技術であるトレースポイントやeBPFの概要を学び、PHPの世界での応用の可能性や課題についても是非触れて頂ければと思います。

聞いた人が得られるもの

  • トレースがどのように動作するか、ツール実装を通して特性や利点、難しさ、現実的な利用方法について知る
  • eBPF技術の概要とPHPにおける使い所のヒント
10:55-11:15あじ
DPon

TiDBのアーキテクチャから学ぶ分散システム入門 〜MySQL互換のNewSQLは何を解決するのか〜

TiDBはMySQL互換のNewSQLデータベースです。 NewSQLという言葉は聞いたことがあるけど、具体的な仕組みについてはよく知らないという方も多いのではないでしょうか?

本トークでは、TiDBのアーキテクチャを通じて分散システムが解決する課題と強みを解説します。 MySQL互換だからこそPHPアプリケーションからも導入しやすいTiDBを題材に、今後の技術選定の選択肢を広げるきっかけになれば幸いです。

ターゲット

  • NewSQLや分散データベースに興味がある方
  • MySQLのスケーリングに課題を感じている方

お話すること

  • NewSQLとは何か、RDBMSとの違い
  • TiDBのアーキテクチャ概要(TiDB / TiKV / PD)
  • 分散システムがもたらす強みとユースケース
11:3011:45
11:30-11:45かま
スポンサーセッション
11:5012:05
11:50-12:05かま
スポンサーセッション
12:0513:30
12:05-13:30(各自) おだわランチ
13:3013:50
13:30-13:50かま
長谷川智希

デシリアライゼーションを理解する

長谷川智希@tomzoh

2025年12月にReact2Shellという脆弱性が発見されました。 これはReact.jsの脆弱性で"安全でないデシリアライゼーション"により任意コードが実行されるというものでした。

"安全でないデシリアライゼーション"は我々PHP界でもphpMyAdminやJoomla!, Drupalなど多くのOSSで脆弱性の原因になってきました。

本トークではデシリアライゼーションとは何か、そして"安全でないデシリアライゼーション"とは何か、どうしてそれが脆弱性につながるのかを解説します。

デシリアライゼーションは強力なプログラミングテクニックです。本トークを聞いた方が安心してデシリアライゼーションを使ったコードを書けるようになることを願っています。

13:30-13:50ぼこ
めもり〜☆

PHP で mp3 プレイヤーを実装しよう

めもり〜☆@m3m0r7

「PHP で mp3 プレイヤーを実装する」と聞くと、多くの人はこう思うはずです。「ああ、ブラウザで音を再生するやつね」と。 ──違います。 HTMLでも JavaScript でもなく、PHP で “mp3プレイヤーそのもの” を実装するのです。 再生制御、バッファ、デコード、I/O。 「それ、PHP でやる意味ある?」と思った瞬間が、このセッションの入口です。 PHP を “Web の裏方” から引きずり出し、無理やり音を鳴らします。

13:30-13:50あじ
うさみけんた

PHP式プログラミング道

うさみけんた@tadsan

PHPは多くのプログラミングスタイルを受け入れる柔軟な言語ですが、近年さらに便利な構文が追加されています。

ところで筆者は関数プログラミングと呼ばれるスタイルのコードを好んでいますが、PHPではかなり無理があり、読みにくく書きにくい非実用的なコードとみなされがちでした。

ですがそんな時代はもう終わりました。PHP 8.x系、そしてつい最近8.5で追加された機能を活用すれば可読性を損なわない式指向コードが実現しやすくなりました。

実用とは、極端な理想と妥協の中間にあります。ポテンシャルを学ぶことによって、新機能を「使う」「使わない」という選択肢が生まれます。

このトークでは筆者がふだんどのようなことを考えながらコードを書いているかを解説しながら、いっしょにPHP式プログラミング道を究めましょう。

14:0514:20
14:05-14:20かま
スポンサーセッション
14:2514:40
14:25-14:40かま
スポンサーセッション
14:4515:05
14:45-15:05かま
プログラミングをするパンダ

レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜

プログラミングをするパンダ@Panda_Program

ある日、父から「あるWebアプリを新しく作り替えてくれない? 」と頼まれ、私は軽い気持ちで引き受けました。元になるのは10年前に父がクラウドワークスで発注、運用してきた業務システム。貰ったコードは1ファイルにHTML・CSS・JS・PHPが混在し、GET/POSTも同じファイルで処理する「あの頃のPHP」でした。

試しにLINEで父に要望を聞いたところ「定員には認可定員と利用定員の2種類があり、どちらも施設設定で管理します」との返事。私は気づきました。この人はドメインエキスパートなんだと。

本セッションでは、このレガシーなシステムを引き継ぎ、ドメインエキスパートとの対話や既存のコードからドメインを理解し、エンティティとユースケースを抽出した上で、Slim Framework + PHP-DI +Doctrine ORMとClaude Codeでビッグリライトする取り組みを紹介します。

14:45-15:05ぼこ
梶川 琢馬

ドメインイベントでビジネスロジックを解きほぐす

梶川 琢馬@kajitack

みなさん、ドメインイベントって使っていますか?

ドメインイベントは「〇〇が起きた」という事実をクラス化し、処理の流れを“出来事”をベースに組み立て直すことで、依存を一方向に整えることができます。

本トークでは実務でのリファクタリングを題材に、

  • 従来のメソッド分割との違いや限界を体感
  • 同期イベント導入
  • 非同期化

の3ステップでリファクタリング前と後のコードで比較しながら順に解説します。 チームでドメインイベントをわいわい議論できるようになるきっかけを提供します!

14:45-15:05あじ
umekikazuya

"45分→20秒" フレームワークの「恩恵」と「制約」を見極めたバッチ処理の高速化

umekikazuya@kazuya_um_k_

約4万件の日次データ同期に45分を要していた処理を、インフラ増強なしで20秒に短縮した事例です。 課題は、10年運用を見据えた保守性の維持(Drupalというフレームワーク依存)と、ボトルネックとなる「N+1」「S3逐次読み込み」の解消の両立でした。 私はフレームワークを「乗りこなす」でもなく「捨てる」でもなく、「使い所」を鋭く選定する戦略を取りました。

  1. 分離: 複雑な永続化はフレームワークに任せ、重い計算・探索処理のみ「素のPHP配列」で行い計算量をO(n)へ圧縮。
  2. 構造: Entityをメモリに乗せず、検索用ハッシュマップを構築しメモリ効率を最大化。

「全部フレームワーク」か「全部オレオレ」かの二元論ではない、運用コストとパフォーマンスのバランスを最適化する技術選定の判断基準をお話します。

15:2015:25
15:20-15:25スポンサーLT開幕
15:2515:35
15:25-15:35かま
エレベーターピッチ
15:3515:50
15:35-15:50かま
スポンサーLT
15:5516:00
15:55-16:00LT開幕
16:0016:55
16:00-16:55かま
ライトニングトーク

PHPUnitの「Depends」を使うと次のテストに返り値を渡せるの、なんで?読むぞ!

asumikam@asumikam

PHPUnitで書くテストケースは、基本的に返り値を持ちません。 普段は「返り値は void」として扱い、return しても無視されます。

でも #[Depends('...')] を付けた時には、あら不思議、依存元の返り値が依存先の引数として使えるようになります。 手で書き方を覚えてしまえばなんとなくは理解できるけど「どこで誰が拾って、どうやって次に渡してるの?」は意外と曖昧になりがちです。

このLTでは「おまじない」で片付けず、実際の実装まで踏み込んでいきます。 「使えるから使う」ではなく、「どう動いているかを知った上で使う」ための Depends の話をします!

話すこと

  • そもそも Depends ってどんな機能?
  • Depends がどのような実装になっているか
  • Depends の使いどころ

PHPUnitのテストフックを使ってテストにかかる時間の計測をしよう

CIのテストに時間がかかって困る… 時間がかかっていそうなテストの修正や、XDebug無効化などの対策は試したが思ったように短くならない

そんな経験はないでしょうか?

闇雲にテストを修正するのはもう終わりです!

PHPUnitのフック機能を使って、個別のテストにかかっている時間を計測し、それに基づいた改善でテスト時間を約30パーセント削減した事例をお話します。

テストも「推測するな、計測せよ」で改善しましょう

個人的に嬉しかったpnpmの新機能・3選

最近アップデートの勢いが増していて、フロントエンドのパッケージ管理ツールとして定着してきているpnpm。 npmからpnpmに移行してみて、pnpm v10系のアップデートで「これは良い!」と感じた3つの機能を紹介します。

本LTでは、主に下記の方を対象に、今日からプロジェクトの安全性と開発体験を少し良くできる便利機能を紹介します。

  • PHPだけでなくフロントエンドにも携わるフルスタック寄りの方
  • npmもしくはYarnから乗り換えようか迷っている方
  • pnpmを使っているが最近のアップデートを追えていない方

pnpmを何となく使っている方にも、これから導入したい方にも役立つ内容です。

2026年春から始めるOpenTelemetry

sogaoh@sogaoh

巷で噂される OpenTelemetry、PHP 8 以降でも、PHP 7 以前でも、思い切って始められる地盤が整備されてきているので、Step-by-Step で Metrics や Trace といった観測情報を可視化するまでを簡単にご紹介します。

  • ローカルでアプリケーションを OpenTelemetry Collector と並べて動かす
  • ローカルで 採取できた Metrics や Trace を 監視サーバーに送信する
  • ローカル環境をクラウド環境に置き換えて同様の観測データ採取を実現する
  • Processor の設定を調整して最適な情報に絞り込む
  • Trace ID で Log とも紐付くようにして何が起きてたか可視化しやすくする

こんな感じで、みんなで Observability をやっていきましょう、というトークです。

PHPでGitを実装してみる

さどるふ@thirdlf1

TypeScriptでGitを再実装する機会があり、その内部構造の美しさに感動しました。ふと、これってPHPでも実装できるんじゃないかと思い調べてみると、CLIツールを作ることができる symfony/console と呼ばれるものがあることを知りました。じゃあ作ってみるしかないか...

本LTでは、PHPを使ってGitのコア機能を実装するプロセスを紹介し、Gitの内部構造がいかにシンプルで洗練されているかを共有します。

このLTで得られること

  • Gitの内部構造に関する知識
  • symfony/console を使ったCLIツール開発知識

5分で挑戦!laravel newからデプロイまで

濱崎竜太@avosalmon

Laravelアプリケーションを本番環境にデプロイするには、nginxやphp-fpmの設定、データベース、ロードバランサー、ドメインの設定など、様々な工程が必要です。 さらに、コンテナ化しようと思うと、Dockerfileを書いたり、ECSやkubernetesなどのオーケストレーションツールを使う必要があり、なかなか大変です。

俺はただアプリを開発してデプロイしたいだけなのに、何でこんなに大変なんだ!

Laravel Cloudを使えば、複雑な設定なしに、Laravelアプリケーションを簡単にデプロイし、趣味アプリから本格的なサービスまで運用できる環境を手軽に構築できます。

このセッションでは、 `laravel new` で新規Laravelアプリケーションを作成し、デプロイして公開するまでを5分でやってみます。 本当にできるのか?できるはず!試してみよう!

画像内の"写ってはいけないもの"を弾きたい

minisera@oh_minisera

業務でよくある画像のアップロード機能。 ファイル形式やサイズのバリデーションはきっとやっていると思います。

では、画像の「中身」は見ていますか?もしユーザーがクレジットカードや免許証、マイナンバーが写った画像をアップロードしてしまったら?

「文字を読み取ってチェックする?OCRを使う?」 「でも自由に撮影された画像だと精度が出なくて…」 「そもそも文字が書かれていない場合どうするか」

そこで、AWS Rekognitionの物体認識で「写ってはいけないものが写っているか」を検出するアプローチに切り替えました。 OCRから物体認識への切り替え、信頼度スコアとの戦いについてお話しします。

プロダクトを触って語って理解する、チーム横断バグバッシュのすすめ

髙橋直規@asagayanaoki

バグバッシュ(Bug Bash)は、役割を問わずメンバーが短時間にプロダクトを集中的に触り、バグや違和感を洗い出すイベントです。 機能テストがAIや自動化で強化される今こそ、人間が作った機能を自ら触る機会が減り、チームのプロダクトに対する理解を意図的に増やすことが重要になってきていると感じています。 バグバッシュは役割横断でプロダクトを触りながら対話することで、バグを探すだけでなく仕様意図やUXの理解をすり合わせていけるイベントです。 私たちは2週に1度のプロダクト共有の場に合わせ、多様なステークホルダーに集まってもらいバグバッシュを開催しています。 チーム開発文化とプロダクト理解を同時に育て、チームがプロダクトを自分たちのものとして扱っていくためのイベントを紹介します。

年間150冊の「雑食読書」が、自社コードの意図を解き明かす鍵になった話 — 非エンジニアPdMによる、技術ドキュメントの効率的な読み解き方

導入

初心者エンジニアが技術的な成長を続ける上で、ライブラリ、フレームワークの公式ドキュメントやプロダクトコードを読む力は不可欠ですが、その難解さに挫折しがちです。 ​非エンジニアのPdMである私は、以下の活動を続けています。 ​毎年、マーケティング、哲学、人文学、工学書など150冊以上の広範な読書。 ​この経験を通じて得た「文章の構造を把握する力」が、PHPコードや技術ドキュメントの理解力向上に直結することを発見しました。

​本LTで共有する内容(5分)

​この異色の経験に基づき、広範な読書から導き出した「技術的なテキストを抵抗なく、効率的に理解するための3つの思考法」を共有します。 ​この思考法は、あなたが今後遭遇するすべてのドキュメントへのアプローチを変え、自己学習の質を高める助けとなるでしょう。

エンジニアの実装が、体験をつくっている

ひとみ@hitomi_caw

ユーザーが触れるインターフェースを設計しているのはデザイナーかもしれませんが、 実装の多くはエンジニアが行っています。 ローディングの出し方、待ち時間の扱い、エラーや進行状況の見せ方などは、 そのままユーザー体験につながっています。

本セッションでは、デザイナーとして、またフロント実装やプロダクトづくりに関わってきた経験から、 「実装の判断がどのようにUXを左右しているか」を具体例とともに紹介します。

UX/UIの原則・心理学を少し知っているだけで、 「この実装でユーザーはどう感じるか?」という視点を持ち込むことができ、 設計書から漏れていたこと・違和感に気づいたり、 より良い選択肢を提案しやすくなります。

本セッションでは、 よりよいプロダクトを作っていくための手段として、 UX/UIの話をしたいと思います。

16:5517:00
16:55-17:00LTクロージング
17:1518:30
17:15-18:30かま
ゲスト枠
18:3518:45
18:35-18:45クロージング
19:0021:00
19:00-21:00懇親会