PHP Conference Japan 2022 トーク一覧

採択 Hardware Regular Session (25mins)

続CPUとは何か - ハードウェアエミュレータから見たCPU

tomzoh 長谷川智希 tomzoh

私はこの数ヶ月、趣味プロジェクトとして1980年代に栄華を誇った名作CPUであるZ80のハードウェアエミュレータを開発しています。
これはZ80で動作しているハードウェアからZ80を取り外して、代わりに自作のZ80ハードウェアエミュレータを取り付けて動作させるというもので、Raspberry Pi に自作のハードウェアを接続した形になっています。

PHP Conference Japan 2019で "「CPUとは何か」を PHPで考える" というタイトルで「プログラム実行環境としてのCPU」「エミュレート対象としてのCPU」「電気回路としてのCPU」という3つの立場から「CPUとは何か」について解説しました。
このトークではその続編として、Z80のハードウェアエミュレータの設計と実装を通してハードウェアエミュレータから見るとCPUはどう見えるかをお話します。

このトークを通じて、CPUに興味を持ち、CPUについて語る仲間が増えることを期待しています!

13
採択 PHP Lightning Talk (4mins)

FQDN(ドメイン名)のバリデーションが意外と面倒だった

akase244 akase244 akase244

FQDN(ドメイン名)が正しい値か否かをチェックする処理を書いたことがありますか?
filter_varで一発でしょ、と思ってたんですが調べてみるとどうやらそうでもなさそうだということがわかりました。
このトークではFQDNの奥深くてややこしい仕様についてお話します。

6
採択 PHP Regular Session (25mins)

さっぱりPHP 〜 標準関数と文法を極める

tadsan うさみけんた tadsan

いかに簡潔で当意即妙なコードを書くかはプログラマーにとって永遠の課題であり、実装パターンや標準ライブラリなどの知識と経験がモノをいうところです。逆に古いPHPの経験が長く最新のPHPをキャッチアップできていないと、現在では単純な関数呼び出しで済むものを冗長でパフォーマンスの悪い方法で書き続けてしまうということもありえます。

PHPには数多くの標準関数とシンタックスがありますが、その中には使いどころのわかりにくいものもあり、関数リストを全て読むといった学習法はあまり効率がよくありません。
今回のトークでは筆者がコードレビューやオンライン上の技術記事へのコメントを通じて指摘した内容を軸に、押さえておきたい関連知識を紹介します。

  • PHPマニュアルの見方と標準関数について
  • 古いイディオムとパフォーマンスについての考えかた
  • 標準関数を使ったイディオム
  • 静的解析 vs 標準関数
  • オンラインサンドボックス環境の使いかた
  • さっぱりを捨てるとき 〜 避ける余地のある標準関数
11
採択 Regular Session (25mins)

PHPバージョンアップのための依存ライブラリ更新との付き合い方

blue_goheimochi 大橋佑太 blue_goheimochi

年に1度(数年に一度?)巡ってくるPHPのバージョンアップという大仕事。

今回PHPのバージョンを8系にバージョンアップするための作業を実施したのですが、そのためにはまず依存ライブラリのバージョンアップと向き合う必要がありました。

小さくコツコツ手をつけておけばよかった・・・そんな気持ちと戦いながらもバージョンアップをなんとか完了させました。

1つ1つ丁寧に目の前の課題・問題点を洗い出し、対処していけば必ずバージョンアップを完遂できると思いますが、本トークではPHPバージョンアップのための依存ライブラリ更新とどのように付き合いながらPHPのバージョンアップしたか、PHPのバージョンアップ後の依存ライブラリ管理についてお伝えさせていただければと思っております。

6
採択 Security Lightning Talk (4mins)

LaravelでLIKE句のSQLインジェクション対策をする

fyui_001 ゆい fyui_001

派手なSQLインジェクションは一般的なWebフレームワークを使用すれば基本的に発生しません。
しかし、LIKE検索を行う場合はDoS攻撃が成立してしまうことがあります。

LIKE "%a%b%c%d%e%e%f%g%@%.%"

上記のようなクエリはSQLエンジンに大きな負荷をかけます。
LIKE句のメタ文字はエスケープする必要がありますが、

$query->where('hoge', 'LIKE', '%' . $value . '%');

と直に書いてしまうケースは多いと思います。

