Get connected with others,
at our relaxing conference in Odawara

  • Make the most of the compact and retro "Odawara"

    Using the compact and retro "Odawara" as the setting, we create experiences that spark new connections and deepen existing ones.

  • A relaxed atmosphere where you can be yourself

    We create a relaxed atmosphere where participants can be themselves.

  • A place to create "great talks"

    By sharing learnings and discoveries, we create a place where "great talks" are born through the form of a conference.

Chair: Asumi

Keynote Session

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.

Timetable

*Timetable translations by PHP Conference Odawara Staff

Kama
Boko
Aji
Kama
Boko
Aji
09:3010:00
09:30-10:00Doors Open
10:0010:10
10:00-10:10Kama
Opening
asumikam
10:2010:40
10:20-10:40Kama
Deep Dive into Xdebug
nsfisis

Deep Dive into Xdebug

nsfisis@nsfisis

Xdebug is a PHP extension that provides a wide range of debugging features. Have you ever wondered while using Xdebug, from step debugging to code coverage: "How is this actually implemented?" In this session, I will dive into the internal implementation of Xdebug's step debugger. Let's understand at least a little of what feels like magic.

Note: This talk focuses only on step debugging, not other Xdebug features.

10:20-10:40Boko
Learning Code Coverage through PCOV
きんじょうひでき

Learning Code Coverage through PCOV

きんじょうひでき@o0h_

When measuring code coverage in PHP software (for example in unit tests), extensions such as Xdebug and PCOV are commonly used.

Have you ever wondered: "How does it collect executed-line information while running the application (or tests)?" To understand this, at least two points might matter: how execution data is captured, and how that captured data is output.

In this talk, we will examine those points using PCOV as a concrete example. We will focus on which parts of PHP's core features are leveraged, how they are used, and what implementation ideas make it work.

10:20-10:40Aji
Actually understanding strict_types for real: The Boundary Between PHP's Type Conversion and TypeError
善住直紘

Actually understanding strict_types for real: The Boundary Between PHP's Type Conversion and TypeError

善住直紘@zumi_engineer

Where does declare(strict_types=1) actually switch PHP's type checking behavior? In this session, we will reference the php-src, specifically parts where strict_types is handled (Zend/zend_execute.c and zend_compile.c), and trace the compile-time flags as well as how the type check branches on function call. Using reproducible examples and diagrams, we organize the boundary where TypeError is thrown and where implicit conversion still happens. The goal is to understand how strict_types works internally and leave with practical guidance for when and how to use it in real projects.

Target audience

  • People who use type hints and static analysis but still treat strict_types as a vague convention
  • People curious about how PHP actually sees and validates types
  • People who want concrete guidance on strict_types usage
10:5511:15
10:55-11:15Kama
The Essence of Observability Every Web Application Engineer Should Know
Futoshi Endo

The Essence of Observability Every Web Application Engineer Should Know

Futoshi Endo@Fendo181

"When an incident happens, check logs." "Look at metrics and search for the cause." Is that really what observability means?

Observability is not only for SRE or infrastructure engineers. When application engineers consider observability from the design and implementation phase, they can speed up incident investigation and reduce operational burden across the team. This session introduces the core of observability for application engineers, especially backend engineers, based on practical field experience.

10:55-11:15Boko
How Can We Detect Unused Code in Production Without Touching PHP Code?
岩堀 草平

How Can We Detect Unused Code in Production Without Touching PHP Code?

岩堀 草平@egmc

Overview

Long-running PHP applications accumulate dead code over time. However, it is hard to know what is actually executed in production.

In this session, I introduce an approach that uses PHP tracepoints (DTrace) and eBPF to record PHP files actually compiled in production and detect dead code. I will explain this through the implementation of my tool, php-dcr.

Along with implementation details and demos, we will also cover the basics of tracepoints and eBPF, and discuss possibilities and challenges for applying these techniques in the PHP ecosystem.

What you'll gain

  • Understand how tracing works through a real tool implementation, including strengths, difficulties, and practical usage
  • Learn the fundamentals of eBPF and ideas for where it can be useful in PHP
10:55-11:15Aji
Introduction to Distributed Systems Through TiDB Architecture: What MySQL-Compatible NewSQL Solves
DPon

Introduction to Distributed Systems Through TiDB Architecture: What MySQL-Compatible NewSQL Solves

TiDB is a MySQL-compatible NewSQL database. Many people have heard the term NewSQL, but don't know the concrete architecture behind it.

This talk explains what distributed systems solve and where they are strong by looking through TiDB's architecture. Because TiDB is MySQL-compatible, it is relatively easy to adopt from PHP applications. I hope this session broadens your options for future technology choices.

