PHPerKaigi 2023 トーク一覧
Dependency injection frameworks in PHP

本セッションでは、PHP のいくつかの dependency injection framework についての調査・検討を行います。
具体的には、 https://github.com/capsulephp/comparison にて示されている特定のシナリオを実現できるか?という比較内容を紹介します。
上記に加え、このリポジトリでは触れられていない追加機能や利用方法の違いについてまとめ、検討を行います。
オーナーシップことはじめ

「オーナーシップを持って開発したい」「オーナーシップを持って開発して欲しい」開発チームの根源的な悩みではないでしょうか。
- オーナーシップとは何か
- エンジニアがオーナーシップを持つにはどうしたらいいか
- (エンジニアをマネジメントする立場で)エンジニアにオーナーシップを持ってもらうにはどうしたらいいか
上記についてフリーランス→社員エンジニア→エンジニアリングマネージャと経験してきた立場から、実体験を交えて発表します。
文字コードとPHP - mbstringアップグレードガイド

PHP 8.1以降のmbstringの進化はとどまることを知らず、文字コードの処理に後方互換性の破壊が発生していたりします。
それを網羅したブログを公開したところ、作者のAlexさんにも読まれて、そこからレビューをお手伝いするようになりました。
また、PHP 8.3となるであろうバージョンでは、UTF-8への処理に高度な最適化が加わりそうなため、大幅な改善が期待できます。そのため、UTF-8を使うことをますます強くお勧めすることになりそうです。
本セッションでは、レビューに加わることになった経緯や、UTF-8とはというところから、文字コードとmbstringへの理解を深めていくものとしたいです。
約10年もののPHPアプリケーションとの付き合い方と、今後10年改善し続けるための取り組みについて

OPENLOGIでは10年もののPHPアプリケーション(Laravel)が日夜動き続けています。
コードの行数は数十万行あり、データベースのレコード数も数十億程度あります。
もしシステムが止まってしまったら、倉庫のオペレーションが止まり、ユーザの手元に商品が届かなくなります。
システムを安定的に動かし続けるために、「監視周りの強化」や「パフォーマンスチューニング」など様々な取り組みをしています。
また、次の10年改善し続けるための基盤作りも積極的に行なっています。
具体的に取り組んでいることについて幾つか紹介します。
問い合わせ調査に素早く回答するための「アキネイター」的アプローチの模索

ユーザーからのお問い合わせはプロダクトを運用するにあたり避けては通れません。
原因調査にかける時間を減らし、プロダクトの改修や新機能の開発に時間を割くためには、調査ノウハウの蓄積とそれらが瞬時に引き出せることが要求されます。
これらの要件を満たす方法を模索した結果、アキネイターのように質問形式で過去事例を絞り込む方法にたどり着きました。
このセッションでは、調査ノウハウと過去事例に関して、
miroで整理を試みた際の工夫点、その仕組みを運用する際に浮上した課題点をお話しします。
また、miroでの運用の限界を感じたためkibelaでの運用も試みたのでその際の工夫点、課題についてもお話しします。
技術負債とプロジェクトと私たち

サービス運用者の皆さん、技術負債解消に向き合えてますか?
機能拡張に対して技術負債がネックになり開発効率が落ちることに、何度も頭を悩ませた事があるのではないでしょうか。
ローンチして8年のフォトウエディング・前撮りの日本最大級のクチコミサイト「Photorait」では、サービスを更に拡大するべく新機能の開発を行いながら、長い年月の中で生まれたレガシーなシステムや非効率な運用フローなど、技術負債への課題解消も並行して行っています。
本セッションでは、新たな機能開発を止めずに並行して行っている負債解消への取り組みと、事業メンバーへの理解促進、そして今後の開発サイクル加速のために実施していることを発表します。
対象者
・サービス運用エンジニア全般
・技術負債改善の進め方を知りたい方
・事業メンバーの理解や賛同を得る方法を知りたい方
未来の開発者へ負債を残さないために取り組んだこと

ソフトウェア開発において、負債による生産性の低下は身近に起こり得ることです。
負債はソフトウェアに直接的な影響はないため軽視されがちですが、継続開発する上で多くの場合に課題となってきます。
そんな負債に対し皆さんはどのような取り組みをしていますか?
本セッションでは、DDD導入やテスト設計の見直し、SRE活動やOASの活用など、我々が負債に対しどのように取り組んできたのか、実例と共に解説いたします。
本セッションを通じて
「負債を残さないために何をすればいいかわからない」
「他に良い方法があれば知りたい」
という方が参考にできるような時間を提供いたします。
【LT2本立て】オブジェクト指向に基づいたユニットテストの記述方法/Symfony超入門!コマンドだけでCRUD画面を作るチート法

