PHP Conference Japan 2021 トーク一覧

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

エヴァンゲリオンとPHP

sapi_kawahara さっぴー川原 sapi_kawahara

エヴァンゲリオンとPHPに意外なつながりがあった!
そんな話をします。

https://speakerdeck.com/sapi_kawahara/php-with-high-synchronization-rate-with-evangelion
これのリニューアル版です。

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

phpstan-strict-rulesを肴に「PHP8時代のコード」を考えてみる

o0h_ きんじょうひでき o0h_

phpstan/phpstan-strict-rules というパッケージがあります。
これは、PHPStanに「より厳しい」規約を追加しちゃうよ!!!というものです。

コーディング規約の理想は「良いコード(とチーム開発)」の実現であり、その中には「断言的であること」「記述がコンパクトであること」などなどが含まれていると思います。
これは「不吉な臭い」を避けるtips集としての効果もあります。

開発者が不吉な臭いを発するのを避けたい・・・そうした方向性の進化は、PHP自体も歩んでいるところです!

「良いコード」を標榜するチームのためのphpstan-strict-rulesと、「PHP7の後半や8で出来るようになったこと」を一緒に眺めてみましょう。
今っぽいPHPでの「当たり前」を見出したり、「PHPって便利になったね!」という喜びを分かち合いましょう。

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

今更フレームワーク (Laravel) の使い方がわかった

chatii0079 ちゃちい chatii0079

PHP歴だけは長いぼくが Laravel よくわからないので避けようとしたものの
結局 Laravel を使うことにしました
その結果 Laravel の乗り方がようやくわかりました

アーキテクチャ(設計) というほど高尚なものではありませんが
フレームワークの利便性とアプリケーションコードの適切な分離を思いついたので話したいと思います

平たくいえば
「ぼくのかんがえたさいこうのLaravelのつかいかた」
です

1
他イベントOK Architecture Test / Quality Refactoring Regular session (25 mins)

変更容易性を考慮したコードの実装

shin1x1 新原雅司 shin1x1

多くの Web アプリケーションでは一度開発したらそのまま運用を続けていくことはなく、変更や追加開発を続けていくことになります。
変更は避けられないものでありますが、無秩序に変更を続けていくと複雑度が増し、変更するのがより困難になっています。
変更したら思いも寄らない箇所に影響があって冷や汗をかいた経験がある方も多いでしょう。

本セッションではこの変更容易性に着目して、設計や実装において変更容易性を高めるための手法を考えていきます。

5
採択 他イベントOK Test / Quality 2021/10/03 11:20〜 Track2 Regular session (25 mins)

PHP 静的解析 活用術 2021

yosatak たけうちよしたか yosatak

PHPコーダーの皆さん!型、付けてますか?

PHPStanやPhan、psalmを利用することで、PHPでも実際に実行する前に型エラーを検出することができる事は既にご存知でしょう!(知らなくてもこのセッションを聞けばOKです)

静的解析のライブラリを活用することで、

  • int|nullを返却する関数のnullハンドリングを忘れていたり
  • '1' === 1といった数字文字列の取りあつかいの間違えを見つけたり
  • 存在しない可能性のある配列の中身へのアクセスを事前に検知したり
    することができます

特に、PHP8からは、存在しない配列の中身へのアクセスがWarningからErrorへ変更されており、環境によってはPHP7からのアップデートでアプリケーションが動かなくなる原因の一つである一方、Union型のサポートなど、言語としての型サポートも整っていく傾向があり、アップデート作業の一環としても強力なツールとなります。

既存のPHPプロジェクトに静的解析ツールを導入する際に問題になるのが、

  • エラーが多く出すぎる
  • アプリケーション内で、文字列でクラス名を扱かっているのでクラスが静的解析で追えない
  • 値域を厳密に制限する関数や返却する型が動的に変わる関数では、PHPdocのtypehintを利用した静的解析では、動的な型付けに対応できない
    場面が多くあります。

このセッションでは、PHPStanを用いた型解析について説明した後に、

  • コミット差分によるエラー検出をし、変更箇所に起因するエラー箇所をciで警告するようにした方法(github actions/gitlab-cilですぐに使えます!)
  • PHPStanのオリジナル拡張を作って、PHPStanデフォルトの機能で手が届かなかった点を改善する方法(実際にセッション中に拡張を作ります!)
    について話します

