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

Long session (60 mins)

PHPで学ぶオブジェクト指向プログラミング入門

nrslib 成瀬 允宣 nrslib

オブジェクト指向プログラミングがどういったもので、どういうときに役に立つのかについて解説します。

多く初学者はプログラミングを始めて手続き型の記述に慣れた頃、オブジェクト指向プログラミングに出会います。
クラスやオブジェクトといった用語を学び、オブジェクト指向プログラミングの機能を実際に記述して体感します。
そして、混乱に陥ります。
なぜなら、オブジェクト指向プログラミングを活用することで何が嬉しいのか、機能を体験しただけでは理解できないからです。

道具を使いこなすには、それがなんであるかを学ぶと同時に、その目的を知らねばなりません。
目的を知らずに道具を扱えば、よく切れる包丁で紙を切るといったおかしな事態が起きてしまいます。

本トークでは、オブジェクト指向プログラミングがどういったもので何ができるかを解説するのと同時に、どうしてそれが必要なのかについてを解説します。

※本トークがカバーする範囲はクラスによるカプセル化とサブタイプポリモーフィズムまでです

■トーク対象

  • プログラミング初学者(条件分岐まで理解している)
  • オブジェクト指向プログラミングの使いどころが分からない方
2
Long session (60 mins)

ソフトウェアアーキテクチャの選び方 in PHP

nrslib 成瀬 允宣 nrslib

ソフトウェアはその生涯において、さまざまな要求を突き付けられます。
要求に応え続けるために必要なことは、コードをシンプルに保つことです。
ソフトウェアアーキテクチャは抽象化と問題の分割によって複雑性を減らし、コードをシンプルに保つことに貢献します。
ソフトウェアが中長期的に利用されることを前提とするのであれば、ソフトウェアアーキテクチャの理念やそれ自体を採用することは検討すべき事柄です。

しかしながら、ここにひとつの問題があります。
それはソフトウェアアーキテクチャが単一でないことです。

日夜進歩しつづけるソフトウェア開発の世界では、多くのソフトウェアアーキテクチャが生まれつづけています。
それらの中から、チームやソフトウェアの目的やライフサイクルに最適なものを選定するのは容易なことではありません。

そこで本トークでは「ソフトウェアアーキテクチャの選定」をテーマに、ソフトウェアアーキテクチャの特徴や実装例を紹介しながら、どういった観点で選定をしているかについてお話します。
本トークで取り上げる主なソフトウェアアーキテクチャは次のとおりです。

レイヤードアーキテクチャ
ヘキサゴナルアーキテクチャ
オニオンアーキテクチャ
クリーンアーキテクチャ
ADOP
※サンプルコードは Laravel を予定しています。
※本トークは JJUG CCC 2021 Spring で発表した内容を PHP にカスタマイズしたものになります

■トーク対象

  • ソフトウェアアーキテクチャがどんなものか知りたい
  • どういう観点でアーキテクチャを採択しているか知りたい
3
Long session (60 mins)

Asynchronous Programming in PHP

agiroLoki Lochemem Bruno Michael agiroLoki

Input-Output (otherwise known as I/O) is commonplace in daily programming but is quite arduous. PHP, though robust, offers sequential, blocking I/O solutions that require one to await completion of one task before starting another. Blocking I/O is somewhat inefficient, especially in modern applications that are computationally intensive in nature. Enter ReactPHP, a PHP-userland affable suite of technologies - complete with an event loop, a NodeJS-akin server, and Promises.

ReactPHP offers the advantages of non-blocking I/O - present in runtimes like Node.JS - to the PHP developers who use it. It provides, via the Reactor pattern, a means of efficiently running I/O operations in an event-driven domain.

My talk titled Asynchronous Programming in PHP with ReactPHP is an attempt to distill asynchronous non-blocking I/O concepts for a PHP audience. The first part is an introduction to non-blocking I/O and describes the advantages of adopting event-driven approaches. The second part is a description of streams, promises, and the event loop. Lastly, the third and fourth parts - the respective focus points being usage and application of ReactPHP - conclude the session.

1
他イベントOK Long session (60 mins)

PHP 8.1: Enums

Ayeshlive Ayesh Karunaratne Ayeshlive

PHP 8.1 brings Enums, one of the most requested features in PHP.

Enumerations allow creating strict and type-safe structures for fixed values. An Enum structure can hold a number of values that can also be backed with integer or string values.

