PHP Conference Japan 2021 トーク一覧

採択 Learning Community / Communication Lightning talk (4 mins)

カンファレンスはフィードバックが大事

HiroyaYamamoto1 やまもとひろや HiroyaYamamoto1

PHPerKaigi2021でベストフィードバッカー賞をいただきました。
これは「フィードバックの数 x 愛」が1番だったという賞ということでした。
カンファレンス中に合計21個のフィードバックを送っていました。
正直見たセッション全てには送れていないです。

実際みんなあんまりフィードバック送ってないのかな?と思ったのでこのLTの時間を使って
・フィードバックって大事だよね
・フィードバック送ってみようかな?
って少しでも多くの人に思ってもらおうと思いプロポーザルを投げました。

大きなカンファレンスでプロポーザル採択による登壇はしたことがありません。
よろしくおねがいします!

4
Security Regular session (25 mins)

フレームワークから学ぶCSRF対策

HiroyaYamamoto1 やまもとひろや HiroyaYamamoto1

皆さんアプリケーションのセキュリティ対策はしっかりしていますか?
フレームワークを使っていれば大体自動で対策をしてくれているCSRFですが、実際どういう攻撃手法でどういった対策をされているか認識してる人はどれくらいいるでしょうか?
本セッションではまずCSRFとはどういった攻撃手法なのかを解説します。
次にメジャーなフレームワークのソースを読み、どうやってCSRFを対策しているかを読み解いていきます。

大きなカンファレンスでプロポーザル採択による登壇はしたことがありません。
よろしくおねがいします!

2
PHP8 Laravel Long session (60 mins)

Laravel でも非同期処理が扱える!? PHP8 から初める非同期処理 〜 Laravel Octane 〜

m3m0r7 めもり〜 m3m0r7

Laravel 公式から非同期処理 HTTP サーバーとして動作する Laravel Octane は PHP8 から使用可能です。Laravel Octane は Laravel を開発しているテイラー自らが開発に乗り出しているものです。

Laravel Octane は非同期処理の話を賑わせている RoadRunner や Swoole に対応した HTTP サーバーで、重たい処理などを非同期に処理をしたいニーズにも満たしています。私自身は Laravel Octane とは別に laravel-swoole と呼ばれる HTTP サーバーを 1 年ほど試してきて、プロダクションで扱う際のノウハウをいくつか得てきました。そこで、Laravel Octane を使うメリット、Apache や Nginx と何が違うのか、使う上での注意点、laravel-swoole を使ってきて得られたノウハウを交えてお話できればと思います。

2
採択 PHP8 Asynchronous Laravel 2021/10/03 14:55〜 Track2 Regular session (25 mins)

Laravel でも非同期処理が扱える!? PHP8 から初める非同期処理 〜 Laravel Octane 〜

m3m0r7 めもり〜 m3m0r7

Laravel 公式から非同期処理 HTTP サーバーとして動作する Laravel Octane は PHP8 から使用可能です。Laravel Octane は Laravel を開発しているテイラー自らが開発に乗り出しているものです。

Laravel Octane は非同期処理の話を賑わせている RoadRunner や Swoole に対応した HTTP サーバーで、重たい処理などを非同期に処理をしたいニーズにも満たしています。私自身は Laravel Octane とは別に laravel-swoole と呼ばれる HTTP サーバーを 1 年ほど試してきて、プロダクションで扱う際のノウハウをいくつか得てきました。そこで、Laravel Octane を使うメリット、Apache や Nginx と何が違うのか、使う上での注意点、laravel-swoole を使ってきて得られたノウハウを交えてお話できればと思います。

Discord Channel: #track2-7-b-laravel-octane

Business Lightning talk (4 mins)

PHPが求人一位になった。全世界のWebの8割がPHPで動く時代に、君は何をするのか。

_yoshimasa 吉政忠志 _yoshimasa

コロナ過とDXの波でPHPの求人がプログラミング言語求人で1位になった。気が付けば、全世界のWebでPHPが動くようになった。これからPHPerになる人は何をするべきか?これからのPHPerは何をするべきかを、マーケッタ歴30年のスピーカーが独自の視点で市場動向を解説します。

2
Architecture Long session (60 mins)

アクターモデルとマイクロサービスアーキテクチャ 分散トランザクション