Discord Channel: #track2-5-a-php-static-analysis-2021

6
他イベントOK Service Development Team Refactoring Regular session (25 mins)

堕落するソフトウェアに立ち向かわないと

o0h_ きんじょうひでき o0h_

初めて作られた時にはピカピカと輝いていたソフトウェアも、時が経つにつれて「劣化」していきます。
うまく使われれば機能は増えていきます。コード量も育っていきます。そこが問題です。
増殖していくコードたちを、誰が・いつ”良く”するのか。

実行するには、組織内にマインドとスキルの両方が必要です。
それらを育むには、どこから取り組んでいけば良いでしょうか?
本セッションは、「なぜソフトウェアが『劣化』するのか」「それを解消するためにどんな事を狙っていくか」と、そこから演繹して「自分自身の取り組んでみたこと」を紹介します。

まだまだ取り組みの最中なので、必ずしも「成果」をベースに語れるものではありませんが、何かしらのヒントになれば幸いです。
また、オーディエンスの皆さんからのフィードバックをもらったり、そこから更に踏み込んだ議論が生まれていくことを期待しています。

紹介するお話

例えば、以下のような取り組みが「自分なりに考えたこと」でした。

  • 「技術力」を定義する
  • プロダクトと技術力の関係
  • 自分自身が「技術的な成長」を感じた瞬間を構造化して捉える
  • その「良いフィードバックの獲得の仕方」を組織的に再現できないか?

こうした話を「議論のネタ」として提供したいと考えています。

この課題を選んだ背景

プロダクト開発や(Web)サービスの提供を行う会社において、
Webエンジニアに求められる主要な成果は「プロダクトを良くする」ことだと思います。
プロダクトをよく出来るエンジニアとは、どういう存在でしょうか?
実は、「プロダクトをよく出来るエンジニア」になるには「プロダクトを開発する以上の技量」が要求されるのではないでしょうか。

ここには大きな矛盾があると考えています。
「プロダクトを良くし続けるには、プロダクトに必要なレベルの技量では足りない」という矛盾です。
これについて、自分自身が、所属先の企業でのロールが変化したのをきっかけに取り組むようになりました。
組織の姿が「プロダクトを作れる」を超えた「プロダクトの未来を作れる」ようになるにはどうすればよいか・・?と現在進行系で考えています。

2
採択 他イベントOK Architecture 2021/10/02 17:00〜 Track 1 Long session (60 mins)

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

shin1x1 新原雅司 shin1x1

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

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

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

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

Discord Channel: #track1-3-domain-modeling

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

自分のことを8.1だと思い込んでるPHP

tadsan うさみけんた tadsan

「早くPHP 8.1を使いたい… でもうちはまだ7.3なんだお…」

PHPの新バージョン8.1の機能は既に確定していますが、PHPは毎年11月末にリリースされるので、あと2ヶ月待たなければいけません。
また、そもそもリリース済みの7.4や8.0の機能を使いたいけれど、自分の一存では上げられない… そんなこともあります。
このLTではそんなときに便利なsymfony/polyfillと、その限界についてお伝えいたします。

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

safeで型安全PHPerになろう

tadsan うさみけんた tadsan

型付けしてますか? PHPで型安全なコードを追求しはじめると、やや取り回しの悪いPHPの標準関数の型に煩わされます。
そのような型には歴史的事情があるのですが、このLTでは標準関数の型の問題を解決するthecodingmachine/safeパッケージについて紹介します。

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

Spiralでマイグレーションレスな開発を!~モデルとテーブルを同期するとは~

niisantokyo 新倉涼太 niisantokyo