LaravelでのこのLIKE句のインジェクション対策はおそらく3通りほどあると思うので、
それぞれのソリューションをご紹介していこうと思います。

10
採択 PHP Performance Regular Session (25mins)

PHP メモリ管理術

m3m0r7 めもり〜 m3m0r7

何度も遭遇する PHP の「Allowed memory size of ...」。しかし、結局解決方法がわからず、最後には「ini_set('memory_limit', -1)」でその場を凌ぐという苦い経験をした方も多いのではないでしょうか。
PHP ではガベージコレクションもそれなりに発達しており、メモリを気にしないで書けるから良いと思っている人も少なからずいらっしゃると思います。
しかし、裏を返すと、メモリについてあまり考える機会がないとも言えます。PHP8 から弱参照といった機能も入り、メモリ管理に少しずつ関心が寄せられてきているのではないかなと思います。
そこで本トークでは、PHP でどのようにすれば省エネにメモリを使えるか、書き方のヒントまで含めてお話できればと思います。

15
採択 Troubleshooting Regular Session (25mins)

フレームワークの機能を使わずに標準関数使ったら障害起こした話

asumikam asumikam asumikam

「なんかXXXの機能が開かないんだけど、、」
深夜に自分がリリースしたものが原因で次の日に全企業に響く様な障害を起こしてしまいました。

本トークでは以下の2軸をお話していきたいと思います。

■ なぜ障害が起こったのか
根本原因は「フレームワークの機能を使わなかった」からなのですが、なぜそうなってしまったかを
実際にコードリーディングしながら解説します。

■ 我々の組織の障害フロー
障害かな?から障害対応、そのあとのポストモーテム方法を取り決めています。
これにより良くなったこと・改善できたこと、などをご紹介します!

自分が起こした障害ゆえ発表するのも恥ずかしいのですが、、、言わぬは一生の悔い!!
ぜひ今後の人生の教訓にどうぞ。

6
採択 Infra Regular Session (25mins)

AWS CDK に魅入られた PHPer がオススメする IaC から入るインフラの話

chatii ちゃちい chatii

古くはフルスタックエンジニアと呼ばれた人たちは、物理サーバーへのOS/各種ミドルウェアのインストールからネットワーク設定をし、さらにその上で動くアプリケーションを開発してきました。幾年が経ち、我々の前にはクラウドインフラが立ちはだかります。物理的な経験があるエンジニアにとっては、良くも悪くも抽象化されたインフラをどうにか乗りこなしているようです。
翻って、業界に入ったときからクラウドがある世代の PHPer にとっては、インフラは無限に知ることがある領域になってしまっているように感じます。
アプリケーションを構築するようにインフラをコードで表現できる AWS CDK を使って、インフラをより身近に感じて貰えるような話をしたいと思います。
※ AWS CDK なので AWS のみです
※ TypeScript で書くので PHP は登場しません
※ ベストプラクティスの話はしません、あくまで入門です

10
採択 PHP Regular Session (25mins)

治っていくmbstring 令和時代の文字化け

youkidearitai てきめん youkidearitai

繝「繧ク繝舌こ

文字化けとは↑のようなことを差しているように思われますが、
文字化けに悩まされた時代の文字化けはこんなものではなかったように思います。

例えば、Shift_JISではたくさんの亜種が生まれていました。
①は機種依存文字だから使ってはいけないよとか言われました。
メールをJIS(ISO-2022-JP)で送信する際の関数はmb_send_mailの前にmb_languageを設定するのだっけ?

閑話休題。
PHP 8.1から、major overhaul of mbstringという、mbstring拡張の大規模な改修が反映されるようになってきました。
そのためか、後方互換性の失われた動作をする文字を見つけてIssueにて報告しました。
確かに仕様通りに実装するとそうだったけども、当時の実装はそんなに厳密じゃなかったがゆえの後方互換性の破壊だったようです。こういうことこそが文字化けな気がしてきますね。

このトークでは、上記のようなことがあったことから、文字コードがどのように扱われていたのかをおさらいし、きちんと記録に残しておきたいです。

13
採択 Test & Debug Beginner 初心者向け Regular Session (25mins)

実践!ユニットテスト入門

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

テスト書いてますか?
テストを書く理由と実際のテストコードを紹介する実践編に分け、TDD を3年間実践してきた経験に基づいてお話しします。

