PHPerKaigi 2023 トーク一覧

採択 2023/03/24 17:15〜 Track A LT(5分)

stdClassって一体何者なんだ?!

dainabook 寺西 帝乃 dainabook

PHP8.2から動的プロパティが非推奨となり将来的には禁止となることは、多くのPHPerに衝撃を与えたことでしょう。
そのような中で、例外的に動的プロパティが認められた特殊なクラスが存在します。
それが「stdClass」です。
このクラスは一体何者なのでしょう。
公式の説明を見ると「PHP には全てのクラスの親となる基底クラスの概念がないため、 このクラスは基底クラスではありません。」と記されています。

...では一体何なのか?!
現代的なコーディングにおいて動的プロパティは良くないとされ、PHPが徐々に厳格なコーディングスタイルを取り入れていく中で、なぜstdClassだけが許されているのでしょうか。
ここではstdClassの機能と用途からその正体に迫り、今後のコーディングにおいてstdClassは使って良いものなのかを説明していきます。

17
採択 2023/03/24 17:20〜 Track A LT(5分)

特徴、魅力を知って、各PHPフレームワークを使いこなそう!

hitoshi_a0 浅野 仁志 hitoshi_a0

皆さんが使っているフレームワークは何でしょう??
ウェブアプリケーションの開発において開発効率の向上、セキュリティの対応等のためにフレームワークを使うことが多いと思います。

私は普段はLaravelを使ってます。というか業務ではLaravelしか使ったことがありません。
他のフレームワークの様子がどうやら違うらしいという噂を聞きました。
そこで調べてみたところ、驚愕!
フレームワークによって全然違う!
調べた中で見つけた違いと魅力について、私の意見を交えて説明します。
各フレームワークの比較をして違いを理解している人は少ないかと思いますので、この発表で違いを理解しましょう!

トーク内容
各フレームワークの特徴
それぞれの設計思想、魅力
どういうプロジェクト、どういう人におすすめなのか?

対象のフレームワーク
・ Laravel
・ CakePHP
・ Yii
・ Slim

12
採択 2023/03/24 17:25〜 Track A LT(5分)

セキュリティテストでより安心できるリリースにしよう

Motoki Hirao

顧客情報やカード情報の流出などの問題から、サービスのセキュリティ面に対する非機能要求は年々高まりつつあります。

昨年私たちのチームで担当したアーキテクチャのリプレイスプロジェクトでは、Java製のCSMで構築されたサービスをPHP&Laravelの構成へリプレイスしました。
リプレイス前後ではサービス、機能としてのふるまいが変わらない点を重点的にテストしました。しかしふるまいに対してのテストのみでは、セキュリティ上の問題発見が困難でした。

そこで、私たちのチームではWeb脆弱性診断ツールであるVAddyを選定し、セキュリティテストを実施しました。
シナリオに沿って自動的にセキュリティテストを実施する方法や導入に関する課題、問題があるコードの発見と対処についてお話しします!

9
採択 2023/03/24 17:30〜 Track A LT(5分)

PeachPieを使ってPHPを.NETで動かしてみた

9rokirishima くろきり 9rokirishima

.NETというとC#というイメージでPHPerにとってはあまり関係ないものと思っていませんか?
なんとPHPも.NETのランタイムで実行することができるんです!
PeachPieというオープンソースプロジェクトがあり、それを用いることでコンパイルしたPHPを.NETランタイム上で実行し、C#とPHPの相互運用が可能になりました。

このトークではPeachPieの紹介と、実際にPeachPieを用いて個人開発してみた際の知見や感想をお話しします。

5
採択 スポンサーセッション 2023/03/24 18:05〜 Track A スポンサーセッション(20分)

問い合わせ調査に素早く回答するための「アキネイター」的アプローチの模索

myblackcat7112 横山雅季 myblackcat7112

ユーザーからのお問い合わせはプロダクトを運用するにあたり避けては通れません。
原因調査にかける時間を減らし、プロダクトの改修や新機能の開発に時間を割くためには、調査ノウハウの蓄積とそれらが瞬時に引き出せることが要求されます。
これらの要件を満たす方法を模索した結果、アキネイターのように質問形式で過去事例を絞り込む方法にたどり着きました。

このセッションでは、調査ノウハウと過去事例に関して、
miroで整理を試みた際の工夫点、その仕組みを運用する際に浮上した課題点をお話しします。
また、miroでの運用の限界を感じたためkibelaでの運用も試みたのでその際の工夫点、課題についてもお話しします。

採択 2023/03/25 10:20〜 Track A レギュラートーク(40分)