先進技術を貪欲に取り入れ続ける皆様にとって、PHPとGoを組み合わせた全く新しい (ver1リリースが2017年) FrameworkであるSpiral Frameworkの存在は周知のことかと思います。今回はこのSpiralとそれが採用しているCycleORM利用することで、エンティティの定義からデータベースのテーブル定義を同期させる機能をご紹介いたします。
Laravelなどのような積み上げ式のデータベースマイグレーションを採用している場合、時とともにマイグレーションファイルが増えていき、現在のデータ定義がわかりにくくなっていきます。一方、CycleORMを採用するSpiralでは、エンティティのプロパティ定義を利用して、データベースのテーブル定義との差分を検出し、定義内容を同期する機能が用意されています。この機能を活用することで、積み上げ式のマイグレーションファイルは不要となり、テーブル定義もエンティティのプロパティを見ればわかるようになります。
今時だとLaravelやCakePHPが割と覇権みたいに言われていますが、だからこそ、あえて、このSpiral Frameworkを通して、新しい開発体験をしてみてはいかがでしょうか。

1
採択 他イベントOK Test / Quality 2021/10/03 10:00〜 Track2 Long session (60 mins)

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

tadsan うさみけんた tadsan

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

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

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

Discord Channel: #track2-4-php-type

5
他イベントOK Infra / Middleware / Cloud Lightning talk (4 mins)

PHPerでも出来るサーバーレス!AWS Lambdaを利用してサーバーレスPHPを動かす

seike460 清家史郎 seike460

AWS Lambda の新機能としてコンテナイメージのサポートが開始されました!

PHPerがサーバーレスラーになれる!嬉しくてたまりませんね!

じゃあどうすれば良いのか、具体的なデプロイ手順をライトニングなトークでお話します!

デプロイさえ出来ればあとはあなた次第、
めくるめくサーバーレスライフを堪能しましょう!

■想定する聴講者
 - サーバーレスアーキテクチャに興味がある方
 - とにかくPHPをサーバーレスで動かしたい方

■お話しないこと
 - Productionで利用できるようなためになるお話
 - 細かい理論

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

こまけぇこたぁいいんだよ!! PHPWebアプリケーションを早くする、それだけだ

seike460 清家史郎 seike460

速いは正義、アプリケーションは速くあるべきです。

ではどうすれば良いのか

細かい理論などは気にしない、こうしたら早くなった

結果を貼り付けながら、何をしたのかひたすら話しますが、細かいことは話しません

OS、Webサーバー、PHP、RDBMS等の見直すべき要素に関して、情報を詰め込むだけ詰め込むことに挑戦します。

※注釈は付けますので細かな理論はそちらでご確認ください

■想定する聴講者
 - PHPWebアプリケーションのパフォーマンスに興味がある方
 - PHPのインフラを整備するエンジニア
 - PHPでISUCONに挑戦する方

■お話しないこと
 - パフォーマンス以外の話
 - アプリケーションコードによる改善
 - 劇的なパフォーマンス改善策

2
採択 他イベントOK Performance 2021/10/02 17:00〜 Track2 Regular session (25 mins)

PHPWebアプリケーションパフォーマンスチューニングの勘所〜なぜアプリケーションは速くなるのか〜

seike460 清家史郎 seike460

速いは正義、アプリケーションは速くあるべきです。

なんとなくやってるパフォーマンスチューニング、
チューニングを行うとPHPWebアプリケーションはなぜ速くなるのでしょうか。

意識的に作った遅いアプリケーションを使い
OS、Webサーバー、PHP、RDBMSが遅い原因を知ることで、
遅くなった原因を一つ一つ分解して解説します。

パフォーマンスチューニングを行うに当たり必要な基礎理論を見直し、
なぜ遅いのかを知り、どうすれば速くなるのかを知ることで、
具体的なチューニングをなんとなくではなく、意志を持って選択出来るようにしましょう。

■想定する聴講者
 - PHPWebアプリケーションのパフォーマンスに興味がある方
 - PHPのインフラを整備するエンジニア
 - なんとなくオススメのチューニング設定を貼り付けてる方

■お話しないこと
 - パフォーマンス以外の話
 - アプリケーションコードによる改善
 - 劇的なパフォーマンス改善策

Discord Channel: track2-3-a-php-performance

10
他イベントOK Infra / Middleware / Cloud Regular session (25 mins)

AWSで作るフルサーバーレスアプリケーション

seike460 清家史郎 seike460

話者はPHPerですが、なんとなく全部出来るからという理由で
渡されるインフラの整備に疲れている時期がありました。