テストを書いたことのない方が、テストを書いてみたいと思ってもらえることを目指します。
サンプルコードは PHP + PHPUnit ですが、他言語でも通用する考え方を紹介します。

■ 概要
・なぜテストコードを書くのか
・レガシーコードとは、テストのないコード
・テストはコストが安いフィードバックループである

■ 実践編
・テストケースは日本語で書こう
・いろんな assertion を知ろう
・arrange / act / assertion のテストコード実装パターン
・set up / tear down を使って前処理/後処理をする
・dataProvider でテストをまとめる(ただし早すぎる抽象化に気をつけよう)

8
採択 PHP Architecture Beginner 初心者向け Long Session (60mins)

フラットなPHPからオブジェクト指向で自動テストのあるPHPへ、そしてフレームワークへ

77web 菱田 裕美 77web

フラットなPHPの書き方はわかった、では次はフレームワークへ…というとき、どんな基準でフレームワークを選んでいますか?なぜそのフレームワークを使ってアプリケーションを書くと良いのか、理解できていますか?堅牢でメンテナブルなアプリケーションを作るとき、なぜフラットなPHPでは難しいのでしょうか?
入門書や動画講座でPHPの基本文法を学んだあと、盲目的に次のステップとしてフレームワークを学習するのではなく、必要性を実感した上でフレームワークを学習してほしい、と私は常々考えています。
このトークではフラットなペラ1枚のPHPスクリプトから出発して、オブジェクト指向で自動テストのできるPHPアプリケーションへ、そして更にフレームワークを使ったアプリケーションになるまで、コードと考え方をお話しします。

◆含まれるもの

  • PHPのオブジェクト指向の用語と書き方
  • ありふれたスクリプトの中に埋め込まれた「仕事」の発見と整理の考え方
  • PHPUnitを使った自動テストの基本
  • Symfonyフレームワークを使ってHTTPリクエストを受け取ってHTTPレスポンスを返すまで

◆含まないもの

  • データベース操作
  • テーブル設計
  • Laravelフレームワークの使い方
16
採択 Framework Frontend Regular Session (25mins)

なるべくJavaScriptを書かないでSymfonyのUIをリッチにする、『Symfony UX』。

ippey_s 角田 一平 ippey_s

WebアプリケーションでUIをリッチにしていくには欠かせない、JavaScript。
しかし、バックエンドを作りながらフロントの動きを作っていくのは意外と骨が折れます。

なるべくJavaScriptを書かずにUIをリッチに作っていくためにSymfonyには『Symfony UX』があります。
生まれて約1.5年のSymfony UXですが、大幅に改善・進化しました。
そんなSymfony UXの魅力や使い方について紹介していきたいと思います。

話すこと

  • Symfony UXとStimulus
  • Symfony UXの各コンポーネント
  • 実際の使い方

話さないこと

  • Symfonyの基本的な使い方
  • オートワイヤリングの詳しい説明
3
採択 Test & Debug Quality Regular Session (25mins)

Rethink your PHP Testing with PEST

SecondeJ James Seconde SecondeJ

One of the reasons that PHP Developers give for not doing TDD (Test-Driven Development) is that it takes a lot of time to learn. This is a fair reason: doing TDD with PHPUnit can be quite difficult, and doing things like mocking / using doubles can get very complex if you are using a Web Application Framework such as Symfony or Laravel.

Enter PEST: a new Open Source testing framework with its own code style. Built by one of the Laravel core team, it takes much of its structure from the Jest JavaScript testing framework. Its focus is on human-readable, simple yet powerful code to make testing a delight.

In this session, we'll learn:

  • How PEST is structured
  • How to write tests for common scenarios
  • How to use PEST on your existing code
4
採択 Architecture Framework Long Session (60mins)

Modularising the Monolith

avosalmon Ryuta Hamasaki avosalmon

様々なロジックが密に結合したモノリシックなアプリケーションは開発速度を遅くする一方で、マイクロサービスアーキテクチャはサービス間のコミュニケーションやトランザクションなどといった別の課題があります。
モジュラーモノリスは、モノリシックなアプリケーションの中にドメイン境界を引いて疎結合な状態をつくる、モノリスとマイクロサービスの中間的なアーキテクチャです。

このトークでは、モジュラーモノリスをLaravelアプリケーションに適用する方法を具体例を用いながら紹介します。Laravelを例にしていますが、他のフレームワークにも適用できる内容です。