Target audience

  • People interested in NewSQL or distributed databases
  • People facing MySQL scaling challenges

Topics

  • What NewSQL is and how it differs from traditional RDBMS
  • TiDB architecture overview (TiDB / TiKV / PD)
  • Strengths and use cases enabled by distributed systems
11:3011:45
11:30-11:45Kama
Traveling the OSI 7 Layers with PHP, Chapter 2
市川

Traveling the OSI 7 Layers with PHP, Chapter 2

At the sponsor session of PHP Conference Odawara 2025, I gave a talk titled "Traveling the OSI 7 Layers with PHP." https://fortee.jp/phpconodawara-2025/proposal/db76a0c7-a721-4e3b-9245-72d432105b19 There I talked about implementing HTTP, TLS, and TCP/IP with PHP.

With PHP 8.5, released in November 2025, standard functions finally reached Layer 2, the data link layer, so reading and writing Ethernet frames also became possible. One year later, the journey continues, and now I've gone as far as implementing an IP router in PHP.

As a sponsor session, I'll also introduce the company while sharing the next chapter of that journey.

11:5012:05
11:50-12:05Kama
PhpStorm in the Age of AI: What's New
山本ユースケ

PhpStorm in the Age of AI: What's New

山本ユースケ@yusuke

With AI around, do we no longer write code? Do we even need VS Code or PhpStorm anymore? How is PhpStorm useful in an AI-first era? What differentiates PhpStorm's AI features from other AI services?

This session answers those questions.

12:0513:30
12:05-13:30(On your own) Odawa Lunch
13:3013:50
13:30-13:50Kama
Understanding Deserialization
長谷川智希

Understanding Deserialization

長谷川智希@tomzoh

In December 2025, a vulnerability called React2Shell was discovered. It was a React.js vulnerability that allowed arbitrary code execution through insecure deserialization.

Insecure deserialization has also caused vulnerabilities in many PHP OSS projects such as phpMyAdmin, Joomla!, and Drupal.

This talk explains what deserialization is, what insecure deserialization is, and why it leads to vulnerabilities.

Deserialization is a powerful programming technique. I hope this talk helps you write deserialization-related code with confidence.

13:30-13:50Boko
Let's Build an MP3 Player in PHP
めもり〜☆

Let's Build an MP3 Player in PHP

めもり〜☆@m3m0r7

When people hear "implement an MP3 player in PHP," they usually think: "Oh, you mean playing audio in the browser." No. This session is about implementing the MP3 player itself in PHP, not with HTML or JavaScript. Playback control, buffering, decoding, and I/O. If your first reaction is "Is there any point in doing this in PHP?", that is exactly the entrance to this talk. We drag PHP out of its backend comfort zone and force it to make sound.

13:30-13:50Aji
The Path of Expression-Oriented Programming in PHP
うさみけんた

The Path of Expression-Oriented Programming in PHP

うさみけんた@tadsan

PHP is a flexible language that accepts many programming styles, and recent versions have added even more useful syntax.

I personally like functional-style programming, but in PHP it has often been seen as impractical and hard to read.

That era is ending. With PHP 8.x and especially features added recently in 8.5, expression-oriented code can now be written more clearly without sacrificing readability.

Practicality lies between extreme ideals and compromises. By understanding new language features, you gain the option to use them intentionally or decide not to.

In this talk, I explain how I think while writing code and invite you to explore expression-oriented PHP together.

14:0514:20
14:05-14:20Kama
Learning Product Security Hands-On
つめたいうどん

Learning Product Security Hands-On

つめたいうどん@udon_asw

Modern development faces security risks not only in web applications, but also across cloud infrastructure, CI/CD pipelines, editor extensions, and coding agents. However, there is a large gap between simply "knowing" about vulnerabilities and truly "understanding" them by experiencing both attack and defense hands-on.

This session introduces the overall landscape of OSS hands-on training materials that can be used across web, cloud, and CI/CD domains, and explains how hands-on learning changes developers' security awareness and behavior. It also covers practical training for realistic risk scenarios and incident response techniques that are harder to learn from OSS materials alone.

Based on experience running hands-on workshops for technical communities across Japan, the speaker will also share practical steps for introducing this kind of training into development teams.

14:2514:40
14:25-14:40Kama
Levtech Co., Ltd.
岡田竜典

Levtech Co., Ltd.

岡田竜典@ryusukeeee112

Sponsor Session

14:4515:05
14:45-15:05Kama
Legacy PHP Reborn: My Dad Was the Domain Expert, So I Use DDD + Claude Code for Cheat-Level Development
プログラミングをするパンダ

