DPon さてここを覗かれてるあなた、もしかしてプロポーザルに興味がおありでしょうか?
出してみたい気持ちがおありでしょうか?
出してみたいけどふんぎりがつかない。そんなお悩み抱えてますか?
このトークでそのお悩みを少しでも軽くできればと思います。
カンファレンスをより深く楽しめるようになりますよ!
梶川 琢馬 PHPではtry-catchによる例外処理が一般的ですが、「どこで例外を処理すべきか?」「本当にこの場面で例外を使うべきなのか?」と迷ったことはありませんか。
例外を過度に使用すると、本来の処理の目的が曖昧になり、可読性の低下や予期せぬバグの隠蔽につながることがあります。
こうした課題へのヒントとして、Result型の考え方をPHPに応用するアプローチがあります。
Result型は、成功と失敗を返り値として明示的に扱える型であり、エラーの種類や責任範囲の整理に役立ちます。
結果として、処理の流れや責務が明確になり、例外を多用せずにエラー設計が可能になります。
PHPでは標準で実装されていないものの、軽量な自前実装によって導入できます。
本セッションでは、例外(try-catch)を前提とするPHPプロジェクトに、以下の観点を中心にResult型を取り入れる方法を紹介します。
Result型を導入するかどうかに関わらず、エラーをどう設計するかを見直すヒントを持ち帰っていただけると嬉しいです!
エンジニアとして学び始めた頃の私は、「どう作るか」という手段ばかりを追いかけていました。
意識が向いていたのは以下のことです。
一方で、「なぜそれを作るのか」「誰の何を解決するのか」という目的にはほとんど目を向けられませんでした。
背景には初学者としての不安や失敗したくない完璧主義があり、手段だけを追うことで安心していました。
しかし、その結果、受動的な開発から抜け出せず、本質に気づけませんでした。
そんな自分を変えたのは、先輩エンジニアの一言です。
目的を言語化し、ユーザーの状況を想像して価値を定めてから手段を選ぶプロセスを意識したことで、開発の視界が広がりました。
完璧主義の方向性も変わり、以前は「100点」を目指していたのが、今は「60点を100点として目指す」ようになり、
余裕を持って自分から問いを投げかけられるようになりました。
具体的には、
こうして問いを立てる余裕が生まれ、開発の視点も行動も大きく変わりました。
このトークでは、
についてお話しします。
初学者や若手エンジニアにぜひ聞いてほしい内容です。
作ることの楽しさが一段深くなるきっかけになれば嬉しいです。
斉田真也 ※初心者向けトークです
このトークの対象者
トークが目指すゴール
Javaから始まったオブジェクト指向の波はPHPにも波及し、今やPHPは立派なオブジェクト指向言語になっています。
プログラミング初心者が抱く疑問「ところでオブジェクト指向の何が良いの?」という命題について。
これを改めて解説して「確かに良いね!」「便利だね!」「テストに活かせるね!」とみなさんに再認識してもらうのが目的です。
またそれと併せて日常生活に潜むポリモーフィズムの例を出しながら、わかりやすさに特化します。
さらに、日常生活に潜むポリモーフィズムの具体例を紹介し、わかりやすさを追求します。
熟練のエンジニアであっても、「頭では理解できるけれど、初心者にわかりやすく説明するのは難しい」と感じることがあります。高齢化が進むPHP界隈で、PHPの魅力や便利さを伝える流れの中で、オブジェクト指向の良さも一緒に解説しましょう。
藤掛治 市場の要求に応じた大規模な新機能の追加は、プロダクトの成長に不可欠です。
しかし、2001年ローンチの「メールディーラー」のようなレガシープロダクトは、その挑戦が特に困難です。
メールディーラーは全機能が一台のサーバーに集約され、フレームワークなしのPHPファイルでDBアクセスとHTML出力を行う陳腐化が著しいシステムが背景にあります。
その一方で、LLMに代表されるAIブームがメール共有市場にも影響を及ぼし始め、「AIを導入していないことがデメリット」へと市場の要請が変化。
私たちは、この状況に対応するため、「AIクレーム検知機能」をサービスに導入することを決定しました。
しかし、大規模なリファクタリングが困難な中、私たちはAI機能を既存システムから外出しする戦略を採用。
史上初のβ版をDocker互換のコンテナであるPodmanで構築し、実証実験を通じてChatGPTの精度を向上させました。
さらに製品版をAWSで構築することで実用レベルの精度を実現し、設計時の見積りより約65%のコスト削減に成功しました。
本トークでは、テクニカルリーダーである私が、このレガシーの壁を越えた戦略を具体的な事例を交えて公開します。
・AWS導入にあたり、利害関係者へ目的を整理し、どのように説得・合意形成したか。
・ベータ版での精度向上の試行錯誤と、AWS移行によるコスト削減とパフォーマンスの向上をどのように達成したか
・AWSのSQSを使い、レガシーと新システムとをどのように接続したか?
本セッションを通じて、レガシーなシステムに対して、市場の変化と最新技術を取り込む新しい試みの参考にしてください。
我々ソフトウェア開発者の日々の業務は、常に不確実性との戦いです。
新しくチームに加入したメンバーが「今までの現場で一番チームとしての一体感がある」と評してくれた我々のチームも、最初から全てが順風満帆だったわけではありません。
立ち上げ当初は、楽観的すぎる見積もり、沈黙が支配するお通夜ミーティング、そして正常系すら動かない壊れたプロダクトコードなど...
プロセスもチームも、まさにバグだらけで崩壊寸前でした。
このセッションでは、立ち上げから半年以上、数々のトラブルや不確実性と向き合う中で私たちが実践してきた、タスクの「解像度」を上げる工夫や対話の文化作りなど、チームを立て直すための具体的なテクニックについてN=1の事例として赤裸々にお話しします。
■ アジェンダ
前途多難なチームの「バグ」と向き合う
立ち上げを乗り越え、チームがぶつかった「3つの壁」と修正パッチ
そして、その先へ
■ このトークで持ち帰れること
yamamu 「顧客の業務フローをヒアリングし、その業務に必要なデータベース構築を自動化する」
夢のようなLLMアプリケーション開発に挑んだ私たちが直面したのは、「LLMは所詮トランスフォーマーであり、論理計算機ではない」という現実でした。
本トークでは、その限界を踏まえたうえで実用的にLLMを使いこなすための設計戦略についてお話します。
私が開発に関わる製品は、ユーザーがDBにテーブルやフィールドを自由に作成できる特殊なPHP製の大規模SaaSであり、構築される定義には厳密な整合性が求められます。
顧客へのヒアリング(自然言語・曖昧)から、この柔軟かつ厳密なDB構成(構造化データ)を導き出すため、私たちは「プロンプト一発ドカン!」で解決することを諦めました。
本トークでは、PHP製SaaSにPython製のLLM機能を統合したアーキテクチャの全貌と、実用レベルの精度を出すために繰り返した「泥臭い試行錯誤」を共有します。
「チャットボットを作ってみた」の先にある、複雑な要件を伴うシステム開発におけるLLM活用の勘所をお話しします。
nsfisis コードゴルフというコーディング競技があります。
コードゴルフとは、問題に対してコードを提出し、テストが通ったコードのうち最も短いコードを書いた人が勝利するというものです。
PHPerKaigi 2024 ではコードゴルフコンテストを、PHPerKaigi 2025、2026 では、コードゴルフを元にしたコードバトルという企画を実施しました。
こういったシステムを安易に実装すると、サーバ上で任意のコードを実行することになり、深刻な脆弱性を作り込んでしまいます。
このセッションでは、これらの企画の技術面・運営面での裏側を話します。
いとこー Inertia.jsはLaravelとモダンフロントエンド(React, Vue.js)をシームレスに繋ぐアダプターです。
Laravelから見るとbladeテンプレートを利用するのとほとんど同じ書きっぷりでReactと連携することができます。
バージョンが2.0に上がってからはprefetchや無限スクロール、遅延ロードなどもサポートされ、より利便性が向上してきています。
この登壇ではInertia.jsの基本的な使い方を説明しつつ、どんなところが便利なのか
どういうふうに使うとより便利なのかについて、紹介していきます。
DPon TiDB は「NewSQL」と呼ばれる分散データベースで、
MySQL 互換のプロトコルを持ちながら水平スケールできるなんだかすごいやつです。
さてMySQL互換というからには、さぞ移行もしやすいことでしょう!
MySQLを利用している既存のLaravelのアプリケーションをローカル環境でTiDBに切り替えてみて、果たしてどこまで動くのか?
実際に切り替えてみてからの躓きからTiDBとMySQLの違いを掘り下げ、完全に理解していきましょう!
やまずん 「テスト」という言葉は、文脈によって全く異なる意味を持ちます。
例えば、プログラマーとQAが「テスト」について話すとき、よく認識のズレを感じることがあります。
不思議ですよね。
それは、テストには「開発手法(設計)」としての側面と、「品質保証」としての側面の二面性があるからです。
この違いを理解せず、開発手法としてのテスト(TDDなど)だけで「品質は保証された」と判断してしまうことは危険です。
それと同時に、品質保証の側面だけから開発手法としてのテストを語ることも、また危険です。
本セッションでは、テストを「事実から学習し、意思決定するためのフィードバックループ」と捉えます。
そして、アジャイルテストの4象限を用いて、その役割の多様性を整理します
テストから得られた情報によって、チームを導き、支援するような役割を表すのがこの側面です。
一方で、作り手が考える「あるべき姿」とはまた違った視点から、批判的に評価し、チームの自信とステークホルダーへの説明責任を果たす役割を持つのがこの側面です。
上記の左右の軸に加え、それが「ビジネス(ユーザー)視点」なのか「技術(内部品質)視点」なのかでマッピングすることで、テストの目的はより鮮明になります。
テストの二面性を知り、アジャイルテストの4象限を使うことで、漫然とテストをしていたことに気づくかもしれません。
これらは「誰のために、どんなことをするのか」に気づくことができる強力なツールです。
テストの二面性と4象限へのマッピングを使って、チームで納得のいくコミュニケーションを行うためのヒントをお話しします。
やまずん 「バグ」という言葉を聞くと、ネガティブな気持ちになるプログラマーは少なくありません。
多くの人にとって、バグ報告は「自分のミスへの指摘」のように感じられ、決して気持ちの良いものではないでしょう。
その結果、バグ報告を躊躇したり、見なかったことにしてしまう心理が働くことも理解できます。
しかし、1人のテストエンジニアとして一貫して思うのは、バグは誰かの「罪」ではなく、単なる「事実(期待結果との差異)」です。
この事実と正しく向き合うための技術こそが「バグ管理」だと考えています。
そして、それを運用するのは感情を持った人間です。
本セッションでは、バグ管理を「(意図的でないにせよ)開発者を責める場」から「チームが前進する場」へと変革した実践事例をお話しします。
バグとは「現実で起こっている問題」であり、リスク管理の対象として適切に管理すべき対象です。
バグを全て修正するのではなく、限られたリソースの中で建設的に対処することが必要です。
「期待と違う挙動」は、実はプロダクトを良くする機会であることに気づきました。
呼び方を変えるだけで、バグ起票や対処のハードルが下がった事例を紹介します。
重大度という、そのバグが持つ悪い結果を予知するステータスがあります。
これは一般的に「Critical/Major」などの言葉がありますが、私がいたチームでは「座敷童(軽微)」「鬼(重大)」「八岐大蛇(致命的)」と定義しました。
これにより「今週は鬼を退治しよう!」とチームの会話がポジティブに変わりました。
バグ管理は重要です。一方で、嫌な気持ちを放置するのも違います。
バグ管理をハックして、毎日の開発を楽しくしませんか?
やまずん 「全数テストは不可能」というソフトウェアテストの原則があります。
ごく単純なソフトウェアを除けば、すべてのバグを見つけることは不可能です。
では、私たちは不完全さを理由に、テストという活動やその責務を放棄してよいのでしょうか?
私はそうではないと考えます。
無限のテストに立ち向かうためには、「どこまでやれば我々の責務を果たしたと言えるか」を定義し、チームで納得する必要があります。
私はそれを「テスト計画」によって示せると考えています。
多くの現場において、テスト計画は「スケジュール調整」「テンプレートを埋める作業」と誤解されていますが、それは本質ではありません。
本来のテスト計画とは、ソフトウェア開発におけるコンテキストを深く理解し、「テストすべきもの」と同時に「テストしないもの」を定義します。
そして、「我々はこれでリリースできる」と納得することです。
本セッションでは、QAエンジニアである私の視点から、テンプレ埋め作業ではない、「テスト計画」という活動を構成するプラクティスを一部紹介します。
「テストはコンテキスト次第」という原則があります。
「なぜ作るのか」「誰が使うのか」、そして「制約」そういった情報を集め、整理することがテスト計画の第一歩となります。
我々は「作るべきもの」に集中することが多いです。
一方テストでは、「作ってはいけないもの」ということも考える必要があります。
プロダクトリスクと言いますが、これを批判的な問いによって見つけていきます。
完璧なソフトウェアが存在しないように、完璧なテストも存在しません。
しかし、我々はプロとして、「これなら大丈夫」と胸を張って顧客に届ける必要があります。
その方法のひとつとしての「テスト計画」について語りたいと思います。
きんじょうひでき "Official PHP SDK for MCP"、mcp/sdkというライブラリがあります。
これを使うと、簡単にPHPアプリケーションを「MCPサーバー」化できます。
例えばToolsを提供するなら、「jsonを返すPHPのメソッドに、「Tools」用のattributeを付けて、 Mcp\Server クラスを run() する」で、もうAIエージェントから使えます!
あまりに簡単。魔法のようですよね。
これは、一種のフレームワーク(FW)としての開発体験を提供していると言えます。
すなわち、
というものです。
──さて、phper的には「どうやって、”足場”と”アプリケーション機能"の分離を行っているのか」「MCPならではの特殊な事情を繋ぎ込んでいるのか」が気になりませんか?
なぜ、こんな少ない労力で「すぐ動く」のでしょうか。
そんな訳で、「MCPそのもの・便利な使い方」はさておき、「FWとしてのmcp/sdkはどう設計され、機能を実現しているのか?」を読み解こう!というトークです。
このトークでは、次のような知識と知恵を提供します。
村田祐葵 GitHub Copilot は優秀な相棒ですが、あなたのプロジェクトの「空気」まで読んでくれていますか?
特に長く運用されているレガシーコードや、独自のフレームワークを採用している現場では、AIが良かれと思って提案する「モダンで洗練されたコード」が、逆に修正の手間を生むノイズになることがあります。
「そこは namespace ではなく、アンダースコア区切りで……」と、AIの提案を人間が修正する作業に疲弊していないでしょうか。
本セッションのテーマは、Copilot への「教育」です。
単なるコード生成ツールとしてではなく、プロジェクトの文脈を理解した「専属の一流エンジニア」として育てるための、 Custom Instructions の活用と実践術を深掘りします。
曖昧な指示を排除し、意図通りに動かすプロンプトエンジニアリングの基礎から、標準規約とレガシー規約の共存テクニックまで。
明日からチームの Copilot が「新人」から「熟練の古参メンバー」へと変わる、実践的な育成技術をお持ち帰りください。
the よしだ とある事情により、Google Cloudの組織を移行することになりました。
このセッションでは、移行の背景や具体的な手順、直面した課題について詳しくお話しします。
また、移行と同時に進めたセキュリティの強化や、これまでIaC化されていなかったリソースの一部をIaC化する取り組みについてもご紹介します。
これらの経験を通じて得た知見を共有し、同様の課題に直面する可能性のある方々のお役に立てればと思います。