PHP Conference Japan 2020 トーク一覧

採択 2020/12/12 15:20〜 Track1 Long session (60 mins)

パネルセッション「ひさてるさんに聞け」

たなかひさてる, イアン・ブライソン, 小山哲志

少しプログラミングができるようになると、どのようにソフトウェアを設計していけばいいのか興味が湧いてくるものです。しかしソフトウェア設計の世界はなかなかに奥深く、どこから入っていけばよいのか戸惑っている方も多いのではないでしょうか。
そこでこのセッションでは、Software Design 誌での入門者向け漫画「ちょうぜつエンジニアめもりーちゃん」の連載が無事に終了し、Twitter でも同作のショート連載を続けながら、ソフトウェア設計についてのメッセージを発信しているたなかひさてるさんをお迎えします。ソフトウェア設計についての質問に答えていただき、迷っているソフトウェアエンジニアの方々の道標を見つけたいと考えています。
出演: たなかひさてる、イアン・ブライソン
司会: 小山哲志

ご質問はこちらまで!
https://forms.gle/M2XmWFCh1fNxx1FN9

Track ID: Track1-4
Discord Channel: #track1-4-panel-session

採択 他イベントOK 2020/12/12 15:20〜 Track2 Regular session (25 mins)

Composer 2.0って何?どう変わるの?読んでみました!

o0h_ きんじょうひでき o0h_

昨年のPHP Conference Japanにて、「Composerがどんな課題を取り扱い、それをコード上でどう表現しているのか」という発表をさせていただきました。
そして今、2016年04月のリリース以来、Composerは初めてのメジャーVersion Upに向けて準備が進んでいます。
(そう、”Re:born”ですね!)

昨今のPHPの進化を語る上で欠かせない存在となったComposerは、数年間の時を経てどんな進化をする(した)のでしょうか?
「どんな機能が増えて」「どんな改修が行われて」「それはどんなコードで実現しているのか」、興味がありませんか。

本セッションでは、主要な機能の紹介を、内部実装の”見どころ”を交えながら行います。

想定する聴講者

  • [ ] Composerは利用しているが内部処理まで追っていないという方
  • [ ] Comopser v2の実戦投入を目論んでいる方
  • [ ] ドキュメントをggったりエラーコードをじっくり読み解くのが面倒くさいからソース読みたいな、という方

Track ID: Track2-4-A
Discord Channel: #track2-4-a-composer2

採択 他イベントOK 2020/12/12 15:20〜 Track3 Regular session (25 mins)

DNS改ざん検知ツールの実装とDNSパケットの世界

cakephper 市川@cakephper cakephper

30年以上前に作られたDNSの仕組みが今もなお同じように動作し、私たちのインターネットを支えている。2020年、令和の時代に熱いDNSの話をして、インターネットの基礎を支える技術に興味を持ってもらいたい。

DNSレジストラの脆弱性によりドメインハイジャック事件が起こりました。この事象を防ぐのは難しく、いかに早く改ざんを検知するかにかかっています。
そこでDNSのネームサーバ情報を定期的にチェックして改ざんを検知し、通知するツールを作成してOSSで公開しました。
https://github.com/ichikaway/nschecker

本セッションでは、DNS改ざんによるドメインハイジャック、DNSの基本的な仕組み、検知方法、キャッシュとの戦いを紹介し、DNSプロトコルの実装を解説します。
基本的にDNSパケットはUDP 512バイトでやりとりされ、その制約から1bit単位で意味を持つようになっています。この意味を解説しながら、先人たちが1ビットまで大切にしてきた想い、考え抜かれた仕組みを紹介します。

普段の開発では知らなくても動いているDNSですが、DNSキャッシュや権威サーバのツリー構成など知っておくとトラブルシューティングやサイト移転時に役立ったりします。

Track ID: Track3-4-A
Discord Channel: #track3-4-a-dns-packet

採択 他イベントOK 2020/12/12 15:20〜 Track4 Regular session (25 mins)

本番でしか起きない問題に早く気が付けるように、僕は Laravel Dusk で CI する

