PHP Conference Japan 2020 トーク一覧

採択 他イベント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
採択 他イベントOK Lightning talk (3 mins)

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

820zacky つざき 820zacky

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

PhpStormのブレークポイントには様々なオプションがあります。
「条件」、「ログ出力」、「次のブレークポイントに到達するまで無効にする」など、デバッグを便利にするオプションについて例を挙げながら解説します。

15
採択 他イベント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
採択 Lightning talk (3 mins)

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

glassmonekey ナガノ glassmonekey

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

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

8
採択 他イベントOK Lightning talk (3 mins)

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

takaram71 荒巻拓哉 takaram71

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

5
採択 他イベントOK Lightning talk (3 mins)

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

もも

PHPer なら多くの人が経験するフォームの開発。
バグのないちゃんと動くフォームを目指すのは勿論、折角作るならより多くのユーザーに最後まで使ってもらえるフォームを作りたいですよね。そのフォーム、ちょっとした気遣いでもっと使いやすくなるかもしれません。
ユーザーの入力エラーを減らす、エラーになっても最後まで使いやすいフォームを一緒に目指しましょう。
フォームの開発やデザインを始めたばかりの方に向けて、すぐに取り組めるポイントをお話しします。

1
採択 他イベントOK Lightning talk (3 mins)

静的解析から始める負債コード解消

mushacabbage 藤岡大樹 mushacabbage

長年続くサービスになると負の遺産が溜まっていくもの。
いち関数の役割が多く読めたものじゃない、未使用の関数が放置されているなどといったコードが多く混在してしまいます。
私のチームではこれらの負の遺産による可読性の低下によって、生産性が悪化したり開発そのものを見送るという事態が発生しました。
そこで私のチームではPhpStormのInspection機能に注目し、既存コードの可読性を高める取り組みを行いました。
・未使用の変数や関数を検知する
・関数コメントが書かれていない関数を検知する
・引数なし関数を引数ありで呼び出している箇所を検知する
など
本発表では、リファクタリング活動におけるInspection機能の活用事例を時間の許す限りご紹介します!

8
採択 他イベントOK Lightning talk (3 mins)

Symfony公式の『日本語』入門書ができたよって話

ippey_s 角田 一平 ippey_s

Symfonyから『日本語』の入門書が発売されました。翻訳を手伝ったので本の紹介と、時間的に余裕があればどのように翻訳作業したかをすごく簡単にご紹介します。

3
採択 他イベントOK Lightning talk (3 mins)

PHPConのElePHPantができるまで

nauleyco nauleyco nauleyco

昨年、日本PHPカンファレンス版のElePHPantを作りました。
作りたいと思ってから、みなさんの手に届くまで、どのような流れだったのか、振り返ってみたいと思います。
また、時間があれば、めずらしいElePHPantの紹介や、オーナーランキングの紹介もしたいと思います。

8
採択 Lightning talk (3 mins)

8年運用しているCakePHPのECサイトをLaravelにリプレイスした一年後の話

ukshinpei 近藤 心平 ukshinpei

短いWebの歴史の中で、約10年というスパンで運用され、
この先も継続して開発・運用されていく事業を支えるアプリケーションの事例は多くありません。

本プレゼンテーションでは、2019年にCakePHP + jQueryからLaravel + vueにリプレイスしたECサイトが、
その後の1年で開発や運用、デザイナー / ディレクターの意識の変化など、
社内の人等にどのような変化があったのかをお話しさせていただきたいと思います。

6
採択 他イベントOK Lightning talk (3 mins)

チームメンバーをエンパワーメントしよう!レガシープロジェクト改善事始め

nukisashineko ぬさし nukisashineko

ある日、突然レガシープロジェクトに配属されました。
あなたはカンファレンスで色んな新しい情報を知っていて修正方法もおぼろげにわかるとしましょう。
何でも改善できます。
ただし、運用の中で少しずつ捻出される時間を利用して……ですよ?

・docker
・自動化テスト
・Linterの導入
・ドキュメント化
・DIやDDDの文脈の導入
・新しいツールやSaaSの導入

そういう状況になったときにどこから改善したらいいと思いますか?
もちろん一番大きな力になるのはツールや環境ではなくチームの地力を上げることです。
勉強会だったり、輪読会だったり、技術的な雑談です。
しかし怠惰なプログラマーたちは道具の点検も怠ることはできません。

では最大の効率を上げるため何から始めるべきでしょう?
取れる選択肢が多すぎて逆に選べなくなってしまった。
そんなときの改善ガイドを話すつもりです。

※技術的な話はしませんが具体的なツール名は説明なしにポンポン出ます。
※前提として話の合うチームメンバーが多少手伝ってくれるとします。

※ 初めての登壇になります。

6
採択 他イベントOK 2020/12/11 19:00〜 Track1 Regular session (25 mins)

Laravelの黒魔術

localdisk localdisk localdisk

ここ数年、Laravelの利用者は大幅に増えました。

Laravelにはたくさんの便利な機能がありますが、その機能はどのように動いているか知っていますか?

本セッションではLaravelのコードの中で私がとくに面白い!と思ったものを(なるべく)わかりやすく解説します。

12
採択 2020/12/11 19:35〜 Track1 Regular session (25 mins)

SPAのAPI開発の「やりづらさ」をDDDとオブジェクト指向の発想で解決する

77web 菱田裕美 77web