PHPの最高機能、配列を捨てよう!!

uzulla uzulla uzulla

皆さん配列つかってますか?捨てよう!!(提案)

ご存じですか、PHPはラピッドにウェブアプリをつくれます。気軽に複雑なデータ構造を作れて幸せですね。PHPには万能薬である「PHPの配列」(配列ではない)があります!

でも…便利で愛くるしい連想配列は使っていくうちにつらい気分になっていきます。

なぜか?それはコードを駆け巡る「データ」が全く信用出来ないからです。

愛すべきPHPの配列…そんなものを捨てるなんてとんでもない?いや、捨てよう!(stdClassも)

話さないこと

  • マイグレーションする方法(銀の弾丸はない、直接聞いてください)
  • 「OOPとしての正しさ」

対象者

  • 〜中級者
  • PHP>=4

非対象者

  • 連想配列でやけどしたことのない人
  • テストが完璧な人(それは解法の一つ)
  • 「俺はゼロイチだけやるんだ」の人
26
採択 2023/03/25 10:20〜 Track B レギュラートーク(40分)

実例から学ぶ変化に強いテーブル設計 - 責務の分解とRDBMSの上手い使い方

soudai1025 曽根 壮大 soudai1025

Webサービスは生き物。
機能追加によって常に成長し、変化しています。
そんな日々の中で、機能追加する際のデータベースに対する変更はつきものです。
しかし何気ないデータベースの変更が障害の元になったり、機能追加の障壁になっていたりしませんか?

  • 本番にALTERを流したらロックでサービスが死んだ
  • 特定のカラムを毎回確認するifの列挙が辛い
  • Viewで表示されるデータがSELECTしないとわからない
  • 仕様追加の際にテーブル変更が怖い

そんな不安、心配を持っている皆様に明日からできるテーブル設計についてお話します。

対象者

  • 正規化をちゃんと勉強したことがない
  • MySQL、PostgreSQLを使っているけどなんとなくでテーブル追加、変更をしている
  • 実行計画、INDEX、言葉は知ってるけどよくわからない
10
採択 2023/03/25 11:15〜 Track A レギュラートーク(40分)

いろいろなフレームワークの仕組みを index.php から読み解こう

okashoi おかしょい/岡田 正平 okashoi

同じPHPでも、単一ファイルでWebページを表示するのとフレームワークを使うのとでは書き方が大きく変わります。
みなさんは不思議に思ったことはないでしょうか?

  • どうしてURLと対応するPHPファイルがなくてもHTTPリクエストを処理できるのか
  • どうしてHTTPリクエストを受け取るとControllerのメソッドが呼ばれるのか
  • どうしてecho等をしていないのにHTTPレスポンスを返せるのか
    そんな数々の「どうして」は、処理の起点となるindex.phpを読み解くことで答えが見えてきます。

フレームワークが動く仕組みを理解すれば適切な実装方法を判断したり、デバッグの際に役に立つでしょう。

本トークでは以下に示すフレームワークを取り上げ、index.phpを起点にフレームワークが動く仕組みを説明します。

  • CakePHP
  • Laravel
  • Slim
  • Symfony
11
採択 2023/03/25 11:15〜 Track B レギュラートーク(40分)

面倒なのは嫌なのでコンテナのマネージドサービスに極振りしたいと思います。

n_1215 中榮健二 n_1215

皆さんは普段コンテナをどのように利用されていますか?

最近AWS App RunnerがPHPマネージドランタイムをサポートするなど、コンテナを手軽に利用する仕組みがますます充実してきています。

本トークでは、PHP開発でコンテナのマネージドサービスを使うメリットやPHPならではの課題についてお話しします。

話したいこと

  • コンテナが使えるCaaS/PaaS
    • Cloud Run、App Runner、Fly.io etc.
  • PHPの実行方式
    • mod_php、PHP-FPM etc.
  • 1コンテナ複数プロセスとHTTPサーバ
  • コンテナイメージのビルド方法
    • OCIイメージ、Cloud Native Buildpacks
  • 非同期ワーカー、定時処理

話さないこと

  • Kubernetes
16
採択 スポンサーセッション 2023/03/25 12:10〜 Track A スポンサーセッション(20分)

【LT2本立て】オブジェクト指向に基づいたユニットテストの記述方法/Symfony超入門!コマンドだけでCRUD画面を作るチート法

quartetcom_dev 伊神誠人・志賀彩乃 quartetcom_dev

カルテット開発部の2人によるLT2本立てでお送りします!