sogaoh sogaoh sogaoh

昨年、最低限の機能でリリースとなった新サービス。
今も開発が続いているのですが、機能追加をリリースするたびに何かしらトラブルが発生してしまい、切り戻して終わる、ということが頻発していました。
この状況をなんとかしようと思い、足りてない施策をいくつか始めていきました。
Unit Test の自動化、PSR-4 チェック、そして、Laravel Dusk での Browser Test。
このセッションでは、開発から本番へ進む際にめぐりあった数々のトラブルをどう乗り越えて来たのか、と、
量産体制に入ることができている Laravel Dusk の Test 整備方法の一例を、デモを交えてご紹介できればと思います。

Track ID: Track4-4-A
Discord Channel: #track4-4-a-laravel-dusk

採択 他イベントOK 2020/12/12 15:20〜 Track5 (PHP8 Special) Regular session (25 mins)

PHP 8 の新機能を PHP内部コードのテスト phpt から読む

hgsgtk 東口和暉 hgsgtk

PHP 8 の新機能のふるまいを、php内部のテストコードを通じて、理解する時間を提供します。

PHP 8 がもうじきリリースされる昨今で、 PHP 8 についての新機能についての関心も高まってきました。さまざまな新機能の抑え方がありますが、ひとつが、テストコードを通じて対象システムを理解する方法です。

phptというものがあります。これは、 PHP 内部コード、つまり php-src の自動テストスクリプトです。
ここには、PHP という言語自体の comitter たちがどういう振る舞いを PHP に与えたのか、それがレアケースのユースケースも含めて記述されています。

テストコードを書く皆様であれば、 Test as Document 、仕様を伝えるドキュメントとしてのテスト、を自身が運用するアプリケーションに対して書きますよね。phpt は PHP 8 の新機能に対するテストコードも含んでいます。

コードの読み手が、テストコードを通じて、 PHP 自体の振る舞いを理解する。phpt に記述されたコードを通して、次の2つを学びましょう。

  1. phpt とは何か、その読み方がわかる
  2. PHP 8 の新機能を抑える

具体的には、PHP 8 の新機能を題材にします。想定しているお品書きは以下です。

  • Named Arguments
  • Match expression v2
  • Nullsafe operator
  • Union Types v2
  • Mixed type v2

※ もし、時間が許せば、上記の機能を実現するために、PHP内部の zend_compiler などにどういう変更があったか、まで軽く紹介します

Track ID: Track5-4-A
Discord Channel: #track5-4-a-phpt

採択 他イベントOK 2020/12/12 15:55〜 Track2 Regular session (25 mins)

今こそ理解する、PHPの日時計算

rukiadia Sho Yamada rukiadia

「特定日時を過ぎたら実行される分岐処理を書こう」

このようなロジックを実装した経験が皆さんにもあると思います。

PHPに限らず、時間が絡む処理を書く場面は多いです。しかし、「安全」な実装を「早く」作れる人は意外と少ないのではないでしょうか?
「PHP 日付比較」で毎回検索するのは手間ですし、アンチパターンを踏み抜いてしまうリスクすらあります。
2020年の歳の瀬に日付の扱いに習熟し、PHPをより上手く安全に使いこなしていきましょう。

※PHPの標準実装やライブラリの話がメインにはなりますが、フレームワークを取り巻く状況についても触れる予定です。

Track ID: Track2-4-B
Discord Channel: #track2-4-b-phpdatetime

採択 他イベントOK 2020/12/12 15:55〜 Track3 Regular session (25 mins)

CakePHPで学ぶDIコンテナ

itosho itosho itosho

皆さんは普段DIコンテナを使っていますか?DIコンテナはそのメリットとデメリットを理解し、正しく使いこなせばソフトウェア開発の効率を高めてくれる非常に強力な仕組みです。
しかし、よく分からず使っていると却って、それっぽいだけでメリットを享受出来ていないソフトウェアが出来てしまう可能性もあります。
本セッションでは、CakePHPに新たに搭載されるDIコンテナの仕組みをもとに、そもそもDIとは何なのか?その上でDIコンテナとは何なのか?を紹介し、DIコンテナの導入によってもたらされる効能についてお話させていただきます。
また、これまで何故CakePHPがDIコンテナの仕組みを用意していなかったのか、何故このタイミングでDIコンテナが導入されることになったのかについても読み解いていきたいと考えています。

