PHP Conference Japan 2022 プロポーザル一覧

Regular Session (25mins)

PHP を用いたファイルアップロードの極意

m3m0r7 めもり〜 m3m0r7

みなさん、フレームワークや独自実装を用いて、ファイルのアップロードを対応しているプロダクトも多いのではないでしょうか。
実は私は、画像や音楽ファイルを含めたファイルのアップロードが、おそらくプロダクト開発をする上で苦手だなと感じることが多々あります。
「$_FILES を参照するだけでいいじゃん」そう思う人もいると思います。しかし、ファイルのアップロードというのは、より気を使わなければいけないことが多々あります。拡張子だけで、特定のファイル、例えば image.jpg というファイルの中身が png で送られている場合などもあり得ます。これはまだかわいいレベルです。そしてこれよりも悪質なものをアップロードされてくる場合もあり得ます。
以前、PHP を用いたファイルアップローダーサービスを一時的に運営しておりましたが、実装の際に、気をつけていた脆弱性や攻撃などを、フレームワークや独自実装において気をつけるべきアップロードされたファイルへの対応についてお話できればと思います。

Lightning Talk (4mins)

全エンジニアに向ける、ユニットテストへの誘い

stwile871 stwile871 stwile871

ユニットテストを生き甲斐としているPHPerが、ユニットテストの魅力を語ります。
プロダクト側のメリットではなく、いちエンジニアとしてのスキルセット向上に関して話そうと考えています。

1
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の結合テストを自動作成したい人

Regular Session (25mins)

個人情報漏洩が開発者に与える影響について

ippey_s 角田 一平 ippey_s

『個人情報漏洩』
おそらく多くの方が経験したくないインシデントのひとつでしょう。そんな個人情報漏洩が起こってしまった後、開発者にはどんな影響があるのでしょうか?
これは1人の開発者が個人情報漏洩事件の後に感じた、開発者への影響と心境の変化のおはなしです。

※個人の感想です
※企業の被害や対策内容についてはお話ししません
※PHPのコードが1行も出てこない可能性があります

Regular Session (25mins)

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

820zacky つざき 820zacky

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

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

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

2
Lightning Talk (4mins)

【超特急】4分でわかるモブプログラミング・ベストプラクティス【出来らぁ!】

820zacky つざき 820zacky

「 え!?4分でモブプログラミング・ベストプラクティスを!? 」

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

みなさんモビングしてますか?
モビング(モブプログラミング、モブプロ)とは複数人でプログラミングを行うことを意味します。
なぜやるのか? どうやるのか? ペアプロとなにが違うのか?
明日から役立つモブプロのエッセンスをお伝えできたら幸いです。

2
Lightning Talk (4mins)

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

fyui001 ゆい fyui001

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

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

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

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

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

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

2
Lightning Talk (4mins)

CloudFrontとCognitoを組み合わせて静的ファイルの閲覧制限をサクッと作ろう!

kubotak_public Kenjiro Kubota kubotak_public

API定義のSwaggerUIやデザインカタログのStorybookなどの静的ファイルを社内展開する際にどのようにアクセス制御してますか?
AWSを利用している場合はCloudFrontとCognitoを組み合わせることで簡単に閲覧制限の仕組みを作ることができます。
弊社ではSchemaSpyで生成したER図をこの仕組で社内共有しています。
この仕組の作り方についてサクッと!紹介したいと思います!

2
Regular Session (25mins)

PHP に新機能を追加しよう!よくわかる RFC プロセス

zeriyoshi Go Kudo zeriyoshi

PHP に新機能を追加したい!そう思ったことはありませんか?
もちろん PHP にはそれを実現してくれる Extension の機構がありますが、"言語として必要な機能だから PHP 本体に入れたいんだ!" ということも...

今回は PHP 8.2 に対する Random Extension 5.x を例として、 PHP に新機能を提案・追加するプロセスについてお話します。

6
Regular Session (25mins)

PHP の乱数事情と PHP 8.2 の Random Extension について

zeriyoshi Go Kudo zeriyoshi

何かと話題の PHP の疑似乱数生成器。 "壊れたメルセンヌ・ツイスタ" は有名ですが、関数のエイリアス化により発生した問題やモジュロバイアスの問題、
初期シード値の生成に関する問題など、様々な問題を抱えていたのはご存知でしょうか?

今回はそんな PHP の疑似乱数生成に関わるディープなネタを改善の歴史と共に振り返ります。

4
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 への新機能追加・変更を行っていくまでの道のりについてお話できればと思います。

5
Regular Session (25mins)

PHP初心者セッション(基礎の基礎)

