PHP Conference Japan 2021 トーク一覧

Operation Infra / Middleware / Cloud Lightning talk (4 mins)

PHPerのためのクラウド(AWS)コスト最適化勘所

sogaoh sogaoh sogaoh

クラウドファーストが謳われるようになっている現在、その利用を検討することは避けられないと思います。
このLTでは、自分のこれまでの経験から把握している、クラウド利用料金の抑え方のポイントをお話しします。
また、個々の施策の効果について、大きかった事例を優先的に、差し支えのない範囲でご紹介していきます。

[補足]
自分は現在フリーランスで、複数のLaravelベースなプロジェクトに参画していて、インフラ面を担当しています。
そのため、事業/案件規模に応じたコスト改善対応を経験しました。この背景が話の情報源になります。

1
採択 Operation CI/CD Lightning talk (4 mins)

PHPプロダクトのDeployをラクにするCLIツールたち

sogaoh sogaoh sogaoh

開発したプロダクト、その価値を届けるにはいわゆるDeployを行わなければなりません。
このLTでは、デプロイ先の環境でアプリケーションがDocker上で稼働することを前提として、
デプロイ時に利用できる便利なCLIツールをいくつか紹介します。
現場によって様々な事情やユースケースがそれぞれあると予想されるので、「こういうときに使うのが適切」という観点での事例や見解を交えてお話しします。
プロダクトに関わる皆さんの今後の運用・成長に有益となる情報を提供できれば幸いです。

2021/8/7 時点では、ecspresso・copilot・jsonnet・direnv 等を紹介する候補として想定しています。

2021/10/3 追記: Reveal.js 版スライド -> https://kutt.it/53AoU3 (シークレットウィンドウで開くのを推奨。履歴が増殖するので)

採択 Team 2021/10/02 17:00〜 Track3 Regular session (25 mins)

【IMO】コードレビューって難しいよね

AkitoTsukahara Akito.Tsukahara AkitoTsukahara

みなさんのチームでは日頃からコードレビューはされてますか?
弊社でもリリースするコードに対して2人以上のコードレビューを必須にしたりと活発に取り組んでいます。

コードレビューには以下のような効果が期待できます
 ・ソフトウェア品質の向上とアーキテクチャの統一
 ・スキルの向上とナレッジの共有
いかに効果的にコードレビューを実施するかによって、チームの成熟度やプロダクトの品質に影響すると言っても過言では無いかもしれませんね。

しかし、正直なところ自分はコードレビューに苦手意識がありました。
一度のレビューに時間がかかったり、他のメンバーと比較してコードの改善提案をする回数が少ないのです。。。
そんな私が苦手意識のあるコードレビューをどの様に克服していくのか、体験談を踏まえてお話しできればと思います!(現在進行形)

▼お話しする内容
・コードレビューの概要
・弊社で取り組んでいるコードレビューの仕組み
・良いコードレビューするためのTips
・苦手意識のあるコードレビューをどのように克服していったのか(体験談)

・チームの過去1年分のコードレビューを分析してみる
・ペアプロならぬペアレビューをしてみる
・とにかくレビューしてみる

などなど

Discord Channel: #track3-3-a-code-review

Team Lightning talk (4 mins)

【IMO】コードレビューって難しいよね(LTバージョン)

AkitoTsukahara Akito.Tsukahara AkitoTsukahara

みなさんのチームでは日頃からコードレビューはされてますか?
弊社でもリリースするコードに対して2人以上のコードレビューを必須にしたりと活発に取り組んでいます。

コードレビューには以下のような効果が期待できます
 ・ソフトウェア品質の向上とアーキテクチャの統一
 ・スキルの向上とナレッジの共有
いかに効果的にコードレビューを実施するかによって、チームの成熟度やプロダクトの品質に影響すると言っても過言では無いかもしれませんね。

しかし、正直なところ自分はコードレビューに苦手意識がありました。
一度のレビューに時間がかかったり、他のメンバーと比較してコードの改善提案をする回数が少ないのです。。。
そんな私が苦手意識のあるコードレビューをどの様に克服していくのか、体験談を踏まえてお話しできればと思います!(現在進行形)

▼お話しする内容
・苦手意識のあるコードレビューをどのように克服していったのか(体験談)

・チームの過去1年分のコードレビューを分析してみる
・ペアプロならぬペアレビューをしてみる
・とにかくレビューしてみる