Legacy PHP Reborn: My Dad Was the Domain Expert, So I Use DDD + Claude Code for Cheat-Level Development

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

One day my father asked me, "Can you rebuild a web app for me?" I accepted casually. The original system had been outsourced about 10 years ago and operated ever since. The code I received was "old-school PHP": HTML, CSS, JS, and PHP mixed in one file, with GET/POST handled in that same file.

When I asked my father for requirements on LINE, he replied: "Capacity has two types: authorized capacity and operational capacity, both managed in facility settings." At that moment, I realized he was the domain expert.

This session introduces how we inherited that legacy system, understood the domain through dialogue and existing code, extracted entities and use cases, and performed a large rewrite using Slim Framework + PHP-DI + Doctrine ORM + Claude Code.

14:45-15:05Boko
Untangling Business Logic with Domain Events
梶川 琢馬

Untangling Business Logic with Domain Events

梶川 琢馬@kajitack

Do you use domain events?

Domain events model facts like "something happened" as classes. By organizing flows around events, dependencies can be aligned in one direction.

Using a real refactoring case, this talk compares before/after code in three steps:

  • Understanding differences and limits versus traditional method splitting
  • Introducing synchronous events
  • Moving to asynchronous events

The goal is to give your team a practical starting point for discussing and adopting domain events.

14:45-15:05Aji
"45 Minutes -> 20 Seconds": Accelerating Batch Processing by Identifying Framework Benefits and Constraints
umekikazuya

"45 Minutes -> 20 Seconds": Accelerating Batch Processing by Identifying Framework Benefits and Constraints

umekikazuya@kazuya_um_k_

This is a case study where a daily sync of about 40,000 records was reduced from 45 minutes to 20 seconds without infrastructure scaling. The challenge was balancing long-term maintainability (with Drupal as a framework dependency) and eliminating bottlenecks such as N+1 queries and sequential S3 reads. Rather than "fully embrace the framework" or "throw it away," I chose where to use it precisely.

  1. Separation: Keep complex persistence in the framework, but move heavy calculations/search to raw PHP arrays to reduce complexity to O(n).
  2. Structure: Avoid loading full entities into memory; build lookup hash maps for memory-efficient access.

This talk shares decision criteria for balancing operational cost and performance beyond the false binary of "all framework" vs "all custom."

15:2015:25
15:20-15:25Sponsor LT Kickoff
15:2515:35
15:25-15:35Kama
Elevator Pitch
15:3515:50
15:35-15:50Kama
Sponsor LT

BASE, Inc.

川口将貴@dmnlk

Sponsor Session

Alleyoop Inc.

有限会社アリウープ@alleyoop_jp

Sponsor Session

Achieve Application Observability Easily with OBI + APM

武藤 健志@kmuto

OpenTelemetry provides automatic instrumentation for PHP and many other languages and frameworks, making it possible to analyze application behavior with APM. That said, adding something new to an already running application can feel risky, especially when the system is legacy or even a black box. This session introduces OBI (OpenTelemetry eBPF Instrumentation), a technique that requires no modification to the application or runtime at all. I'd be happy if you use Mackerel APM for analysis, but any distributed tracing tool compatible with OpenTelemetry will work. Let's get observability right now with OBI + APM!

15:5516:00
15:55-16:00LT Kickoff
16:0016:55
16:00-16:55Kama
Lightning Talk

Why Can PHPUnit's Depends Pass Return Values to the Next Test? Let's Read the Code!

asumikam@asumikam

In PHPUnit, test methods are basically treated as having no return value. Even if you return something, it is usually ignored.

But when you add #[Depends('...')], suddenly the dependent test can receive that return value as an argument. It's easy to memorize how to write it, but "who picks it up, where, and how is it passed forward?" often stays unclear.

This LT does not stop at "it's magic." We dive into the implementation.

What we'll cover

  • What Depends does in the first place
  • How Depends is implemented internally
  • When Depends is the right tool

Measure Test Execution Time with PHPUnit Test Hooks

"Our CI tests are too slow..." You may have tried tweaks like adjusting expensive tests or disabling Xdebug, but still not achieved enough improvement.

If that sounds familiar, this talk is for you. Using PHPUnit's hook mechanism, we measured execution time per test and cut total test time by about 30% through data-driven improvements.

Let's improve tests with "Don't guess. Measure."

Three pnpm Features I Personally Loved

pnpm has been updating rapidly and has become an established frontend package manager. After moving from npm to pnpm, I found three features in pnpm v10 that made me think "this is great."

