採択
2021/10/02 13:00〜
Track 1
Long session (60 mins)
Beginner Test / Quality Sponsored

PHPにおけるコーディング規約と自動整形

GMOdev 橋口 巧 | GMOインターネットグループ

こちらでは初心者向けのPHPプログラマを対象にPHPのコーディング規約(PSR)と自動整形についてお話したいと思います。

自動整形ツール
php-cs-fixerとphp_codesnifferの挙動を一緒に見ていきたいと思います。

■アジェンダ
・そもそもコーディング規約はなぜ必要なのか
・PHPにおけるコーディング規約
・自動整形
・php-cs-fixerとphp_codesnifferの違いについて

少しでも皆さんの手助けになればと思います。

※サンプルはLaravelを使用したものになります

Discord Channel: #track1-sp-gmo

採択
2021/10/02 15:40〜
Track 1
Long session (60 mins)
Beginner Architecture

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

nrslib 成瀬 允宣

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

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

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

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

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

■トーク対象

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

Discord Channel: #track1-2-oop

採択
2021/10/02 15:40〜
Track2
Long session (60 mins)
Database Performance

PHPer が知るべき MySQL クエリチューニング

mamy1326 まみー

ORM が高性能になり、SQL (クエリ) を意識の外に置くことも増えてきました
おかげでより開発効率も向上し、スピーディ・高品質なコードが書ける率も上がっています

しかし…アラートは突然やってきます
落ちるページ表示速度、上がる DB サーバー の Load Average
そして大量のスロークエリ

もちろん原因はこれだけではありませんが、僕らの日常では、1つのスロークエリが DB サーバーを停止させることも少なくありません
SQL は書き方次第で簡単に障害に繋がります

また、障害発生時、プログラムがどんな SQL を実行しているのか
実装した SQL は速いのか、遅いのか
それがわからないと、障害解析で困る場面も多いです

障害などの緊急事態を回避する以前に、品質の観点でエンジニアには日常的に以下が求められると考えています。

  • スローログ監視
  • スロークエリ解消
  • スロークエリ予防

本セッションは、実例をベースに上記を説明しつつ「現場で使えるスロークエリの倒し方」を持ち帰っていただき、クエリ (SQL) チューニングへの敷居を低くすることが目的です
SQL 見よう!

障害の完全な予測は難しいです
だからこそ打てる手は多く持ち、できれば早めに打っておきたい
その手の1つとして、実際に行っているスロークエリの見方・倒し方・予防方法をお話しします

SQL はチューニングすることで品質の向上が可能です
PHPer であっても、SQL を日頃からチューニングしていきましょう!

スロークエリの見える化

開発当初は快適に動いていても、スロークエリは突然やってきます
では見える化はどうしたら良いのか、を

  • プログラムレベル
  • MySQL サーバーのログ(スローログ)

の 2 パターンで解説します

SQL の分析

スロークエリが見つかった場合に実行する主な内容を、項目別に解説します
普段の実装時・レビュー時にも実行することでパフォーマンス劣化の予防もできます

  • EXPLAIN
  • インデックス
  • インデックス管理

SQL の追求

要求仕様、設計から立ち帰り、そもそもこれ必要なんだっけ?を徹底的に疑ってみることも重要です
では何を追求すれば良いのか?を実例をもとにお話します

改善対応の流れ

まずいスロークエリを見つけ、解決していくまでの流れを、2つの事例から解説します

  • SQL そのものに問題がある場合
  • 複合インデックスで解消できる場合

スロークエリ予防

普段から予防のために実践していることをお話します

  • コード・設計・企画レビュー
  • 勉強会
  • ペアプロ

Discord Channel: #track2-2-mysql-tune

採択
2021/10/02 17:00〜
Track 1
Long session (60 mins)
Architecture

ドメインをモデリングして PHP コードに落とし込む

shin1x1 新原雅司

近年、PHP コミュニティでも DDD が大きく脚光を浴びるようになりました。その考え方に触れることで設計手法や実装パターンに興味を持つようになった人も多いでしょう。

DDD に限らず、多くの書籍では様々なパターンが紹介されています。
こうしたパターンは有用なのですが、特に設計パターンにおいては性質上、抽象的な内容となり、それ自体は理解できても自分が日頃おこなっているアプリケーション開発ではどのように適用すれば良いかがイメージできないことがあります。

本セッションでは、あるドメインを題材にして、モデリングから設計、そして最終的に PHP で実装するという一連の流れをご紹介することで、ドメインを中心に開発するイメージを持っていただければと考えています。