などなど

2
Test / Quality Laravel Regular session (25 mins)

Laravelのフォームリクエストのテスト方法を考えてみた

yu12co_mm あはれん yu12co_mm

LaravelのフォームリクエストのprepareForValidationでは
バリデーションを実行する前にリクエストデータを加工することができます。
リクエストデータを小文字に統一することや
[name=month value=10]、[name=day value=2]の2つリクエストデータを
[name=date value=102]という1つのリクエストデータにmergeすることができます。

ですが、prepareForValidationでmergeして新たなリクエストデータを作るとテストがしにくなってしまうのです。
基本は、Laravelのフォームリクエストをテストするとき、
Validatorファサードでバリデーションインスタンス生成して
passesメソッドに想定していデータを受け渡して確認するのですが、これが使えなくなるのです。

こういった場合のテスト方法として、以下の3つが考えられます。

  1. Validatorファサードを使わず、自己流でバリデーションインスタンス生成してテストする
  2. フォームリクエスト単位ではなくFeatureTestとして大まかにテストする
  3. Laravel Duskを利用したE2Eテストで大まかにテストする

それぞれについて試した結果について話します。

本セッションでは主にLaravelのフォームリクエストとテストについて話します。

1
採択 CI/CD Performance Lightning talk (4 mins)

アプリケーションのデプロイを高速化するためにnode_modulesに手を出した話

gatchan0807 がっちゃん gatchan0807

みなさんのアプリケーションのデプロイは高速ですか?

昨今のWebアプリケーション開発では、UIはVue.jsやReactなどを使ったSPAとして提供し、PHPはAPIとしてデータを提供してSPAと連携する構成がよく見られます。
ただ、この構成で長く提供されているWebアプリケーションであればあるほど、UIの変更や更新が頻繁に行われるSPAのコードの中身は複雑になり、ビルドが少なくない時間を取ってしまってデプロイフローの開始から完了までの時間が長くなってしまう問題が発生してきます。

今回は、そういった課題が発生したWebアプリケーションのデプロイを高速化するために、PHP側の改善はもちろんのこと、フロントエンド目線でnode_modules周りやフロントエンドビルドツールまで手を加えた際のTipsをお話できればと思います。

このトークをお聞きいただき、高速なデプロイを手に入れて、高い開発体験とWebアプリケーションを使ってくださるユーザーさんに対して価値提供の高速化を実現する一助になれば幸いです!

PHP Conferenceの参加は初で、大きいカンファレンスでの登壇経験は浅いので、なにとぞお手柔らかにお願いします!

10
Lightning talk (4 mins)

PHPerならスクレイピングもPHPでしょ!

AkitoTsukahara Akito.Tsukahara AkitoTsukahara

皆さんはスクレピングツールを実装しようと思い立った時のどの言語で実装しようと考えますか?
もちろんPから始まるお馴染みのあの言語ですよね!
PHPですよね!

スクレイピングするならPythonというのが一般的かもしれませんが、自分たちが慣れ親しんできたPHPでも十分にスクレピングができるということをお伝えしたいと思います。
PHPが優れてるよ、というお話はしません。好きな言語で好きなものを自由に作ってみよう!というスタンスでお話しさせていただきます!

3
PHP8 Lightning talk (4 mins)

20年モノレガシーシステムをPHP8で動かすまで

penguin_no_045 やなせ たかし penguin_no_045

"
巨大なレガシーシステムのPHPを8に上げました。その時に苦労した点などを中心に知見を一気に紹介します。
対象システムは20年運用されており、ノンフレームワーク、昔ながらのおおらかなPHPで書かれたシステムです。
いわゆる「ゆるふわ」なPHPで書かれており、しかも大規模なシステムははPHP8とは非常に相性が悪く、バージョンアップは非常に困難なプロジェクトとなりました。
レガシーシステムをPHP8に上げるために何が必要だったのか?躓いた点は?どれくらい手をかけたのか?など、実務で発生したことをお話します。
とくに、できたこと・できなかったこと・やらなかったことなど、実際のバージョンアップで役立つ要素を紹介します。"

7
採択 Service Development Architecture Infra / Middleware / Cloud 2021/10/02 14:55〜 Track3 Regular session (25 mins)