Track ID: Track3-4-B
Discord Channel: #track3-4-b-cackephp-di

採択 他イベントOK 2020/12/12 15:55〜 Track4 Regular session (25 mins)

Laravel + Lighthouseで始める低コストなGraphQL入門

DddEndow あきの/akkino DddEndow

GraphQLをご存知でしょうか。名前は聞いたことあったり、実際に使用した経験のある方も多いかもしれません。
GraphQLは2015年にFacebookにより開発されたRESTとは異なる新しいAPIフォーマットです。
クエリ言語を用いてデータを操作することで、取得過剰や取得不足と言ったRESTの問題を解決し、本当に必要なリクエストを得られるようになると注目を浴びていました。

しかしながら2020年現在、PHPが得意とする領域においてはまだまだRESTが使用されているアプリケーションの方が多いかと思います。
今回は実際にLaravel + Lighthouseを用いてGraphQLによるWebアプリケーションを開発した際に得られた知見をもとに、なるべく実装コストや学習コストを下げた開発方法や実装する際の注意点、アンチパターンなどをお話しさせていただきます。

PHPでのGraphQL APIの開発はここまでやりやすくなったよ!というのを皆様にお伝えできればと思います。

Track ID: Track4-4-B
Discord Channel: #track4-4-b-laravel-lighthouse

採択 他イベントOK 2020/12/12 15:55〜 Track5 (PHP8 Special) Regular session (25 mins)

PHP8時代のWebアプリケーションフレームワークの話をしよう

n_1215 中榮健二 n_1215

カンファレンス開催の頃には満を持してリリースされているPHP8。より厳密な処理が書きやすくなり、実行速度は速くなり、メタプログラミングに使いやすい機能も増えました。

本トークでは、Webアプリケーション開発を取り巻く環境の変化やPHP8の新機能を考察しながら、PHP8時代にも次々と出てくるであろう新しいWebアプリケーションフレームワーク(以下単にFW)の動向や既存のFWの変化について独断と偏見により予想します。

また、FWの内部の仕組みに触れることで、独自FWの作成に興味を持つ方が増えれば幸いです。

●お話したいこと

  • FWの共通部分の仕組み
  • PHP8の新機能の軽い紹介とFWへの活用
  • FWの"個性"
  • デプロイターゲットの多様化
  • オレオレFWのすゝめ

●お話しないこと

  • 次に流行るFWの具体名の予想

Track ID: Track5-4-B
Discord Channel: #track5-4-b-php8-framework

採択 2020/12/12 16:40〜 Track1 Long session (60 mins)

ウェブセキュリティのありがちな誤解を解説する

ockeghem 徳丸浩 ockeghem

XSSやSQLインジェクション等、ウェブアプリケーションの基本的な脆弱性の知識はかなり普及しましたが、それでも広く誤解されている内容はまだ多く残っています。
本セッションでは、ウェブセキュリティのありがちな誤解を取り上げ、なぜ間違っているのか、正しい内容は何かを基礎からわかりやすく解説します。

Track ID: Track1-5
Discord Channel: #track1-5-web-security

採択 他イベントOK 2020/12/12 16:40〜 Track2 Regular session (25 mins)

効果的な静的解析のCI導入パターンを求めて

oogFranz 杉山 祐一 oogFranz

既存の大規模システム、とくに自動テストがないレガシーシステムにおいては、静的解析のCI導入は改善の足掛かりとして非常に有用です。
しかしながら、既存システムへの静的解析のCI導入は一筋縄ではいきません。
厳しすぎるルールで導入しても、大量のエラーやワーニングでチームが疲弊してしまいますし、
逆にルールがゆるい状態で導入しても、静的解析の良いメリットが得られません。