kashioka 柏岡秀男 kashioka

PHPカンファレンスの初期の頃から続けている初心者向けのセッションです。
ショートセッションでPHPの概要と手元で実行する環境、簡単なコードの紹介をいたします。

PHPのご紹介
PHPを試せる環境
PHPはどんな言語か

このセッションをお聞きいただけるとPHPがどのような言語かを理解することができます

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

2
Long Session (60mins)

PHP初心者セッション2022

kashioka 柏岡秀男 kashioka

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

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

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

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

2
Lightning Talk (4mins)

Go言語で作るcomposer install

o0h_ きんじょうひでき o0h_

Composerはとても便利で、生活必需品ですね!!
ただし、狭い意味での composer install を考えると、 「composer.lockを読み取って」「ファイルをDL・解凍・規定のパスに配置する」というだけです。

もし、Composerの中身(実装)を読んで、仕組みを理解して、気持ちに寄り添う事ができれば・・・
必ずしも「PHPプログラム」ではなくても良いかも知れない。PHPの世界を飛び出して、Composerを実現する!!!
そんな夢を、私は見ました。

本LTでは、「composer installのためのツールを、Goで作ってワンバイナリで動かせるようにする」をテーマに

  • どのような実装になるのか
  • (PHPと比べて)実装の差異はどのように現れてくるか / PHPの弱点を補ったり、Goらしい味を出せるのか
  • もしかしたら何かの実用性もあるのか

と言った点に触れてお話をします。

Regular Session (25mins)

Composerを(PHP以外で)再発明する

o0h_ きんじょうひでき o0h_

現代のPHPには、既にComposerは欠かせないものになりましたね!
これ1つで、様々な機能やソリューションをもたらしてくれるツールです。

そんな便利なComposer、もっと仲良くなりたいことでしょう。
読んで、把握して、自ら作ってみるのはいかがでしょうか。
PHP自体の機能を利用しないと行けない機能(例えばPHP自体の実行を伴うCommandのフックなど)は難しくても、
「composer.lockを読み込んで(なぜなら純粋なJSONだから!)」「vendorディレクトリにソースを展開する(それってファイルのDLと展開ですよね!)」といった処理くらいならできそうに思いませんか。

やってみましょう!

やること

  • composer install の実行する単機能ツールをGoで作成し、その解説
    • composer.lock が事前に生成されている事を前提

本セッションで得られるかも知れないこと

  • 一歩引いて考えた「Composerの仕事は何で、どういう仕組みか」という理解
  • 「非PHP実行環境で、ワンバイナリでcomposer installが実行可能になったら何か便利なことある?」という考察
1
Long Session (60mins)

Modularising the Monolith

avosalmon 濱崎竜太 avosalmon

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

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

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

トーク内容

  • モノリスとマイクロサービスのメリット・デメリット
  • モジュラーモノリスとは
  • Laravelアプリケーションのディレクトリ構造をドメインごとにモジュール化
  • ドメイン間のコミュニケーション
  • モジュラーモノリスなアプリケーションのテスト
  • ドメイン境界を超えたコードの自動検知
1
Test & Debug 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
Test & Debug Regular Session (25mins)

PHP_CodeSnifferって何?どう動くの?読んでみました!

o0h_ きんじょうひでき o0h_

PHP_CodeSniffer(phpcs)は、「コードの書き方に規則を持たせようよ!!」を支援してくれるツールです。
予め定義したルールセットに従って、開発時のローカル環境やCI環境上で「ルールに沿っていないコード」を検出し、指摘してくれます。
また、同梱のphpcbfコマンドを利用することで、簡単な整形を機械的に行うことも可能です。

そんなphpcs、利用中の方も多いと思います。
では、中身はどうなっているのでしょう。どうやってPHPで実現しているのか・・気になりませんか?
「なぜphpcs/phpcbfは動くのか」を実際のコードから紐解いて見ます。

話すこと

  • phpcsの基本的なライフサイクルや概念
  • phpcsの中身(コード、実装)
    • 例えば「Sniff」とは何であり、どのように読み込まれて利用されるのか
  • phpcbfの基本的なライフサイクルや概念、処理の流れ

得られるかも知れないこと

  • phpcsを”理解”することによって、独自のsniffやrulesetを扱いやすくなるかも知れません
Framework 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の基本的な使い方
  • オートワイヤリングの詳しい説明
1
PHP Architecture Long Session (60mins)

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

77web 菱田 裕美 77web

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

◆含まれるもの

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

◆含まないもの

  • データベース操作
  • テーブル設計
  • Laravelフレームワークの使い方
3