20年モノの巨大Webサービスの開発継続戦略 - ミドルウェアのバージョンアップとの向き合い方

penguin_no_045 やなせ たかし penguin_no_045

私たちのサービスはローンチから20年を超え、現在も積極的に開発中です。幸いにも今まで多くの方に使われるサービスとなっています。しかし、これだけの年数を経て多くの機能を追加しているため、典型的な「レガシーシステム」となっているのが現状です。
もちろん、開発時にはさまざまな課題があり、完全に解消することは難しいです。それでも、大規模なサービスを維持していくためには開発を継続することが重要です。

本セッションでは、大規模なレガシーシステムを継続して開発していくために取っている戦略の中で、ミドルウェアのバージョンアップに関する戦略を中心にお話します。

ミドルウェアのバージョンアップは、通常の機能開発とは大きく異なります。たとえば、サービス提供を続ける限り避けて通れないものですが、新たな価値を発生する者ではありません。そのため小さな機能追加などで積極的にバージョンアップをすることは難しく、EOLに合わせると、PHPの場合は2年に1度のバージョンアップになります。
そして、広い範囲の既存コードに手を加える可能性があります。バージョンの間が開くと修正箇所も当然増えます。いわゆるレガシーシステムであれば、影響範囲はアプリケーションすべてといっても過言ではないですし。修正が重複する個所すらあるかもしれません。
この影響範囲の広さが、レガシーシステムのミドルウェアバージョンアップを難しいものにしています。

それを考えずに、通常の開発と同じようにミドルウェアのバージョンアップをすることは困難で、正面から挑むだけでは無限の時間とコストがかかります。
現実世界には時間、コストなど、さまざまな制約があります。これはビジネスでサービス提供をしている以上当然避けられず、その中で戦わなければいけません。
となると作り直すのも現実的ではないすし、だからといって場当たり的な対応だけでは、技術的負債を抱え込んで開発の継続が困難になるかもしれません。
広範囲で複雑な問題には、取捨選択が必要です。いまある複雑な問題は、今この場面で対応すべきことではないかもしれません。
このように、普通の機能開発とは異なる困難さ、複雑さをもっています。これに立ち向かうためには、戦略をもって挑まなければなりません。

本セッションは、ミドルウェアのバージョンアップ事例の紹介とそのプロジェクトで採用した戦略についてお話します。
事例紹介では、直近実施した2件のバージョンアップ(PHP,PostgreSQL)の事例を紹介します。その中では現実の制約に沿った形でプロジェクトを推進するためのゴールの設定、事前準備、実際の作業プロセスについてお話します。
そして紹介した事例をより一般化し、レガシーシステムの開発を継続していくための戦略を紹介します。

Discord Channel: #track3-1-b-middleware-up

Learning Lightning talk (4 mins)

MathPHP で数学人材を目指す

hamakou108 濱田晃輔 hamakou108

昨今では数学の重要性が以前にも増して叫ばれるようになってきました。
AI やビッグデータの技術や人材をコア・コンピタンスに据える企業も増え、データ経営といった言葉も耳慣れるようになってきました。
近いうちにプログラマーと数学は切っても切れない関係になる、そんな時代が到来するやも知れません。

とは言え数学を勉強するのはハードルが高い、でも数学を活用したコードは書けるようになりたい。
そんな PHPer に紹介したいライブラリが MathPHP 。
このセッションでは MathPHP を使ってベクトルや行列、統計学を手軽に扱う方法を紹介します。

MathPHP: https://github.com/markrogoyski/math-php

4
採択 PHP8 2021/10/02 14:20〜 Track3 Regular session (25 mins)

レガシーシステムにおけるPHP8バージョンアップのアプリ対応記録

zaregoto32 頓花 zaregoto32

PHPのメジャーバージョンアップは変更点が多く、歴史が長くコードベースの大きなサービスでは対応に手間が掛かることが度々発生します。
弊社ではPHPのEOLを避けつつサービスの品質を担保するために、PHPのメジャーバージョンアップを2年に1回は必ず行っています。
そのため、今年EOLを迎えるPHP7.3からPHP8.0へのバージョンアップを行いました。
今回、対象となったサービスは2008年から続いてるレガシーシステムであることと、PHP8.0の変更点が多いことが重なり過去にないレベルの修正が必要となりました。
PHP8に対応するあたり発生する、次のような課題と、それに対する解決事例をご紹介します。
・影響範囲の調査と対応範囲の検討
・後方互換性の無い変更に対する対応
・静的チェックが難しい変更点に対する対応
・品質担保
息の長いサービスがPHP8対応する際に注意すべき点、大きな課題を発見した際にどのように解決したのかを具体的に紹介します。
これからPHP8対応を行う方々の一助となれば幸いです。