In this comprehensive session, we will discover what Enums are, why they are useful, how to apply them on PHP applications.
Audience

This session is for those who are familiar with modern PHP practices such as Object Oriented Programming, principles such as Liskov Substitution principle; familiarity with such concepts can help a lot.
What you will learn

  • What are Enums.
  • Why Enums are useful.
  • How to use Enums
  • Migrating from magic constants/values to Enums.
  • Backed Enums and storing/fetching Enum values with a database.
  • Using Enums in a Drupal context.
  • Caveats when using Enums.

Author

Ayesh Karunaratne is the author of PHP.Watch (https://php.watch), where he provides in-depth articles and documents on PHP and latest changes to the language.

1
他イベントOK Long session (60 mins)

Build an All-In-One Application Server Using Swoole

deminy Demin Yin deminy

In recent years, more and more PHP developers are interested in asynchronous frameworks, like Swoole. However, Swoole brings to PHP not just asynchronous programming; there are a few mind-blowing features in Swoole that many developers are not yet aware of. In this talk, I will discuss how to use Swoole to build an application server to serve web requests, to handle cron jobs, and to process job queues without relying on any third-party applications or software.

1
他イベントOK Lightning talk (4 mins)

Ruby + Rails使いが、PHP + Laravelで新規プロダクトMVPを開発してみた

kou0525 hayapee kou0525

■トーク対象
Ruby + RailsとLaravel + PHPの比較(新規事業開発)

■トークの概要
・業務経験2年のWebエンジニア
・Ruby + Railsでマーケティング支援ツールの開発、運用を行ってきた。
・新規事業開発室に異動となり、MVP開発を任された。(チームメンバー2名のリーダー)
・技術好奇心でPHP Laravelを採用
・Railsは自由に書ける分、チーム開発時のRVに工数がかかる。(直感的に書けるRubyの弱点)
・一方Laravelは、PHPの型が整っているのでレビューがしやすい。
・Rails(Ruby)とLaravel(PHP)のメリデメを実際の開発工数を比較して行う。

1
他イベントOK Regular session (25 mins)

技術を武器にやりたいことを実現したい。そうだ企画力を高めよう(企画初心者向けセッション)

_yoshimasa 吉政忠志 _yoshimasa

技術があればある程度の物は作れると思うのです。会社や周囲を巻き込んで何か実現しようと思った際は企画書が有効です。
そもそも会社は稟議で承認を得てますが、その稟議も企画書なのです。一方で技術はできても企画書を書くのはちょっと苦手という方もいると思い、PHPer向け企画書の書き方と企画力の高め方を実例を用いて解説します。

企画書の本も出した企画者一筋30年の講演者が解説します。(うわっハードルを上げてしまったw)

1
他イベントOK Long session (60 mins)

初心者セッション

kashioka 有限会社アリウープ柏岡秀男 kashioka

本当の初心者のためのPHPセッションです。
例年開催しており、PHPが初めて、途中で挫折した、プログラミング言語に慣れていない人に聞いていただきたい基礎的な内容です。
PHPとは何か、実行環境は、簡単なサンプルを交えながらPHPについてお伝えします。

他イベントOK Lightning talk (4 mins)

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

HiroyaYamamoto1 やまもとひろや HiroyaYamamoto1

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

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

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

1
他イベントOK Regular session (25 mins)

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

HiroyaYamamoto1 やまもとひろや HiroyaYamamoto1

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

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

1
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 を使ってきて得られたノウハウを交えてお話できればと思います。

1
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 を使ってきて得られたノウハウを交えてお話できればと思います。

2
他イベントOK Lightning talk (4 mins)

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

_yoshimasa 吉政忠志 _yoshimasa

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

1
他イベントOK Long session (60 mins)

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

ex_takezawa 竹澤有貴 ex_takezawa

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

7
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分間にいたします。

4
他イベントOK Lightning talk (4 mins)

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

kanbo0605 カンボ@沖縄 kanbo0605

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

2
他イベントOK Regular session (25 mins)

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

kanbo0605 カンボ@沖縄 kanbo0605

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

2
他イベントOK Lightning talk (4 mins)

Laravelで始めるUuidTraitの使い方

kanbo0605 カンボ@沖縄 kanbo0605

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

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

1
他イベントOK Regular session (25 mins)

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

kanbo0605 カンボ@沖縄 kanbo0605

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

2
他イベントOK Lightning talk (4 mins)

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

kanbo0605 カンボ@沖縄 kanbo0605

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

1