Laracon Onlineで話した内容に少し付け加えて日本語で話します。
https://www.youtube.com/watch?v=0Rq-yHAwYjQ&t=4057s

トーク内容

  • モノリスとマイクロサービスのメリット・デメリット
  • モジュラーモノリスとは
  • Laravelアプリケーションのディレクトリ構造をドメインごとにモジュール化
  • ドメイン間のコミュニケーション
  • モジュラーモノリスなアプリケーションのテスト
  • ドメイン境界を超えたコードの自動検知
11
採択 PHP Beginner 初心者向け Long Session (60mins)

PHP初心者セッション2022

kashioka 柏岡秀男 kashioka

PHPカンファレンスの初期の頃から続けている初心者向けのセッションです。

PHPとはどんな言語か
PHPの実行環境にはどんなものがあるか
スクラッチでのPHPの書き方の基本

このセッションをお聞きいただけると手元で簡単なPHPのコードを実行することが出来るようになります。

・対象となる方
このセッションではPHPを普段使われていない方、プログラミングを始めて間もない方を対象としています。
・対象とならない方
ご自分でマニュアルを見て環境設定、プログラミングが出来る方は対象外です。

4
採択 PHP Long Session (60mins)

いちユーザーが PHP に新機能を追加するまで - Random Extension 5.x

zeriyoshi Go Kudo zeriyoshi

PHP では言語に対する変更に対し必ず RFC (Request for Comments) 文章を作成し、投票で一定数以上の票を獲得する必要があります。
またその提案に対する議論は必ず Internals ML と呼ばれるメーリングリストにて英語で行う必要があります。

上記のようなハードルの高さからか、比較的 PHP の利用率が高い日本からの新機能の提案、実装の例は少ない印象ですが、実際にやってみるとどうなのでしょうか。

今回は RFC を作成、実装し、 PHP 8.2 で実装が決まった Random Extension 5.x を例に PHP への新機能追加・変更を行っていくまでの道のりについてお話できればと思います。

22
採択 Team & Communication Troubleshooting Long Session (60mins)

エラーと向き合い、自信を持ってサービス開発に取り組み、前に進む

o0h_ きんじょうひでき o0h_

アプリケーション開発をしていると、どうしても不具合は生まれます。
バグ、障害、故障、エラー…近接する概念が色々とありますが、その中でも「プログラムetcの修正で修復できるもの・根治できるもの」が確かに存在します。

実際の所、皆さんのサービスで、それらはどのくらい発生しているでしょうか?その内、直せるはずの「バグ」「欠陥」はどのくらいあるでしょうか?
パッと答えが浮かばない、という方も多いと思います。
どうやってこの状況を脱していきますか。

とにもかくにも、「可視化」「現実的な目標」「コントロール可能な状況を作る」「割れ窓状態を脱する」のが重要だと思います。
そして、それに勝るとも劣らず「なぜ、エラーを少ない状態を実現したいのか。そこにどんな価値があるのか」という認識の統一も欠かせません。
チーム全体を方向づけ、小さな実践を押し進めながら「それらは夢物語なんかじゃない」と勇気づけるような成果を上げていきましょう。

本セッションでは、まずは「エラーやバグがもたらす不経済」について説明します。併せて「なぜ、検知と修復を急ぎたいのか」「遅れが何をもたらすか」も扱います。
その後に、自身の体験も踏まえながら「どうやって・何を努力していき、チーム一丸となって”エラーを減らす”を実現していくか」について共有します。

想定するオーディエンス

  • 「エラーを減らしたいな」「バグを減らしたいな」という気持ちのある人
    • もしくは「減らせるのだろうか」と気にしたこともなかった人
    • とはいえ「ガチガチのレギュレーション」や「窮屈さ」は望んでいない人
  • チームの生産性に課題を感じている人、向上させたいと考えている人

本セッションで得られるもの

  • 「なぜエラーを減らしたいか」の理論的な背景、根拠となりそうな情報
  • 組織として、どのようにエラーやバグを減らしていくか?という導入-出口の戦略
  • アプリケーションエラートラッキングツールの活用方針
    • Sentryの利用を想定しています

本セッションで話さないこと

  • アーキテクチャや「良いコードの書き方」といった、品質面の話

関連リンク、参考書籍

11
採択 Team & Communication IDE Regular Session (25mins)