【オブジェクト指向に基づいたユニットテストの記述方法 by伊神】
ユニットテストが依存しすぎたり冗長になってしまっていませんか?社内ではその問題が起きないようにオブジェクト指向の考え方に基づきテストを書いています。オブジェクト指向に基づいた考え方いくつかピックアップしてご紹介します。

【Symfony超入門!コマンドだけでCRUD画面を作るチート法 by志賀】
SymfonyにもLaravelのphp artisan make:xxxのような公式コマンドがあります。それを使って、たった数コマンドでCRUD画面ができちゃうチート法教えちゃいます!これであなたのSymfonyチョットデキル

2
採択 スポンサーセッション 2023/03/25 12:10〜 Track B スポンサーセッション(20分)

約10年もののPHPアプリケーションとの付き合い方と、今後10年改善し続けるための取り組みについて

takeokunn たけてぃ takeokunn

OPENLOGIでは10年もののPHPアプリケーション(Laravel)が日夜動き続けています。
コードの行数は数十万行あり、データベースのレコード数も数十億程度あります。

もしシステムが止まってしまったら、倉庫のオペレーションが止まり、ユーザの手元に商品が届かなくなります。
システムを安定的に動かし続けるために、「監視周りの強化」や「パフォーマンスチューニング」など様々な取り組みをしています。
また、次の10年改善し続けるための基盤作りも積極的に行なっています。

具体的に取り組んでいることについて幾つか紹介します。

4
採択 2023/03/25 12:55〜 Track A レギュラートーク(20分)

計測できるレガシーさを捉え、コード改善に対処する

blue_goheimochi 大橋 佑太 blue_goheimochi

コードのレガシーさには計測できるレガシーさと計測できないレガシーさがあると考えています。
私自身、計測できないレガシーさをうまく察知し、それを「コードの不吉な臭い」として感じ取るのは得意ではありません…。
しかし、

  • コードはどれくらい大きいか?
  • 重複コードはあるか?
  • コーディング規約が守られているか?
  • 循環的複雑度は?
  • コードにエラーはないか?
  • etc

このような情報は各種ツールを利用することで計測できます。
計測した数値を活用することで「コードの不吉な臭い」が少しずつ見え、実際にどこに手を加えて改善・リファクタリングをしていくと効率がよさいか?という道筋が見えてきます。

本トークでは主にツールで計測できるコードのレガシーさに着目しながら、どのようにコードを改善していけるか?をお話しさせていただき、皆様のリファクタリング活動の一助となればと思っております。

13
採択 2023/03/25 12:55〜 Track B レギュラートーク(20分)

Attributeを極める

tadsan tadsan tadsan

PHP 8.0に鳴り物入りで導入された新機能「アトリビュート」みなさん使っていますか?

コードに構造データが埋め込める? PHPDocより良い? 互換性がちゃんとしてる?「機能の抽象的な実装と、アプリケーションでの具体的な利用を分離でき」て、インターフェイスより柔軟?デコレータと同じようなものらしい? PHP 8でよくわからんけど#[ReturnTypeWillChange]って書いたよ?

などなど、なんか #[] って感じで書くんでしょという以外は得体の知れないものとしてPHPer界隈に横たわっています。本トークではアトリビュートへのアクセス方法、文法から制約、作例まで20分に凝縮して説明します。Attributesで実現するPHP8時代のバリデータもご参照ください。

12
採択 2023/03/25 13:30〜 Track A レギュラートーク(20分)

PHPの配列の内部実装について学びたくなった。

app1e_s meihei app1e_s

「PHP の配列は、実際には順番付けられたマップです。」

この愛おしい文章から始まるPHPの配列は、PHPerにとって切っても切れない関係です。そんな大事な配列のことを、私達はどれほど知っていますか?

配列の内部実装の話はPHP7がリリースされた頃に多く語られてきたかと思います。しかし、2015年に私はPHPを触ってもいません!

PHPでお仕事をして3年目、これを機に配列を学び、内部実装を読み解いていこうと思います。

想定する対象者

  • PHPの配列が好きな人
  • PHPの内部実装について興味がある人
  • PHP5.x ~ 7.xの人

話すこと

  • 配列・連想配列の話
  • PHP 5 → 7 の配列・連想配列の話
  • 他の言語との比較(出来たら)

話さないこと

  • 実用的な配列の使い方
  • キャッシュ周り
9
採択 2023/03/25 13:30〜 Track B レギュラートーク(40分)

Laravelへの異常な愛情 または私は如何にして心配するのを止めてEloquentを愛するようになったか

