PHP Conference Japan 2020 トーク一覧

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

Laravelで運用しているサービスをNuxt.jsにリプレイスする

kubotak_public 久保田賢二朗 kubotak_public
Laravelで運用しているサービスをNuxt.jsにリプレイスした(している)状況を共有したいと思います。
Laravelで使われているロジックはそのままに、LaravelをREST APIとして稼働させてNuxt.jsでフロントエンドを構築しています。
サービスを無停止で移行する方法やインフラアーキテクチャ、苦労していることなどを共有して似たようなことを検討している人の助けになればと思います。
8
採択 他イベントOK Long session (60 mins)

ゼロベースから Laravel を用いた API 実装オートメーション

m3m0r7 めもり〜 m3m0r7
弊社のシステムはバックエンドのフレームワークは Laravel を使用、そして OpenAPI と呼ばれる API の設計書を書けば CRUD に対応した API が自動的に実装されるような仕組みを用いて自動生成し、最後にバリデーションを書けば、一つの API が完成します。
もともと弊社の社内システムは SaaS 上にしかなかった、かつバックエンドエンジニアが私一人である中で、どう効率的にゼロベースからプロダクトを組み上げてプロダクトのローンチを早められるかが鍵でした。
CRUD に対応した API 実装、正常系・異常系テストの生成自動化、API のドキュメントの記述、全文検索エンジンへどう自動的に繋ぎこむか、例外処理はどうするか?といった全ての事情を汲み取りながら基盤開発に邁進し、
今では一つあたりの API の実装は 10 分もかからないレベルになりました。本トークでは、この基盤の構築をした経験を元に、考えてきた事、実行してきたこと、判断に迷ったこと、そして Laravel を使った実装についてのお話をできればと思います。
14
採択 他イベントOK Lightning talk (3 mins)

再コンパイル不要! core dump さえ吐ければ gdb デバッグできます

yamotuki 鈴木 智也 yamotuki
Laravel Artisan コマンドの突然の Segmentation fault。他に出力は無かった。

手がかりが無い中、core dump さえ吐ければセグフォ対応は出来るという情報だけを覚えていた。
core dump といえば gdb。gdb といえばバイナリの再コンパイル。茨の道に決まってる。
実際には再コンパイルしなくても 1. gdb コマンド、2. core dumpファイル、3. Segmentation fault を吐いたバイナリ、の三種のパーツが揃えばデバッグ可能であった。

PHPerとしてはややハードルの高いツールたちを使って問題解決にこぎつけた方法を共有します。
12
採択 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.
7
採択 他イベントOK 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キャッシュや権威サーバのツリー構成など知っておくとトラブルシューティングやサイト移転時に役立ったりします。
15
採択 他イベントOK Regular session (25 mins)

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

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

Laravel × オニオンアーキテクチャで始めるテスト駆動開発

canon1ky 村田主磨 canon1ky
皆さんは単体テストを書いていますか?
結合テストを書いていますか?
テスト駆動開発をしていますか?

テスト駆動開発と言っても、どの部品の単位でテストを書けば良いか悩む方も多いのではないでしょうか。
テストを書く上ではソフトウェア設計への配慮が欠かせません。

ソフトウェア設計の大切さ、テスト駆動開発で単体テスト、結合テストを書く利点について理解を深め、その後にオニオンアーキテクチャを採用したソフトウェアでテスト駆動を行う手順を語っていきます。

当セッションでは下記のような話をする予定です。
・なぜテストを書く上でソフトウェア設計が大切なのか
・単体テストを書く利点
・結合テストを書く利点
・オニオンアーキテクチャの解説
・オニオンアーキテクチャでTDDを行う手順
8
採択 他イベントOK Lightning talk (3 mins)

めざせブレークポイントマスター

820zacky つざき 820zacky
ブレークポイントを制するものがデバッグを制する。
PhpStormのブレークポイントを学び、ブレークポイントの真のチカラを解放しましょう。

PhpStormのブレークポイントには様々なオプションがあります。
「条件」、「ログ出力」、「次のブレークポイントに到達するまで無効にする」など、デバッグを便利にするオプションについて例を挙げながら解説します。
13
採択 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.
3
採択 他イベントOK Lightning talk (3 mins)

PHPer のための Vim 実践入門

hamakou108 濱田 晃輔 hamakou108
Vim は他のエディタに代えられない素晴らしい開発体験を提供してくれます。
その一方 PhpStorm や VS Code のような IDE が持つ豊富な開発補助機能が Vanilla Vim には存在しないため、実用面では IDE の後塵を拝する状況となっています。

Vim か IDE のどちらかなんて選べない!
そんな私は Vim をいかに IDE の書き味に仕上げることができるか、その可能性を突き詰めてみました。
Neovim と各種 Vim Plugins 、 Language Server の PHP Intelephense を使ってファイラ、自動補完、スニペット、リンタなどの機能を実現する方法を紹介します。
7
採択 他イベントOK 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.
1
採択 Lightning talk (3 mins)

PHPerのためのCVEデータベースの紹介

glassmonekey ナガノ glassmonekey
何とかペイとか何とか口座やらでセキュリティインシデントが改めて重要視される世の中になってきました。
そのための情報収集、アップデートを管理することはエンジニアにとって義務といっても過言ではないでしょう。

しかし、優先順位の問題で手をつけられてなかったり、工数の問題で本格的に着手できてないといったこともあるのではないでしょうか?
そこで今回は我々PHPerが普段使うcompser.lockからセキュリティインシデントのうちCVEの識別子が付与されたものを見つけてくれるツール及びデータベースを紹介します。
8
採択 他イベントOK Long session (60 mins)

Webサービスをセキュアに保つために必要な視点