そんな中メンテナンスフリーと言われてきたサーバーレスという技術に興味を持ち
今では全てがAWSのマネージドサービスにて構成されているアプリケーションを作成する術を身に着けました。

それは話者の悩みを全て解決するものではありませんでしたが、
本来解決したかった以上の課題を解決し、初期認識よりも出来る事の幅の広さも感じました。

PHPerがフルサーバーレスアプリケーションを構築出来るまでに至った軌跡をなぞり、
メンテナンス、コスト、疎結合化などのメリットやデメリットについてお話します。

■想定する聴講者
 - サーバーレスアーキテクチャに興味がある方
 - サーバーレスアプリケーションの開発フローに興味がある方
 - サーバーコストを最小化したい方

■お話しないこと
 - PHPを中心としたアーキテクチャ
 - 完全なメンテナンスフリーインフラを手に入れる事

3
他イベントOK Infra / Middleware / Cloud Regular session (25 mins)

PHPer向けDokcer開発環境構築

seike460 清家史郎 seike460

コンテナは便利、開発環境の構築から本番の運用まで様々なメリットがあります。

そんな中Dokcerを使った開発を行っている中で発生する、
パフォーマンス問題などのデメリットが存在するのも事実です。

今回はパフォーマンス、テスト実行まで意識した
Dokcerの開発環境整備について解説したいと思います。

不便な点もあるけど便利だから我慢しているという方に
少しでも快適なDokcerライフを送って頂ける一助になれば幸いです。

■想定する聴講者
 - Dokcerを使って開発しているPHPer
 - CircleCI等を使ってCI/CDを回している方

■お話しないこと
 - ProductionへDeployするためのテクニック
 - Windows、Macにおける細かな違い

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

PHPerがISUCON11にチャレンジした時のあれこれ

takoba_ takoba takoba_

2021年8月に開催された「ISUCON11予選」に参加してきました。
GopherやRubyistが巣食う予選で、PHPerはどれだけ成績を残せたのでしょうか...!

本トークでは、予選に参加する過程で生まれたエピソードや成果をご紹介します。

例えば、以下のような話題を扱う予定です。

  • 予習って何をやった?
  • 過去問って docker-compose でPHP参考実装が動かないじゃん!ぷんぷん!!!
  • 過去問ってどんなフレームワークで書かれてるのか調べてみました!
採択 他イベントOK Hardware 2021/10/03 11:55〜 Track3 Regular session (25 mins)

PHPから見たハードウェア制御

tomzoh 長谷川智希 tomzoh

私はこの数ヶ月、趣味プロジェクトとして、1990年代にアーケードゲームやハイエンドパソコンで輝きを放ったYAMAHAのFM音源チップ、YM2151を制御するためのハードウェアとソフトウェアの開発をしています。

こう言うと難しく聞こえるかもしれませんが、実はハードウェアの世界にも私たちソフトウェアエンジニアが「API」や「プロトコル」と呼びそうな決まりがあり、その決まりに従って音源チップに命令を与えることで音を鳴らすことができるのです。

このトークでは私が開発しているYM2151制御ハードウェア・ソフトウェアを題材に、コンピュータシステムの周辺ハードウェアがどの様に制御されるか、そしてその制御をソフトウェア的にどの様にするかを解説します。もちろん制御ソフトウェアはPHPで書いていますのでPHPerのみなさんであればスッと読めると思います。

このトークを通じてコンピュータシステムの動作について興味を持っていただく方が増えることを期待しています!

Discord Chanenel: #track3-5-b-php-hardware

5
採択 他イベントOK Database Performance 2021/10/03 10:00〜 Track 1 Long session (60 mins)

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

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

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

Discord Channel: #track1-4-mysql-index

10
採択 他イベントOK Database Performance 2021/10/02 15:40〜 Track2 Long session (60 mins)

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

mamy1326 まみー mamy1326

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

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

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

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

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

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

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

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

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

スロークエリの見える化

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

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

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

SQL の分析

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

  • EXPLAIN
  • JOIN
  • インデックス

SQL の追求

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

改善対応の流れ

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

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

スロークエリ予防

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

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

Discord Channel: #track2-2-mysql-tune

9