Discord Channel: #track3-a-php8-up

Team Community / Communication Lightning talk (4 mins)

チームで「完成度低いの歓迎LT大会」を開催したら大変良かった話

sakay_y 酒井 康晴 sakay_y

皆様、LTは好きでしょうか?私は好きです。

日々の業務の中で、ちょっとした学びやTipsの共有、チームへの周知事項、くだらないことなど、その人がチームにLTを通して伝えられる知見はたくさんあります。
そのようなチーム内に埋もれそうになる知見を発表してもらうべく、LT大会を不定期で開催するようにしました。

「完成度低いの歓迎」と銘打つことで、良いことがあると感じました。
その取組について紹介します。

3
IDE Regular session (25 mins)

どんとこい、PhpStorm 〜Why don't you do IDE's best!〜

YKanoh65 加納悠史 YKanoh65

PhpStorm 使っていますか?
ご存知の通り、PhpStorm は、開発を効率的に進めるための機能がたくさん搭載されており、PhpStorm を使いこなして開発を進めている人の作業を見ると、素早いコーディングに驚かされると共に、自分も同じように PhpStorm を使い倒したいと憧れます。
しかし、一方でいざテクニックを覚えようとしても、何から覚えていけばいいかとっかかりがわからず、結局自身の知っている範囲でのショートカットやテクニックのみを利用してしまうといったことはないでしょうか?
このセッションでは日常の業務で役に立ち、かつ手をつけやすい PhpStorm のテクニックを段階ごとに解説し、徐々に PhpStorm エキスパートに近づく手助けをすることを目的とします。

7
Beginner Regular session (25 mins)

スーパーグローバル変数ってなんだっけ?

YKanoh65 加納悠史 YKanoh65

$_GET["page"]、$_POST["name"]、$_SERVER ... PHP を初めて触った日、これらの変数を扱いませんでしたか?
これらの "スーパーグローバル" と呼ばれる変数は、初学時にこそ利用しますが、フレームワークを使い始めるとすぐに利用しなくなり、すでに忘れてしまった人も多いのではないでしょうか。
基本的にフレームワークの仕組みを使えば、これらの変数を利用する機会はない上に、中には設計上、セキュリティ上利用すべきでないとされている変数も含まれているため、PHP を扱っていてもあまり正面からスーパーグローバル変数を理解する機会は少ないと思います。
本セッションでは、PHP 初学者を対象に、スーパーグローバル変数をおさらいし、何気なく使わなくなったこれらの変数がなんだったのか、意外と理解していない使わなくなった理由について考えることで、PHP 初学者以降のスーパーグローバル変数との付き合い方を紹介します。

4
採択 Learning Community / Communication 2021/10/02 17:35〜 Track3 Regular session (25 mins)

技術コミュニティ運営戦線 ~継続して勉強会を続けるために~

YKanoh65 加納悠史 YKanoh65

社内勉強会を開催したい!でも運営を続けられるか不安... という方は多いのではないでしょうか?

コロナ以前の2019年から毎月開催しているコミュニティイベント "PHP TechCafe" は、Web や PHP に関わる IT エンジニアがスキルアップを目指して意見交換を行うことを目的としています。
私が運営に参加することを決めたときには、自身の学習モチベーション向上にもつながるだろうと、軽い気持ちで活動を始めました。
しかし、実際に運営を続けると、コンテンツのネタ切れや集客不足、自身の知識の限界による不安など、想像以上に問題点が多く、今も試行錯誤している状態です。

本セッションでは、これから社内で技術系勉強会を開いて盛り上げようとしている方を応援すべく、月一でPHPのイベントを開催するにあたって心がけている、勉強会を継続させるためのポイントやノウハウ、今後考えていくべき課題を紹介します。

Discord Channel: #track3-3-b-community-operation

Regular session (25 mins)

作って遊ぼう!Composer Plugin

o0h_ きんじょうひでき o0h_