ariaki4dev ariaki ariaki4dev
私たちエンジニアによって作られるWebサービスは、日常より多くの危険にさらされています。
これまで幸運にも大きなセキュリティ事故に遭遇せず過ごされている方は、そのリスクを過小評価してはいないでしょうか。
「Webセキュリティは重要」と思いながらも、実際にハッキングなどの被害にあわない限り、自分とは縁遠い話として聞き流してしまいがちです。
このセッションでは、PHPで開発されている月間約1.9億PVの巨大コミュニティサイトを運営するなかでどのような攻撃を受け対処してきたか事例を踏まえながら、サービスをセキュアに保つ必要性を考え直し、どのような対策をとるべきかをいくつかの視点から解説します。

本セッションでお話する内容は次のとおりです。
• Webサービスへの攻撃事例
• OWASP TOP10などのセキュリティ指針の解説
• セキュアに保つためにはどんな視点や行動が必要か

このセッションはWebサービスへの具体的な攻撃手法を解説する可能性があります。
すべての聴講者は「本セッションで得た知識をもとに攻撃を行わない」ことに同意いただく必要があります。
12
採択 他イベントOK Long session (60 mins)

初心者セッション

kashioka 柏岡秀男 kashioka
PHPカンファレンス恒例の本当の初心者向けセッションです。
どのような言語か、どのような特徴があるのか、どのように学習していったらいいか。
本当の一歩目の解説を行います。デザイナーさんや多言語の経験者の方でも理解できる内容です。
これからプログラミングを始めたい人でも理解できる部分が多いセッションです。
仕事での利用経験のある方やPHPの入門書を完了されたレベルの方は他のセッションの聴講をおすすめします。
3
採択 他イベントOK Long session (60 mins)

PHP 8 で作る JSON パーサ

shin1x1 新原雅司 shin1x1
JSON は現在の Web アプリケーション開発では一般的なデータフォーマットです。PHP でも json_encode() や json_decode() といった関数が用意されており、多くの方が日々の開発で利用されているでしょう。

実務上はこうした関数もしくはラップされたクラスを利用すれば良いのですが、仕様がシンプルではありつつも適度な複雑さを持っており、さらにとても馴染み深いという意味でパーサを書く題材に適しています。

また、JSON パーサを書くには下記のような機能を利用することになり、プログラミング言語の基本的な使い方を学ぶにも良いテーマです。

・分岐、ループ、再帰処理
・文字列の扱い
・型、構造化データの扱い

このセッションでは、パーサを書いたことが無い方、パーサを書いてみたい方、また PHP 8 の新機能を使った実装を見てみたい方を対象に PHP 8 で JSON パーサを実装する方法をご紹介します。
16
採択 他イベントOK Lightning talk (3 mins)

レガシーシステムに自動テストを導入する第一歩

takaram71 荒巻拓哉 takaram71
テスト駆動開発やビヘイビア駆動開発に代表されるように、PHPUnitなどのテスティングフレームワークを用いて開発時に自動テストを書くことは、今や当然のように行われています。
しかし一方で、長く開発が続けられてきたレガシーシステムにおいては、まだまだテストコードが書かれていないケースも珍しくないことでしょう。
そうしたシステムに一気にテストコードを書くことはできなくても、一部の機能から自動テストの導入を始めてみませんか?
このトークでは、13年続くレガシーシステムの改修案件で、PHPUnitを導入し既存ロジックをリファクタリングしながらテスト駆動で新機能を開発した事例をお話しします。
5
採択 他イベントOK Regular session (25 mins)

PHP on Kubernetes

k_kinzal Kouta Ozaki k_kinzal
コンテナネイティブ時代に突入した昨今、PHPer の皆さんはコンテナ化は済ませましたか?
Chatwork 株式会社では2020年に PHP アプリケーションをコンテナオーケストレーションツールのデファクトスタンダードである Kubernetes に置き換えました。

そこで、これからコンテナ化を行おうと考えている PHPer の方々向けに

- なぜ、PHP アプリケーションでコンテナを使用するのか
- コンテナ化、Kubernetes 化では何をする必要があり、何に注意する必要があるのか
- 開発環境でも Kubernetes を使うべきか

など、Chatwork の事例を元に解説します。


1. そもそも Kubernetes とは? ~ 導入のメリット
2. コンテナ化の流れ ~ PHP アプリケーションの Docker イメージ化
 - 設定を注入しよう (Env / File)
  - 環境差異を設定で吸収する方法
  - 整合性の検証方法
 - ログ管理を行おう
  - 標準出力 (stdout) の取り扱い
  - TIPS: decorate_workers_output/log_limit の取り扱い
 - 外部サービスと認証管理
3. Kubernetes 化の流れ ~ コンテナのオーケストレーション
 - PHP アプリケーションにおける構成例
 - Pod のライフサイクル (Readiness / Liveness)
 - メトリクスの収集方法
 - ロードバランサーの配置
4. 開発環境としての Kubernetes はどう評価できるか?
 - パフォーマンスと安定性
 - PHPStorm との連携はどうするか?
 - Kubernetes Manifest の複雑性
5. まとめ
13
採択 他イベントOK Lightning talk (3 mins)

エンジニアでもできる簡単親切エラーUI

桃井亮介
PHPer なら多くの人が経験するフォームの開発。
そのフォーム、ちょっとした気遣いでもっと使いやすくなるかもしれません。折角作るならユーザーに使ってもらえるフォームを作りたいですよね。
フォームの開発やデザインを始めたばかりの方に向けて、すぐにできるポイントお話しします。
1
採択 他イベントOK 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
17
採択 他イベントOK 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の開発はここまでやりやすくなったよ!というのを皆様にお伝えできればと思います。
9