ex_takezawa 竹澤有貴 ex_takezawa
このトークはスピーカー都合でキャンセルになりました

マイクロサービスアーキテクチャ化を着手する開発組織も多いと思いますが、
最大の難関でもある分散トラザクションへの対応、みなさんはどう解決していますか?
読み込みに対するアプローチはたくさんありますが、
分散トランザクションを制御する為にPHPだけで解決しようとする場合は、
非常に難易度の高いチャレンジとなります。
分散トランザクションを制御するには並行システムと分散システムを表現する高いレベルの抽象化が必要となり、
その難しさは一般的なWebアプリケーション開発と異なる問題解決方法が必要となります。
アクターモデルはこれらの分散システムを解決するアプローチの一つとして取り入れることができます。
今回はアクターモデルフレームワークの一つでもあるProto.ActorとGoを取り上げて
分散トランザクションを解決するためのアクターモデルの知識と基本、少しのSaga実例を踏まえて解説します。
*本セッションはPHPではなくGo言語がメインとなり、
いくつかの難しい概念を扱いますので、
初学者の方にはお勧めしません。

7
採択 Test / Quality Lightning talk (4 mins)

PHPでWeb Driver Clientを自作する〜己の手でブラウザ操作自動化を完全理解する方法〜

hgsgtk 東口和暉 hgsgtk

昨今のE2Eレベルのテストではその自動化テストのツールとしてSeleniumに代表されるようなブラウザ操作ライブラリが使われます。

Seleniumなどを使ったことがある人は多いでしょう?ではその裏側で行われている仕様については知ってますでしょうか?

本トークでは、PHPで実際にSeleniumのようにブラウザを動かすツールを自作するプロセスでそれらの仕様を理解する場を提供します。本トークで得られることは以下です。

  • ブラウザ操作するために必要なWebDriver
  • WebDriverについてのW3C勧告の標準化仕様
  • WebDriver Wire ProtocolというInterface仕様
  • PHPでWebDriverとコミュニケーションをしブラウザを動かす方法

本トークを経て、WebDriverについての理解が深まることで、ブラウザ操作の自動化についての技術的理解が一段深まるお得な4分間にいたします。

11
Laravel Lightning talk (4 mins)

Laravel Activity Logを使って簡単に変更履歴機能を実装しよう

kanbo0605 カンボ@沖縄 kanbo0605

変更履歴の機能を実装するのって、考慮する事も多いし、大変ですよね?
Laravel Activity Logを使うと、簡単に変更履歴の機能を実装できます。
このセッションでは、laravel-activitylogをどのように導入するか説明します。

3
採択 Architecture Laravel 2021/10/02 17:00〜 Track4 Regular session (25 mins)

LaravelとNuxt.jsで保守性を高める構成を考えてみた

kanbo0605 カンボ@沖縄 kanbo0605

SPA開発においてこんな課題ありませんか?
・フロントエンドとバックエンドで型の整合性を担保したい。
・SPAのディレクトリ構成ってベストプラクティスを見つけるのが難しい。
そんな人の為に、ディレクトリ構成や静的解析、型チェックで工夫している点をお話します。
具体的には静的解析ではphpcs、phpmd、eslint、stylelintなどを導入。APIのリクエストレスポンスでは、厳密な型チェックを行っています。

Discord Channel: #track4-3-a-laravel-nuxt

Laravel Lightning talk (4 mins)

Laravelで始めるUuidTraitの使い方

kanbo0605 カンボ@沖縄 kanbo0605

データベースのテーブル定義をしてて、こんな事ってないですか?
・まだ始めたばかりのサービスでユーザ数を知られたくない。
・ユーザIDが連番になっていて、ハックされそうで怖い。

このようにユーザIDを公開したくない場合に、推測されにくいIDがuuidです。
UuidTraitを作って、Modelクラスでuseするだけでuuidの生成ができます。
このセッションでは、UuidTraitの作成から使い方までを説明します。

1
Refactoring Laravel Regular session (25 mins)

LaravelのFat Controller(3000行)をどうリファクタしていくか

kanbo0605 カンボ@沖縄 kanbo0605