This LT introduces practical features that can improve project safety and developer experience right away, especially for:

  • Full-stack engineers who work on frontend as well as PHP
  • People considering migration from npm or Yarn
  • People already using pnpm but not following recent updates

Useful both for current pnpm users and for those considering adoption.

Starting OpenTelemetry in Spring 2026

sogaoh@sogaoh

OpenTelemetry has been gaining attention, and the groundwork is now mature enough to start confidently whether you run PHP 8+ or older PHP. This talk walks step-by-step through visualizing observability data such as metrics and traces.

  • Run your app locally alongside OpenTelemetry Collector
  • Send locally collected metrics and traces to a monitoring server
  • Replace local setup with cloud setup while preserving observability flow
  • Tune processor settings to keep only useful signals
  • Link logs with trace IDs for easier root-cause analysis

Let's move observability forward together.

Implementing Git in PHP

さどるふ@thirdlf1

I had a chance to reimplement Git in TypeScript and was impressed by how elegant its internal structure is. Then I wondered: can we do this in PHP too? While exploring, I found symfony/console for building CLI tools in PHP and decided to try.

This LT introduces the process of implementing core Git features in PHP and shares how simple and refined Git's internals actually are.

What you'll gain

  • Understanding of Git internals
  • Practical knowledge of building CLI tools with symfony/console

A 5-Minute Challenge: From `laravel new` to Deployment

濱崎竜太@avosalmon

Deploying a Laravel app to production usually requires many steps: nginx/php-fpm configuration, databases, load balancers, domain setup, and more. Containerization adds even more complexity, such as Dockerfiles and orchestrators like ECS or Kubernetes.

"I just want to build and deploy my app. Why is this so hard?"

With Laravel Cloud, you can deploy Laravel applications easily without complicated setup and run anything from hobby apps to serious services.

In this session, we'll create a new Laravel app with `laravel new`, deploy it, and publish it in five minutes. Can it really be done? It should. Let's try.

Filtering Out "Things That Must Not Appear" in Uploaded Images

minisera@oh_minisera

Image upload features are common in many products. You probably validate file type and size.

But do you inspect image content itself? What if a user uploads a photo containing a credit card, driver's license, or personal ID number?

"Should we read text with OCR?" "But accuracy drops with freely captured images..." "And what if there is no text at all?"

So we switched to object detection with AWS Rekognition to detect whether prohibited objects appear in images. This talk covers the shift from OCR to object detection and the practical battle with confidence scores.

Touch, Discuss, Understand: Why We Recommend Cross-Team Bug Bashes

髙橋直規@asagayanaoki

A bug bash is an event where members across roles intensively use the product in a short period to discover bugs and friction points. As AI and automation strengthen functional testing, fewer opportunities remain for humans to directly use features they build. That makes intentionally increasing team understanding of the product even more important.

A bug bash is not only about finding bugs. By touching the product and discussing across roles, teams can align on design intent and UX understanding. In our team, we run bug bashes alongside biweekly product-sharing sessions with diverse stakeholders.

This session introduces a practice that grows both team development culture and product understanding so teams can truly treat the product as their own.

How Reading 150 Books a Year Helped Decode the Intent of Our Codebase: Efficient Ways to Read Technical Docs from a Non-Engineer PdM

Introduction

For beginner engineers to keep growing technically, the ability to read library/framework docs and product code is essential, but many get stuck on complexity. As a non-engineer PdM, I read over 150 books every year across marketing, philosophy, humanities, and engineering. Through this, I found that the ability to grasp text structure directly improves understanding of PHP code and technical documentation.

What this LT shares (5 minutes)

Based on this unusual background, I will share three ways of thinking that help you understand technical texts smoothly and efficiently. These approaches can change how you read all future documentation and improve the quality of self-learning.

Engineers' Implementations Shape the User Experience

ひとみ@hitomi_caw

Designers may define interfaces users see, but much of the implementation is done by engineers. How loading states are shown, how waiting is handled, and how errors or progress are presented directly shape user experience.

In this session, based on my experience as a designer involved in frontend implementation and product development, I will show concrete examples of how implementation decisions influence UX.

With a basic understanding of UX/UI principles and psychology, you can add the perspective: "How will users feel about this implementation?" That perspective helps you notice gaps and discomfort that design specs miss, and propose better alternatives.

I would like to talk about UX/UI as a practical means to build better products.

16:5517:00
16:55-17:00LT Closing
17:1518:30
17:15-18:30Kama
Guest Session
18:3518:45
18:35-18:45Closing
19:0021:00
19:00-21:00Networking Party

Job Board

  • レバテック開発部
  • 株式会社はてな Mackerel