sue@blog ~ /posts/php-kansai-cloudflare-lt-report
$ cd ../
$ cat post.metadata

PHP勉強会関西に登壇してきた — Cloudflareへの引っ越しとLT3本の振り返り

date: 2026-04-25 PHP Cloudflare Event
PHP勉強会関西に登壇してきた。「PHPer、Cloudflare に引っ越す」というタイトルで15分セッションを持たせてもらったので、その背景と、当日聞いたLT 3本(mktimeを使った日付操作、Sec-Fetch-SiteでのCSRF対策、PHP 8.4 プロパティフック)の振り返りをまとめる。

イベント概要

$ open "https://phpkansai.connpass.com/event/388908/"

関西のPHPerが集まるゆるめの勉強会、PHP勉強会関西に参加してきた。15分セッション1本 + LT数本という構成で、自分は15分セッション枠で登壇。


自分の発表 — PHPer、Cloudflare に引っ越す(15分セッション)

$ wrangler deploy --compatibility-flag "php_runtime"

背景

最近業務でCloudflareをめちゃくちゃ触っているんだけど、エコシステムがとにかくTypeScript一強。サンプルコードもドキュメントも、9割がTS/JS前提で書かれている。

PHPerの自分として、TS以外でどこまでCloudflareと付き合えるか試したかったのが今回のモチベーション。実際に手を動かしてみた記録をそのまま持ち込んだ、という感じのセッションにした。

15分あるとデモまで詰め込めるので、スライドだけでは伝わらない「実際にどう動くのか」を画面共有で見せるのを優先した。Workers RPCやサービスバインディングあたりは言語関係なく面白く遊べるので、そこを中心に扱っている。

資料・コード

15分あるとデモまで詰め込めるのが良い。PHPでCloudflare触るの完全にマイノリティだけど、やってみるとWorkers RPCとかサービスバインディングみたいなところは言語関係なく面白く遊べるので、もっと布教していきたい気持ちが強くなった。

LT① PHPの日付操作 — mktime で月末・閏年

$ php -r "echo date('Y-m-d', mktime(0,0,0,4,0,2024));"

紹介された手法

mktime + 翌月0日 で月末日を安全に取得するテクが紹介されていた。

month-end.php
// 3月の月末 = 4月の0日目
echo date('Y-m-d', mktime(0, 0, 0, 4, 0, 2024));
// → 2024-03-31

// 2月の月末 = 3月の0日目(閏年も自動判定)
echo date('Y-m-d', mktime(0, 0, 0, 3, 0, 2020));
// → 2020-02-29(閏年)

月末バグで時間溶かしてた過去をこの書き方で救われた、という実体験ベースの発表。日付処理は地味だけど確実に刺さるテーマ。

会場からのフィードバック

個人的な推奨
新規コードなら DateTimeImmutable + last day of next month 修飾子で月末丸め込みをやるのが安全。mktimeは「月末=翌月0日」のテクを知ってる前提でないと読み解けないが、last day of は英語そのままなので可読性が高い。
mktimeで月末取るやつ、懐かしすぎる。前々職でPHP書いてた時に散々お世話になった。ただ今やるなら素直に DateTimeImmutable + `last day of` 修飾子かな。現場の歴史的事情で mktime しか使えないっていうリアルもわかりすぎて頷いてた。

LT② CSRF対策と Sec-Fetch-Site ヘッダー

$ curl -v "https://api.sample.com/users" | grep Sec-Fetch

ポイント

メリット

Sec-Fetch-Siteの4値

意味
same-origin スキーム・ホスト・ポートが完全一致
same-site eTLD+1(登録可能ドメイン)が一致。サブドメイン違いはここ
cross-site eTLD+1 が異なる
none ユーザー直接操作(アドレスバー入力・ブックマーク等)

注意点

FE/BE分離構成での使い所
sample.comapi.sample.com のようなサブドメイン分離は Sec-Fetch-Site: same-site になる。same-origin / same-site / none を許可、cross-site を拒否する Resource Isolation Policy を敷くと、CSRFトークンなしでもかなり堅くなるケースがある。
Sec-Fetch-Site、名前は知ってたけど「Origin文字列比較に頼らなくていい」って観点で語られるとめっちゃ刺さる。FE/BE分離してるサービスだと same-site 判定が効くのでほぼCSRFトークン要らなくなるケースもありそう。業務で扱ってるブラウザのバージョン確認しとこ。

LT③ PHP 8.4 プロパティフック

$ php --version | grep 8.4

概要

使用例

Person.php
class Person {
    public float $height;
    public float $weight;

    // バーチャルプロパティ: 値を保持せず毎回計算
    public float $bmi {
        get => $this->weight / ($this->height ** 2);
    }
}

$p = new Person();
$p->height = 1.7;
$p->weight = 65;
echo $p->bmi; // → 22.49...

バーチャルプロパティ

従来との違い

Eloquent Accessor使ってる感覚でフレームワークじゃなく素のPHPに書けるのは地味に嬉しい。ドメインモデルをフレームワーク非依存で書きたい派なので、計算系プロパティがクリーンに表現できるのはかなり好み。バーチャルプロパティがインスタンスごとに独立っていう挙動は初見だと引っかかるので、クイズ形式で扱われてたのわかりみ。

LaravelJP Conference 2025 告知(イベント内で共有あり)

項目 内容
会場 東京・立川 ガーデン
チケット 一般参加チケット発売中、残り若干名
当日スタッフ特典 スピーカーディナーに出れる(Taylor氏と直接話せる可能性もあり)
来年以降 今年の参加人数次第。ビジネス主催なのでコスパ合わなきゃ終わる

Laravel Live Japan 2026 に向けて

イベント内でLaravelJP Conference 2025の話題が出ていた流れで、来年以降のLaravel Live Japanにも触れておきたい。

今回のPHP勉強会関西みたいに、15分枠で自分の試行錯誤をそのまま持ち込むスタイルは自分に合っていた。次は別の切り口(CloudflareのD1をPHPから扱う話、とか)でまた出たい気持ちがある。

関西のPHPコミュニティ、いい雰囲気だった。登壇者と参加者の距離が近くて、その場で突っ込んだ議論ができるのがありがたい。

sue@blog ~ $ _