実際は、ドメインをモデリングして PHP コードに落とし込むという行為は誰もが日常的に行っているものです。
その手法や視点が異なるだけとも言えるので、こうしたやり方もあるのだなという気軽な気持ちでご参加ください。

Discord Channel: #track1-3-domain-modeling

採択
2021/10/03 10:00〜
Track 1
Long session (60 mins)
Database Performance

MySQLとインデックスとPHPer -PHPが本職でもMySQLを手懐けるために-

yoku0825 yoku0825
  • PHPerと言っていますがPHP関係なくサーバサイドアプリケーションエンジニア向けの内容です。
  • MySQLとインデックスの話をベースに、仕組みよりは「理屈は置いておいてやり方」にフォーカスします。
  • スローログを出して、集計して、EXPLAINにかけて、インデックスを足す、のプラクティスを紹介します。

目標は、「クエリーレビューで怪しげなSQLを先回りして直す」!

Discord Channel: #track1-4-mysql-index

採択
2021/10/03 10:00〜
Track2
Long session (60 mins)
Test / Quality

配列、ジェネリクス、PHPで書けない型

tadsan うさみけんた

近年、PHPの機能強化により型宣言だけで安全に書ける範囲が広まっています。

その一方でPHPStanやPsalmといった静的解析ツールはPHPでは表現できない強力な型を提供することでコード品質向上の価値を高めることが可能です。PhpStormはPHPプログラマに静的型の恩恵をもたらした一方、先述のツールと比べサポートする型について見劣りする点がありました。
ところが最近リリースされた待望の新バージョンである2021.2はこれまで静的解析ツールの専売特許だった型のいくつかがサポートされるようになり、型検査だけでなく入力補完などの恩恵を受けられるようになりました。そこで追加された型のひとつがジェネリクス(総称型)です。

本発表では、PHPの型についての基礎知識(今日からできる安心型付け入門)があることを前提として、PHPにジェネリクスは入るのか?の内容を軸に、PHPの型宣言では現時点で賄えない部分、特に配列の型およびジェネリクスの概念、class-string型の概念、そしてジェネリクスを実際に活用するためのテクニックを説明します。

Discord Channel: #track2-4-php-type

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

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

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

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

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

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

Discord Channel: #track1-5-cleanarchitecture

採択
2021/10/03 11:20〜
Track4
Long session (60 mins)
Asynchronous

Build an All-In-One Application Server Using Swoole

deminy Demin Yin

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.

Discord Channel: #track4-5-swoole
Joind.in: https://joind.in/event/php-conference-japan-2021/build-an-all-in-one-application-server-using-swoole

採択
2021/10/03 13:00〜
Track4
Long session (60 mins)
PHP8

PHP 8.1: Enums

Ayeshlive Ayesh Karunaratne

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.

Discord Channel: #php4-6-php81-enum
Joind.in: https://joind.in/event/php-conference-japan-2021/php-81-enums

採択
2021/10/03 15:40〜
Track 1
Long session (60 mins)
Security

SPAセキュリティ入門

ockeghem 徳丸 浩

シングルページアプリケーション(SPA)において、セッションIDやトークンの格納場所はCookieあるいはlocalStorageのいずれが良いのかなど、セキュリティ上の課題がネット上で議論されていますが、残念ながら間違った前提に基づくものが多いようです。このトークでは、SPAのセキュリティを構成する基礎技術を説明した後、著名なフレームワークな状況とエンジニアの技術理解の現状を踏まえ、SPAセキュリティの現実的な方法について説明します。

Discord Channel: #track1-8-spa-security

採択
2021/10/03 15:40〜
Track4
Long session (60 mins)
Asynchronous

Asynchronous Programming in PHP

agiroLoki Lochemem Bruno Michael

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.

Discord Channel: #php4-8-php-async
Joind.in: https://joind.in/event/php-conference-japan-2021/asynchronous-programming-in-php

採択
2021/10/03 17:00〜
Track4
Long session (60 mins)
Database

Programming Elasticsearch with PHP

ezimuel ezimuel

In this presentation, we will show how to use Elasticsearch with PHP. We will give a short introduction to Elasticsearch showing how PHP developers can benefit from its usage. We will present how to connect to Elasticsearch, how to index data, how to search and aggregate information. We will also present some advanced features, such as fuzzy search, highlighting and the recent schema on read available from Elasticsearch 7.12.

Discord Channel: #track4-9-elasticsearch-php
Joind.in: https://joind.in/event/php-conference-japan-2021/programming-elasticsearch-with-php