【PhpStorm】モブプログラミングの実践と学び【結局はバランス?】

820zacky つざき 820zacky

みなさんモビングしてますか?
モビング(モブプログラミング、モブプロ)とは複数人でプログラミングを行うことを意味します。
なぜモビングをやるのか? どうやるのか? ペアプロとなにが違うのか? 結局生産性はあがったのか?
ずっとモブプロするのか、ときには並行作業するのか?

マーク・パール著「モブプログラミング・ベストプラクティス 」を実践してみて学んだことをギュッと圧縮してお話しします。

明日から役立つモブプロのエッセンスをお伝えできたら幸いです。

6
採択 Architecture Regular Session (25mins)

PHPで楽に始めるAPIのスキーマ駆動開発

komtaki Taki Komiyama komtaki

スキーマ駆動開発してますか?

一応OpenAPI(Swagger)書いてるけど、実装と乖離して放置されてませか?

レスポンスクラスなどをきれいに書こうとしたものの、データクラスが増えて面倒になっていませんか?

これまで2年以上開発してきた経験から、スキーマ駆動開発の勘所をご紹介します。

正しくOpenAPIを書いて、OpenAPI GeneratorやPostmanを使いこなせば、リクエスト&レスポンスのデータクラスやAPIクライアント、テストコードが自動生成できます。

本トークでは最大限OpenAPIを使い倒して、楽に効率化することを目指します。もちろんスキーマと実装の乖離は絶対におきず、複雑な設定ファイルは必要ありません。

PHPを前提に話しますが、多くの部分は他の言語で応用可能です。結合テストの実行で少しDI(Dependency Injection)が出てきますが、DIの考え方など基礎的な内容に触れません。

■話すこと
・スキーマ駆動開発とはなにか
・スキーマ駆動開発のメリットとデメリット
・OpenAPIとは
・OpenAPI GeneratorでAPIクライアントの自動生成
・スキーマと実装をずれないようにする
・Postman(Newman)で結合テストの自動生成
・DIで副作用を防ぐ

■話さないこと
・OpenAPIの詳しい書き方
・DIの考え方
・DIのライブラリについて

■想定対象者
・スキーマ駆動開発をやってみたい人
・スキーマ駆動開発をしているが、実装がスキーマとズレて困っている人
・APIの結合テストを自動作成したい人

6
採択 Architecture Framework Regular Session (25mins)

2年かけました!大規模サービスをJava製CMSからPHP+Laravelの構成にリプレイスし、運用している話

Motoki Hirao

ライセンスの都合でローカル環境での開発環境構築が不可能な、CMSに密結合したWebサービス。
CMSの仕様に引っ張られてトリッキーな実装がされることもしばしば…といった状況もありました。

そんなJava製CMSを利用して構築していたサイトを、2年間かけてPHP + Laravel にリプレイスしました。
ソースコード管理もGitで管理でき、EC2で動いていたサイトをDockerを用いてローカルでの開発も同時に実現しています!
ステージ環境やプロダクション環境はAWSサービスである、Fargate、Codeシリーズを活用でき、柔軟にスケーリングできるようになりました。
CMSに密結合していた部分もLaravelに変更することで、モダンなサイト開発体制に近づけることができました。

この発表では、10年以上運営されている大規模な求人サービス「はたらこねっと」でのリプレイスプロジェクトにて、工夫した点や苦労した点についてお話しします。画面は数百単位、PHPのコードだけで数千単位、単体・結合テストの項目数は数万単位のプロダクトです。
コード面やアーキテクチャでの工夫、継続的な開発を意識したCI/CDの活用、監視体制の改善など様々なチャレンジをしながら、リリースを実現しました。
本トークは中〜大規模なサービスリプレイスをお考えのオーディエンスにとって参考になるトークになるものと思います。

またリプレイスや現在の開発・運用も協力会社の方とともにやっています。
大規模なプロダクトなので、参加人数が多くなりチーム体制やマネジメントといったところも試行錯誤しています。
現状の開発体制も踏まえ、協力会社と一緒に開発するという組織づくりやチーム体制についても参考になれば幸いです。

このリプレイスを通して特に活用できた技術は下記です。

  • PHP
  • Laravel
  • PHPInsights
  • Docker
  • DataDog
  • NewRelic
  • AWS
    • Fargate
    • CodeBuild
    • CodeDeploy
7