ここ数年、フロントエンド開発がリッチになるとともに、PHP界でもシングルページアプリケーション向けAPIの開発が多くなっていると思います。
そんな中、一般的な解説書や解説記事に従ってAPI実装を始めると課題にぶつかることになります。
たとえば、

  • ロジックがフロントエンドとバックエンドに重複して実装される
  • APIコールについてn+1問題が起きる
    といった課題です。
    こういったAPI開発の「あるある」な課題について、長期間の運用が想定される自社サービスのSPA用APIを開発するにあたって、社外のメンターにアドバイスをいただいたりフロントエンドエンジニアと議論しながらたどり着いた現時点でのベストプラクティスについてお話します。
18
採択 2020/12/12 9:40〜 Track1 Keynote Speech

PHPの今とこれから2020

rui_hi 廣川類 rui_hi

PHPと今とこれから2020バージョンです。特に、この冬リリースされるPHP8.0の話題を中心にお送りします。

ID: Track1-K
Discord Channel: #track1-k-keynote-2020

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

PHP WEBアプリケーション設計入門――10年先を見据えて作る

nrslib GMOインターネット | 成瀬 允宣 nrslib

本トークでは初級~中級者の PHP プログラマを対象に、中長期的な運用を見据えた WEB アプリケーションを開発するために必要な考え方や知識、具体的な実装テクニックやプラクティスをお話します。

■ Detail
あなたは今この瞬間、WEBアプリケーションの開発をすべて一任されたとしたら、困るでしょうか。

ひとつひとつの機能を作ることができたとしても、WEBアプリケーション全体を形作るとなれば、考えなくてならないことが多く出現します。

――フレームワークはどうしようか。
――ディレクトリ構造はどうしようか。

そこで本トークでは、こういった考慮事項に対する指針をお伝えすべく、WEBアプリケーションを構築する際に考慮すべきことや、実装へ落とし込む方法をお話します。

お話する内容は主に次のとおりです。

・フレームワーク選定
・レイヤードアーキテクチャ
・ディレクトリ構造と依存関係
・インフラストラクチャ層の取扱い
・データモデルとドメインオブジェクト
・テスタビリティの確保
・アプリケーション層上でのセッション情報などの取扱い
・バリデーションは誰の役目?
・エラー設計
・横断的関心毎
※サンプルはLaravelを使ったSPAを予定しています。

ここでお話することは唯一解ではありません。
アプリケーションを設計する際の道しるべとして是非お役立てください。

Track ID: Track1-1
Discord Channel: #track1-1-gmo-internet

2
採択 2020/12/12 10:40〜 Track2 Regular session (25 mins)

NewRelicプラットフォームを使ったオブザーバビリティ入門

BASE株式会社 | 川口将貴

アプリケーションのモニタリングしていますか?
デプロイした後のパフォーマンスチェックしてますか?
障害が起きてから監視ツールを眺めていませんか?

BASEでは最近、PHPで書かれているプリケーションの監視のためにNewRelicを本格的に導入しました。
NewRelicはAPMの印象が非常に強いですが他にも数多くのソリューションが存在します。
それらを使って自分達のオブザーバビリティプラットフォームを作りプロアクティブにアプリケーションをモニタリングしていくことができます。
APMに始まりNewRelic logsによるlog収集、Browserによるフロントエンドパフォーマンス監視、InfrastructureによるAWS監視、Syntheticsによる一歩進んだ外形監視。
そしてそれらの監視をNRQLというクエリ言語と組み合わせてダッシュボードにまとめて統合監視プラットフォームの構築を実現していきましょう。

Track ID: Track2-1-A
Discord Channel: #track2-1-a-base

採択 他イベントOK 2020/12/12 10:40〜 Track3 Long session (60 mins)

初心者セッション

kashioka 柏岡秀男 kashioka

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

Track ID: Track3-1
Discord channel: #track3-1-beginner

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

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

kubotak_public 久保田賢二朗 kubotak_public

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

Track ID: Track4-1-A
Discord Channel: #track4-1-a-laravel-to-nuxt

9
採択 2020/12/12 10:40〜 Track6 (International) Keynote Speech

PHP 8.0: A new version, a new era

carusogabriel Gabriel Caruso carusogabriel

PHP 8 is coming, and you might be wondering: what are the new features? Have they fixed that weird bug? Is my application getting any faster? Can I support both PHP 7 and 8 versions in my library or framework? In this talk, we are going to spend some time looking at everything that has changed in PHP 8, both internally and externally, either new features and changes of behavior (Break Compatibility, you know them). As one of the Release Managers, Gabriel Caruso is going to tell you all about it, giving you the resources to get the latest major version of PHP, that is scheduled for November 2020, up and running!

Track ID: Track6-1
Discord Channel: #track6-1-php8-a-new-version

2
採択 2020/12/12 11:15〜 Track2 Regular session (25 mins)

レガシープロジェクトで、メタプログラミングを使ったPHPStan静的解析レベル上げ

弁護士ドットコム株式会社 | 小宮山 太樹

【概要】
弁護士ドットコムでも、半年くらい前にPHPStan静的解析をはじめました。

徐々に対象ファイルを増やし、現在では2000超のファイルをスキャンしています。
level0(不明なclass、関数の参照などの基本的なチェック)から段階的に厳しくして、level2(未知の全ての関数のチェック、PHPDocの検証)に上がります。

レガシープロジェクトにありがちな名前空間がない、PHPDocがないといった問題を、nikic/PHP-Parser(https://github.com/nikic/PHP-Parser)を武器に乗り越えてきました。
PHPDocで補いきれない部分は、自作のYii1フレームワーク用のPHPStan拡張で解析しています。
レガシープロジェクトで、静的解析を進めてきた方法を話します。

Track ID: Track2-1-B
Discord Channel: #track2-1-b-bengo4