採択
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/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/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〜
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 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/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

Long session (60 mins)

PHP スクリプトの挙動を機械語レイヤーまでぶち抜いて観察する

sji_ch sji

普段我々が使っているコンピュータシステムというのは、階層的なシステムです。

物理法則から電気回路が作られ、ハードウェアが作られ、ハードウェアの上で動くファームウェアや OS があって、更にその上で動くアプリケーションがあって、アプリケーションの中でも C 言語で書かれた PHP 処理系、更にその上で動く PHP で書かれたスクリプト、というように、何重もの階層化がされています。
土台になるものから高く階層を積み上げていく、というイメージで、階層の上のほうにある技術を高レイヤー、下のほうにある技術を低レイヤーと呼んだりします。

PHP のスクリプトというのは比較的高レイヤーに属するプログラムなわけですが、PHP コードがコンピュータ上で実際にはどう振る舞っているのか、どういう仕組みでできているのか、というのは、当然より低レイヤーの技術で成り立っています。

今回のセッションでは、そんな PHP より低レイヤーの世界へ FFI を通じて PHP スクリプトからアクセスし、PHP 自身から階層をぶち抜いてスクリプトの動作を下の方から覗き見てみるという、少しひねくれたことをやるツール、php-profiler についてお話します。

雑に言うと、PHP スクリプトによって ELF/DWARF と procfs と ZendEngine の内部構造体をパースしつつ、FFI で外部プロセスのメモリやレジスタ内容を読み取り、gdb などのデバッガと同じようなやり方で、スクリプトの動作を処理系の内部動作レベルから盗み見るお話です。

ある瞬間に PHP プロセスが PHP コードの何行目を実行しているのか、どんな処理系内部のバイトコードを実行しているのか、そしてそのために処理系や拡張モジュールの C 言語コードのどの部分の何行目が実行されているのかを、観察対象の PHP スクリプトへ全く手を入れないままに読み取ります。

2
採択
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

Long session (60 mins)
Operation Infra / Middleware / Cloud

WordPress Site Management w/ EasyEngine

OGProgrammer Joshua Copeland

Are you still using Apache/Nginx and a bunch of virtual hosts to create your own shared hosting server? Stop tinkering with configs on your server because this talk is just for you. In this talk I’ll share how I manage my sites with EasyEngine. EE is a docker setup that uses Nginx, php-fpm, and Redis to spin up sites in a blazing fast and repeatable way. I’ll go over how I use EasyEngine with Google Cloud Compute, Terraform, and Namecheap to create a server, point a domain, and create a site in just a handful of steps. This has allowed me to be able to migrate sites in a super fast way to new operating systems and keeping security patches in tip top shape. I’ll go over how to use LetsEncrypt which is built right into EasyEngine for free SSL certificates and how you can backup/migrate sites quickly. After this talk, you will be ready for lift off with EasyEngine!

Long session (60 mins)
Architecture

フラットなPHPからオブジェクト指向PHPへ

77web 菱田 裕美

PHPを始めたばかりの初心者の方は1つのファイルにすべての処理を書き込むところからスタートすると思います(フラットなPHP)
一方で、プロダクトは一度作って終わりではなく必ず改修が必要になります。フラットなPHPで開発するとぶち当たる改修の難しさを軽減し、より良いプロダクトを作るためにオブジェクト指向という考え方があります。
「オブジェクト指向」という言葉を聞いたことはあっても「なんとなく難しそう…」と二の足を踏んでいる人も多いでしょう。この機会に入門してみませんか?
概念の説明だけでなく、実際にフラットなPHPに書かれている処理をオブジェクト指向を使ってクラスに分けて書くやり方を、実際にコードを書きながら解説します。

※私自身オブジェクト指向について学問的に学んだことがあるわけではありません。日々PHPで開発するのに必要な概念のみ話す予定ですが、学問的には間違った内容が含まれる可能性が少しあります。

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

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

nrslib 成瀬 允宣

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

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

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

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

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

■トーク対象

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

Discord Channel: #track1-2-oop

Long session (60 mins)
Architecture

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

nrslib 成瀬 允宣

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

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

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

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

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

■トーク対象

  • ソフトウェアアーキテクチャがどんなものか知りたい
  • どういう観点でアーキテクチャを採択しているか知りたい
6
採択
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 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 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

Long session (60 mins)
Beginner

初心者セッション

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

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

Long session (60 mins)
PHP8 Laravel

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

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
Long session (60 mins)
Architecture

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

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

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

7
Long session (60 mins)
Service Development

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

ttskch たつきち

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Discord Channel: #track1-5-cleanarchitecture