途中から入ったLaravelでの開発プロジェクトでFat Controller(3000行以上)がありました。
このControllerをいかに可読性の改善、ファイルの細分化を行ったか話していきます。
例えば、外部サービスを使っているロジックはSrviceクラスに切り離し、ビジネスロジックはModelに切り離しました。
その他にも定数などになり得る箇所はEnumに切り離しました。
このようにいろんなロジックが入りがちなControllerのロジックを役割ごとに分離するやり方を解説していきます。

2
Test / Quality Lightning talk (4 mins)

本当にあった怖いPHPコード7選

kanbo0605 カンボ@沖縄 kanbo0605

今まで仕事で携わってきたPHPでの開発において、可読性、保守性が明らかに低かったコードの例を話し、リファクタリングする場合はどうするかなどを説明します。
例えば、メソッドの引数が7個以上ある。変数名が解読不能。if文のネストが7つ以上あるなどです。

1
採択 Service Development Lightning talk (4 mins)

これでリリースも怖くない!フィーチャートグルを導入入門

glassmonekey 永野峻輔 glassmonekey

皆さんリリースの頻度はどれくらいでしょうか?
毎日、毎週、もしかして毎秒だったりしますでしょうか。
一般的に我々開発者が顧客に望まれるプロダクトを作るためには高頻度のリリースは必要不可欠です。
しかし、それを実現するためには完全に作り込んだ機能が実現できてないといけないのでしょうか。
今回は未完成の機能をプロダクション環境に混ぜ込むための、フィーチャートグルの概念、効能をご紹介します。加えてlaravelに組み込んだ例もご紹介します。

11
Service Development Regular session (25 mins)

ついに、Webアプリでの帳票印刷のベストプラクティスを編み出しました

ttskch たつきち ttskch

みなさん!帳票印刷してますか!

令和になっても相変わらず紙の書類の需要は大きく、Webアプリ開発においても帳票印刷機能は多くの案件で要求されますよね。
しかし、これがとにかく面倒くさい。

・複雑なレイアウトの帳票をHTML/CSSでデザインするのが地獄
・かといって超微細Excel方眼紙でデザインするのはもっと地獄
・しかもPDFに変換するときに微妙に見た目が崩れてどうにもできない

帳票印刷機能を実装したことのある方には強く共感していただけるのではないかと思います。

そんな面倒で難しい帳票印刷ですが、この度、ついに最強の方法を編み出しました🙌✨

・ピクセル単位で細かく帳票をデザインできる(しかも簡単に)
・帳票デザインの保守性が高い(修正が容易)
・印刷時に見た目が一切崩れない

という条件を満たせる唯一(当社調べ)の帳票印刷メソッドです👍

この至高の方法の具体的な実践手順について時間の許す限り詳しく解説します!

有償の帳票エンジンはなかなか高額で導入できる案件が限られていると思いますので、自力で実装する場合のプラクティスの1つとしてぜひ参考にしていただければと思います✨

5
Service Development Long session (60 mins)

ついに、Webアプリでの帳票印刷のベストプラクティスを編み出しました

ttskch たつきち ttskch

みなさん!帳票印刷してますか!

令和になっても相変わらず紙の書類の需要は大きく、Webアプリ開発においても帳票印刷機能は多くの案件で要求されますよね。
しかし、これがとにかく面倒くさい。

・複雑なレイアウトの帳票をHTML/CSSでデザインするのが地獄
・かといって超微細Excel方眼紙でデザインするのはもっと地獄
・しかもPDFに変換するときに微妙に見た目が崩れてどうにもできない

帳票印刷機能を実装したことのある方には強く共感していただけるのではないかと思います。

そんな面倒で難しい帳票印刷ですが、この度、ついに最強の方法を編み出しました🙌✨

・ピクセル単位で細かく帳票をデザインできる(しかも簡単に)
・帳票デザインの保守性が高い(修正が容易)
・印刷時に見た目が一切崩れない

という条件を満たせる唯一(当社調べ)の帳票印刷メソッドです👍

この至高の方法の具体的な実践手順について時間の許す限り詳しく解説します!

有償の帳票エンジンはなかなか高額で導入できる案件が限られていると思いますので、自力で実装する場合のプラクティスの1つとしてぜひ参考にしていただければと思います✨

3
採択 Architecture 2021/10/03 14:55〜 Track3 Regular session (25 mins)