本セッションでは、静的解析ツールの特徴に合わせて、効率的なCIの導入パターンを紹介します。
具体的には、最低限のルールから自動的にルールを厳しくする方法や、
既存コードにはゆるいルールを適用しつつ、新規ファイル・新規コードには厳しいルールを適用する方法を紹介します。

Track ID: Track2-5-A
Discord Channel: #track2-5-a-static-analysis-ci

採択 他イベントOK 2020/12/12 16:40〜 Track3 Regular session (25 mins)

PhpStormを使えばほとんどコード補完されるんだってばさ

makies マキ makies

PhpStorm を使って Laravel案件の開発をするとき、どのくらいコードを書いてますか?

便利なプラグインを入れ、案件に合った設定を行い、自動生成されるものも活用すると
こんなにも、コード補完でコードが書けちゃうんです。

っていう実演をしようと思います。

Track ID: Track3-5-A
Discord Channel: #track3-5-a-php-storm

採択 他イベントOK 2020/12/12 16:40〜 Track5 (PHP8 Special) Long session (60 mins)

PHP 8 で Web 以外の世界の扉を叩く

sji_ch sji sji_ch

「○○言語は汎用プログラミング言語だけど、PHP は Web 特化で Web 以外には不向き」

もう長いこと、PHP はこのような評価を与えられ続けてきました。
そしてそれは今や過去の話になろうとしています。

PHP は "PHP: Hypertext Preprocessor" の略[1]ですが、この 25 年間で Web は高度化し、複雑化し、それに伴い Web サイトを作るための言語にも、いっそう複雑な機能が要求されるようになってきました。

昨年リリースされた PHP 7.4 には Preloading や FFI など、多くの機能が導入されています。

そして今年の PHP 8 では、満を持して JIT コンパイラ が導入されます。
典型的な PHP アプリケーションは I/O バウンド(DB バウンド)です。JIT はそのような既存のアプリケーションのためというより、これまで PHP が使われてこなかった、また使えると思われてもこなかったような、新たな領域への扉を開くものとして、FFI や Preloading との組み合わせを念頭に提案されたものです[2][3]。

一方、世間の CPU は着実に多コアの時代へと進んできました。今の時代にある程度 CPU を使うアプリケーションを作るというのは、JIT を使うというだけの話では済まず、何らかの並列処理機構を用いてこの多コアの CPU とも向き合う必要があります。

このトークではそんな新時代における PHP を使って、

  • FFI でシステムコールを呼び出して外部プロセスのメモリをのぞき見したり
  • ローカルマシンで動作する(非 Web の) GUI ライブラリを利用してデータを可視化したり
  • ext-parallel によりプログラムをマルチスレッド動作させたり
  • スレッド間の通信処理に非同期処理を用いたり
  • スレッドの動作を効率化するため preloading を活用したり
  • JIT によりそのようなプログラム全体の動作を高速化したり

するという、これまでとは一味違った PHP の利用方法への挑戦を紹介するとともに、そこで得られた知見、現状の制限についてをお話します。

[1] https://www.php.net/manual/en/intro-whatis.php
[2] https://wiki.php.net/rfc/jit
[3] https://externals.io/message/102415#102415

Track ID: Track5-5
Discord Channel: #track5-5-php8-non-web

採択 他イベントOK 2020/12/12 16:40〜 Track6 (International) Regular session (25 mins)

Service communication re:Born

Thr33One Nick Chiu Thr33One

As we move more and more to microservices communication between services becomes more important.
Using messaging is an effective way and gives us a lot of freedom & benefits, especially when using Apache Kafka.
This helps services to be very resilient and being able to scale without losing the control and overview.

Track ID: Track6-5-A
Discord Channel: #track6-5-a-service-communication

採択 他イベントOK 2020/12/12 17:15〜 Track2 Regular session (25 mins)

微妙な違いも見逃すな!ビジュアルリグレッションテスト!

blue_goheimochi 大橋佑太 blue_goheimochi