カルテット開発部の2人によるLT2本立てでお送りします!
【オブジェクト指向に基づいたユニットテストの記述方法 by伊神】
ユニットテストが依存しすぎたり冗長になってしまっていませんか?社内ではその問題が起きないようにオブジェクト指向の考え方に基づきテストを書いています。オブジェクト指向に基づいた考え方いくつかピックアップしてご紹介します。
【Symfony超入門!コマンドだけでCRUD画面を作るチート法 by志賀】
SymfonyにもLaravelのphp artisan make:xxxのような公式コマンドがあります。それを使って、たった数コマンドでCRUD画面ができちゃうチート法教えちゃいます!これであなたのSymfonyチョットデキル
サイボウズGaroon開発チームの「完成度低いの歓迎LT大会」(PHPerKaigi出張版)

サイボウズのGaroon開発チームでは「完成度低いの歓迎LT大会」を不定期に開催しています。
このLT大会の目的は、登壇のハードルを下げることです。
LT大会を重ねるうち、より登壇ハードルを下げるため「完成度の低さ」が歓迎されるようになり、完成度の低い発表は実況スレッドで褒められるように、逆に完成度の高い発表には「完成度が高すぎる」と指摘が入る現象も発生しました。
このスポンサートークでは、完成度低いの歓迎LT大会を開催することになった経緯とその成果についてお話しした後、
実際にGaroon開発チームの3名による「完成度低いの歓迎LT大会」をお届けします。
直に完成度低いの歓迎LT大会の雰囲気を感じ取ってもらえればと思います。
どうぞ本家のLT大会のように、完成度の低い点を褒め、完成度の高い点には指摘しながらご参加ください。
PHP/Laravelで実現する建設DXサービス「建設支援クラウドPhotoruction」の今
株式会社フォトラクションでは「建設の世界を限りなくスマートにする」というミッションのもと建設支援クラウドPhotoructionを提供して早5年超。
サービスの基盤の大部分はPHP/Laravelで実現されております。
我々の提供するサービスがどのような課題を解決しているか、またそれらがどのような構成で実現されており、日々技術的な課題に向き合い改善しているかを紹介させて下さい。
それらを通じて、皆様に建設DXの世界を少しでも知っていただけると幸いです。
スピードを損なわないDevSecOpsなOSS開発手法
開発と運用とセキュリティの3連携は昨今のシステム開発にとって、重要な課題です。
開発期間を短縮しつつ、セキュリティも担保する。EC-CUBEが普段行っている
OSSならではの開発手法を皆さんにお伝えします。
成瀬の挑戦状

スポンサー企画「成瀬の挑戦状」にグループメンバーが挑戦!
果たして完全クリア者は現れるのか!?
実況と解説は成瀬がお送りします。
こちらのセッションはスポンサー企画「成瀬の挑戦状」と連動しております。
セッションでは解答解説も行います。
みなさまもぜひ「成瀬の挑戦状」に挑戦して、メンバーの四苦八苦する姿をお楽しみください。
傾聴: 「人の話を聴く」とはどういう事か 〜ロジャーズの中核三条件に立ち返って学ぶ対人援助の基礎の基礎〜

「傾聴」というキーワードを耳にした事がある人は多いでしょう。
これは何者で、なぜ必要とされるのか。自分なりに納得感を持ていますか?
ノウハウやテクニックとしてではなく、本質的な価値についても深く考えられていますか?
カウンセリングの大家カール・ロジャーズは、対人支援(カウンセリング)の現場において、聽く側に求める態度・資質を原則化しています。
それが「無条件の肯定的関心」「共感的理解」「自己一致」からなる、中核三原則です
これを元に、「人の話を聴く」とはどういう事か、その基礎的なマインドについて紹介します
想定対象: マネージャーやリーダーになりたての人など
・個対個の場面で、話が一方的になりがち / 関係性が深まっている感じがしない
・他者を援助する際に求められる要素を、感覚的にではなく理屈で抑えておきたい
・人の話を聞くのにすごく疲れたり、相手の感情に振り回されがちだと感じる
防衛的 PHP: 多様性を生き抜くための PHP 入門

PHP は歴史の中で大きく進化し,PHP 7 からは本格的に型付けをサポートし,PHPStan や Psalm といった強固に型を静的解析するツールも生まれました.チームで PHP を用いて開発していると,型や静的解析の方針や方法に差異が生まれてしまうことがよくあります.しかし,安全に継続して開発をしていくためには,その手法を統一し体系立てて利用されるべきです.また,手法から外れて開発を行うプログラマからコードを防衛すべきです.
このセッションでは,そうした防衛的な手法を多く取り入れて,安全に,長く PHP を使って(バージョンアップに遅れを取ることなく)開発を続けていくための方法をご紹介します.
話すこと
- PHP 8 時代の型・型検査
- 静的解析・フォーマットと IDE
話さないこと
- 静的解析や型を取り入れるべきかどうかの議論
- きのこ派かたけのこ派かの議論
とあるサービスの開発初期からリリースまでのシステム構成変更の変遷