Composerには、Pluginという仕組みがあります。
Comopserに2.0が来るまでは、hirak/prestissimoにお世話になっていた方も多いと思います。(私もその1人です!!)

では、「どういうことが出来るのか」はご存知でしょうか。
「あの便利なComopserが、更に便利になっちゃうんですか?!」とワックワクな妄想をしてみたい・・・そのためには、まず「どういう事ができるのかな?」を知る必要があります。

知ることが全ての始まりです。
もしかしたら、あなたの仕事に革命を起こすような素晴らしい可能性が眠っているかもしれません。
(もちろん、「not for me!!!」と叫ぶだけの結果に終わる可能性もあります)

このセッションでは、「Composer Pluginとはなんだろう?」とイメージを掴むために、「どういう仕組みになっているのか」「どういう機能があるのか」を紹介したいと思います。

2
採択 PHP8 2021/10/03 10:35〜 Track3 Regular session (25 mins)

サービス運用エンジニアによるPHP8バージョンアップ奮闘記

zosokh ヒエイカザト zosokh

PHP8利用していますか?
フォトウエディングサービスのアプリケーションをPHP7.2から8系に上げた時の奮闘記を話します。

アプリケーションの言語バージョンアップって勇気入りますよね。
サービス運用・開発エンジニアとして担当サービスのアプリケーションは常に最新言語バージョンにしていきたい!と思いますが、
案件開発の優先度でどうしてもバージョンアップには手が付かない事もあると思います。

PHPバージョンアップを遂行し、開発者だけじゃない事業に関わるチーム全員が得られた素敵な話をしたいと思います。

  • バージョンアップする意味を考える(メリット・タイミング・モチベーション)
  • 優先度の持ち方。事業担当者理解への手配。
  • 準備、実対応、リリースの話
  • 効果とその後の開発記

【トーク対象】
・webサービス運用エンジニアの方
・アプリケーションのPHPバージョンを上げたいと思っている方

【その他】
大きなカンファレンスなどに登壇するのは初めてです。

Discord Channel: #track3-4-b-php8-up-by-ops

採択 Test / Quality Operation 2021/10/02 15:40〜 Track3 Regular session (25 mins)

PHPアプリケーションだってモニタリングしたい。

oogFranz 杉山 祐一@MASH弦楽団 oogFranz

みなさんの運用しているアプリケーションはモニタリング(監視)されていますか?
サイボウズのGaroonではサーバーレベルのモニタリングはされていましたが、アプリケーションレベルのモニタリングは今まで十分には行われていませんでした。
そのため、お客様からのお問い合わせがあって初めて障害に気がつくことが多くなっていました。
また、発生している問題の重大さもうまく把握できていないため、どれくらい優先して障害対応をすべきなのか、本当に障害として対応するべきなのかといったコミュニケーションを、SRE・ビジネスメンバー・サポートメンバーなどの社内の他のメンバーとうまく取れていない、という問題もありました。

そういった状況から脱却すべく、昨年からアクセスログの集計やメトリクスの収集を行い、必要に応じてアラートを飛ばすモニタリングの仕組みを導入しました。
このセッションでは、モニタリングをどのように導入したのか、モニタリングで得られた数値とお客様に与えている不便さをどう結びつけたか、モニタリングによって開発チームと社内の他のメンバーとのコミュニケーションにどのような変化があったか、いまモニタリングで苦労していることをお話しします。

Discord Channel: #track3-2-a-php-monitor

採択 Database 2021/10/03 17:00〜 Track4 Long session (60 mins)

Programming Elasticsearch with PHP

ezimuel 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

Database Regular session (25 mins)

PHPで作って理解するデータベース

hanhan1978 Ryo Tomidokoro hanhan1978

PHPウェブアプリケーションにおいて、データベースは不可欠な存在といっても過言ではありません。テーブル設計の方法論や、各種 RDBMS ごとの特性、チューニング方法の理解などを通して、データベースについて学んだ方も多いと思います。

本トークでは、ふと「PHPでデータベースを作ってみたら、もう少しデータベースと仲良くなれるのではないか?」と思ってしまった私が、データベースを作成していく過程で得られた知見について、発表します。

  • データベースの基本構造
  • なぜMySQLはB+木を使うのか
  • インデックスとは何か
  • 構造から考えるチューニングのツボ
4