KentarouTakeda 武田 憲太郎 KentarouTakeda

Laravelは、PHPの中で最も利用者数が多い一方で賛否両論のあるフレームワークでもあります。中核機能であるEloquentもまた疑問を投げかけられることの多い対象です。

・Eloquentは果たして使うべきなのか?
・Laravelの何が便利なのか解らない。

私も最初そう感じつつ、数多くの開発を経てLaravelにおける驚くような生産性を手に入れることができました。使うべき機能、そうでない機能、実装のベストプラクティス、本番運用を含むコンテナ構築、これら「Laravel Way」を幅広くご紹介します。

苦労しながらLaravelを使っている方に是非ともお伝えしたい内容です。

20
採択 2023/03/25 14:30〜 Track A LT(5分)

【実録】「PHP_CodeSniffer」で始める快適コードレビューライフ

森下 繁喜

みんさんはLinterを導入されていますか?
・実装時のコーディング規約・ネーミング規約のチェック漏れが発生し、指摘対応・再レビューに工数がかかる
・コードレビュー時にコーディング規約・ネーミング規約の確認が面倒くさい
このような悩みを持たれている方は少なくないと思います。

「PHP_CodeSniffer」を導入することでそのような悩みを解決できるかもしれません!
そこで本セッションでは、「PHP_CodeSniffer」を導入したときの「実際にやって困ったこと」「やってみて初めて分かったこと」など
体験談を交えながら話していきます。

具体的には以下のような内容について話をする予定です。
・「PHP_CodeSniffer」とはなにか?
・「PHP_CodeSniffer」を導入するに至った経緯
・「PHP_CodeSniffer」を導入してみて

11
採択 オンライン登壇 2023/03/25 14:35〜 Track A LT(5分)

PsySHを使った効率的なデバッグ方法について

Fendo181 EndoFutoshi Fendo181

皆さんは普段どのようにデバッグをしてますでしょうか?
var_dumpは勿論、echoなどを普段使うと思います。
ただ、毎回デバッグする度にブラウザで実行したり、スクリプトを実行して結果を待つのは手間です。
ブレイクポイントを貼って検証をしたり、実行前の変数の中身を素早く確認したいときがあると思います。
そこで「PsySH」の登場です!
このLTでは「PsySH」の導入から使い方を通じて、効率的なデバッグ方法について紹介します

7
採択 2023/03/25 14:40〜 Track A LT(5分)

他言語と比較して今こそ理解しよう!目指せ、列挙型マスター! ~なりたいな ならなくちゃ 絶対なってやる!~

soachr そーく soachr

列挙型がPHP8.1でリリースされて約1年が経ちました。
みなさんの現場で列挙型はうまく活用されていますか?

本トークではJava, pythonなど、他言語の列挙型の仕様と比較しながら、
PHPにおける列挙型の役割や使い方を解説します。

このトークを聴いて貴方も列挙型マスター!
列挙型を使いこなしてより楽しく、そして安全なシステム作りをしていきましょう!

14
採択 2023/03/25 14:45〜 Track A LT(5分)

PHP8.xの新機能を使ってよい良いコードを書こう!

SAshunchan 山藤駿亮 SAshunchan

7.xのコミュニティーによるサポートが終わり8.xが今後のPHPの中心となる中、このLTではPHP8.xで追加された機能を紹介しながらその特徴についても紹介する。このLTで紹介する新機能は「match式」、「名前付き引数」、「コンストラクタ」の3つでそれぞれの基本的な書き方を紹介する他に、7系との処理の比較を行うことで新機能を使用することのメリットと注意点などについて紹介する。このLTの目的は8.xの新機能に関する参加者の理解を深めることで8.xの使用に対する参加者のモチベーションを上げること。このLTを通し、PHPのバージョンアップに対しての参加者の意識をよりポジティブにすることでPHPの関心を高めていきたい。

5
採択 2023/03/25 14:50〜 Track A LT(5分)

可能な限り確実にmkdirを成功させるには

oogFranz すぎやま@MASH弦楽団 oogFranz

みなさんはPHPからディレクトリを作ったことはありますか?
PHPには mkdir というファイルシステム関数があるため、ディレクトリを作成するのに困ることは少ないかもしれません。
しかしながら、パスの指定方法や実行タイミング、パーミッションの指定方法を正しく理解していないと、
mkdirでエラーが発生したり、思った通りのディレクトリが作成されなかったりします。
このトークでは、ラッパー関数を作成しながらmkdirだけでもどのような問題が発生する可能性があるのかをお話しします。

8