最近正式版をリリースしたとあるサービスの、開発初期からリリースまでの約1年半の間に発生した様々なシステム構成変更について、変更の原因なども交えてつらつらとお話しします。
ゼロから開発チームを立ち上げ継続的にインクリメントを生み出せるようにした話

私が所属する筑波大学融合知能デザイン研究室では学術向けクラウドソーシングプラットフォームを運用しています。現在の開発チームは主に4名で、システムの運用、保守や新機能開発を続けています。
ところで、今年の3月で前任だった開発者が全員卒業してしまいました。4月から新たな開発チームで開発・運用を始めましたがソフトウェア開発の経験がほとんどない、立て続けに障害が発生する、ドキュメントが無いなど数々のトラブルに見舞われました。
このトークではそういった状況でジョインした私が、チームを立て直し継続的にインクリメントを生み出すために行なった事についてお話します。同じようにチームで開発を行っておりこうした難しさに直面している方に、これらを克服するための気づきやヒントが得られるようなお話をします。さらに学業や進路選びと並行しないといけない大学の研究室という特異な環境でのチーム開発の知見を紹介します。
PHP with OpenBSD

PHPerの皆さん!OpenBSD使ってますか?
FreeBSDのレンタルサーバーがあった時代はまだしも、世間の開発環境はLinuxのコンテナdocker一強、開発機でもdockerが利用できないと不便な時代となっています。
そのような情勢のなか、OSの選択肢が絞られてしまい他のOSを使った事が無いPHPerの方も多くいると思います。
OpenBSDプロジェクトはOpenSSHをはじめとし、LibreSSLなど普段から御世話になっているソフトウェアの開発も行なっており、殆どの人が利用したことあるプロジェクトでもあります。
セキュリティや利便性を重視するOpenBSDプロジェクトは他のOSには見られない魅力的な機能が多くあり、もちろんPHPから利用できる機能もあります。
このトークでは普段利用していない人も羨むOpenBSDならではの機能をPHPを交えながら紹介していきます
AWS CDK(TypeScript) で PHP アプリケーションをコンテナ化して Fargate にのせよう!

今イチオシの技術スタック、それは IaC(Infrastructure as Code) です。要するにコードでインフラ構成を管理しようというアプローチです。
コードで管理すると何が嬉しいのでしょうか?
- コンソールポチポチ、自前シェルスクリプトポチポチによる手動環境(属人性,手動性)からの解放
- 環境の複製/削除が簡単
- デプロイ後の監視の仕組みまでカバー
など、さまざまな利点がある IaC の中でも、 CDK というツールはとても便利です。
一番の特徴は 「いつも書いているスクリプト言語でコード化できること」 です。
CloudFormation や Terraform のような独自で宣言的に記述するよりも、エンジニア的にわかりやすくなります。
そんな CDK を使って PHP アプリケーションを Fargate 環境にデプロイしてみましょう!
PHPの配列の内部実装について学びたくなった。

「PHP の配列は、実際には順番付けられたマップです。」
この愛おしい文章から始まるPHPの配列は、PHPerにとって切っても切れない関係です。そんな大事な配列のことを、私達はどれほど知っていますか?
配列の内部実装の話はPHP7がリリースされた頃に多く語られてきたかと思います。しかし、2015年に私はPHPを触ってもいません!
PHPでお仕事をして3年目、これを機に配列を学び、内部実装を読み解いていこうと思います。
想定する対象者
- PHPの配列が好きな人
- PHPの内部実装について興味がある人
- PHP5.x ~ 7.xの人
話すこと
- 配列・連想配列の話
- PHP 5 → 7 の配列・連想配列の話
- 他の言語との比較(出来たら)
話さないこと
- 実用的な配列の使い方
- キャッシュ周り
PsySHを使った効率的なデバッグ方法について

皆さんは普段どのようにデバッグをしてますでしょうか?
var_dumpは勿論、echoなどを普段使うと思います。
ただ、毎回デバッグする度にブラウザで実行したり、スクリプトを実行して結果を待つのは手間です。
ブレイクポイントを貼って検証をしたり、実行前の変数の中身を素早く確認したいときがあると思います。
そこで「PsySH」の登場です!
このLTでは「PsySH」の導入から使い方を通じて、効率的なデバッグ方法について紹介します