抽象のはしごの上手な登り方〜使いやすい汎用ライブラリを作るために〜

77web 菱田 裕美 77web

日々アプリケーションに向き合って開発している中で、「またこの機能書いてる…以前にも同じ機能を書いた気がする…」となることはありませんか?
このお悩みは、よく使う機能の汎用ライブラリを作っておくことで解消できるのですが、うまく抽象化ができていないと、使いにくい汎用ライブラリになってしまったり・汎用ライブラリを使うたびにカスタマイズ開発が発生したり…という別のお悩みが発生してしまいます。こうなってしまっては、楽をするための汎用ライブラリなのに本末転倒ですね。
過去のプロダクト・今のプロダクト・未来のプロダクトを見据えて、上手に抽象のはしごを登り、使いやすい汎用ライブラリを作るためのコツをサンプルコードを通してお伝えします。

Discord Channel: #track3-7-b-build-generic-library

採択 Architecture Test / Quality 2021/10/03 11:20〜 Track 1 Long session (60 mins)

SymfonyとDoctrineで簡単クリーンアーキテクチャ 〜プロトタイピングにこそクリーンなTDDが活きた話〜

角田 一平, たなかひさてる

新しいサービスを始めるにあたって、機能やアイデアを検証する『プロトタイピング』。みなさんは、どのようにしてプロトタイプを開発しているでしょうか?この度、はじめてプロトタイピングの開発に携わらさせてもらう機会をいただき、さまざまな学びや気づきがありました。
今回は協働開発した、たなかひさてるさんと共に、携わったプロトタイプ開発の体験をベースとして、クリーンアーキテクチャを考慮して実践した手順や考えをお話しいたします。

以下の内容をお話しする予定です。

  • 開発環境・ツールの選定や構築
  • 開発の過程
  • クリーンアーキテクチャの導入
  • テスト、 レビュー

Discord Channel: #track1-5-cleanarchitecture

Database Long session (60 mins)

PHPer のための Elasticsearch 入門

m3m0r7 めもり〜 m3m0r7

みなさんは全文検索エンジンを使用したことはありますか。全文検索エンジンで有名なものと言えば Elasticsearch や Groonga, MySQL に備わっている Full Text Search (FTS) などです。MySQL の like で検索するとレコード数が多いデータの場合、数秒どころか数十秒、数分かかるなんてザラです。そこで全文検索エンジンを使うことで、多くのレコードやドキュメントを瞬時に検索できるようになります。Elasticsearch の仕組みの解説から、Elasticsearch-PHP を使って、実際にどのように全文検索のためのクエリを構築するのか、ユースケースを交えてお話できればと思います。

3
Service Development Test / Quality Long session (60 mins)

理解しておくべき PHP のバリデーション

m3m0r7 めもり〜 m3m0r7

Web アプリケーションを作るにあたって、絶対に外せないのは「ユーザーから受け取った値をデータベースに保存する」といったものです。
特に初心者が気をつけたいのは受け取った値の取り扱いです。例えば POST のリクエストで金額を受け取る時「is_numeric 関数だけを使えばいい」と答える人もいるかもしれませんが、これは答えとしては NO です。理由は 3 つあります。「金額は原則 0 以上の自然数である」「is_numeric だと float の値も true となる」、そして「PHP_INT_MAX 円で本当に大丈夫?」です。このようにバリデーションは実は奥が深いのです。様々なケースで、どういうバリデーションを書けばいいのか?金額だけではなく、電話番号、メールアドレスなど、セキュリティではなくプロダクトで必要となるバリデーションの話を広く浅く解説していければと思います。

1
Asynchronous Long session (60 mins)

Swoole で安全にコルーチンを使うには

m3m0r7 めもり〜 m3m0r7

何かと話題な Swoole ですが、特にデータベースや KVS (例えば Redis) 周りを扱うにあたって少しコツが必要です。Swoole の最大のメリットの一つとして手軽に非同期処理を導入できるという点ですが、データベースや KVS 周りはコルーチン安全ではない可能性があります。では、実際にコルーチン安全にして、既存のアプリケーションで使用するにはどうしたらいいのか、Laravel に Swoole を導入すると仮定して laravel-swoole と呼ばれるフレームワークをベースに解説します。

2