PHPを書きながらフロントエンドも書いている!という人も多いのではないでしょうか?わたしも最近そんな感じでバックエンドはLaravel、フロントエンドはNuxt.jsを使って開発をしています。

APIはPHPに任せてフロントをNuxt.jsで実装しているとかなり責務が分かれていい感じだなと思っているのですが、その分Nuxt.js側でのCSSの変更などによるデグレが気になるようになりました。そこで最近取り入れているのがAtomicDesignとビジュアルリグレッションテストです。AtomicDesignの採用によりコンポーネント単位で実装するようになるので、そのコンポーネント単位で見た目のテストができ意図しない変更に気付きやすくなります。

このセッションでは、わたしがStorybook、REG-SUIT、CodeBuild、Github Enterpriseを組み合わせて構築したビジュアルリグレッションテスト環境の技術要素や運用状況についてご紹介します。

Track ID: Track2-5-B
Discord Channel: #track2-5-b-visual-regression-test

採択 2020/12/12 17:15〜 Track3 Regular session (25 mins)

PHPで作るオンラインカンファレンス向け録画システム

tomzoh 長谷川智希 tomzoh

去る9/19〜9/21にiOSDC Japan 2020という技術カンファレスがオンラインで開催され、60本のトークと20本のLTが実施されました。
実施された60本のトークはすべて事前収録され、それを当日に再生する形でカンファレンスを開催しましたが、60本の動画の編集にかかった日数は3日ほどでした。動画編集に詳しい方であればちょっと驚く期間かと思います。

この高速編集を支えたのはPHPでした。

このトークでは私がどの様にPHPでオンラインカンファレンス向け録画システムを構築したのか、そして、同じ様なシステムを作りたい方のためのサービス連携のコツをお話しします。

  • Zoom, YouTube Live, Dropbox を連携させた収録システムの作り方
  • GD, ffmpeg を使用したオンラインカンファレンス用動画編集システムの作り方
  • PHPでサービス連携するためのコツ

このトークを聞いたみなさんが、PHPで高度なシステム連携アプリを作るきっかけになることを期待しています!

参考:
iOSDC Japan 2020
https://iosdc.jp/2020/
iOSDC Japan 2020 トーク動画
https://www.youtube.com/playlist?list=PLod2oSGQp3W4BV6sLUdMwlZD0NHt9mHP7

Track ID: Track3-5-B
Discord Channel: #track3-5-b-online-conference-system

採択 2020/12/12 17:15〜 Track6 (International) Regular session (25 mins)

How good are my tests?

shochdoerfer Stephan Hochdoerfer shochdoerfer

How to measure the quality of unit tests? Code coverage is not necessarily a good indicator to answer this question. What other options do we have? Do we need tests to test the quality of our tests? In some way, yes we do. In this session, I will introduce you to the concept of mutation-based testing and how this technique can be used to improve the quality of your test suite.

Track ID: Track6-5-B
Discord Channel: #track6-5-b-how-good-are-my-test

採択 2020/12/12 18:00〜 Track6 (International) Long session (60 mins)

Functional Programming in PHP

agiroloki Lochemem Michael agiroloki

Functional Programming is a programming paradigm that has, since its inception, gradually pervaded through the realm of programming. After all, in theory, it holds that any entity capable of simulating a Turing Machine is Functional Programming-affable. PHP is not outside the parameters of Functional Programming and is, in fact, eligible for the paradigm despite appearing to be ill-equipped for such a purpose.

Functional Programming, though currently in the zeitgeist, has a parlance whose perceived complexity poses some trouble in understanding its cornerstone principles. My talk, titled Functional Programming in PHP, is another in a long line of trials at effectively distilling Functional Programming knowledge for PHP audiences. I will, in the time afforded to me, attempt to discuss the foundations of the paradigm, its relevance and history, PHP's aptness for FP, technical hallmarks - immutability, composition, referential transparency, and function purity - as well as applicable meta concepts like Functors and Monads for building real-world applications.

Track ID: Track6-6
Discord Channel: #track6-6-functional-programming-php