php備忘録
Twig と Smarty、PHPテンプレートエンジンの選び方を考える

PHP でビューを組み立てるとき、生の PHP を埋め込む方式のほかに、専用のテンプレートエンジンを使う選択肢があります。代表的なのが Twig と Smarty です。どちらも「ロジックとビューを分離する」という同じ目的を持ちながら、設計…

続きを読む
php備忘録
Monologでログ設計:ハンドラとチャンネルを使いこなす

PHPのデファクトなロギングライブラリ Monolog は、「ハンドラ(Handler)」「フォーマッタ(Formatter)」「プロセッサ(Processor)」「チャンネル(Channel)」という4つの部品の組み合わせで動きます。この…

続きを読む
php備忘録
Carbonで日付処理のバグを防ぐ:タイムゾーンと不変性の落とし穴

PHP/Laravel で日付を扱うなら Carbon はほぼ必須のライブラリですが、「タイムゾーン」と「ミュータブル(可変)性」の 2 つを理解していないと、テストでは通るのに本番で日付がずれる、集計が 1 件だけ狂う、といった再現しづら…

続きを読む
php備忘録
FakerとファクトリでテストデータをリアルにするPHPテスト術

PHPのテストにおける「テストデータの作り方」は、品質と保守性を大きく左右します。['name' = 'test', 'email' = 'a@a.com'] のようなベタ書きは書き始めこそ速いものの、カラムが増えるたびに全テストへ波及し、…

続きを読む
php備忘録
外部キーだらけの旧DBを新DBへ移行する — Seederの依存解決とDB定義書からのDDL自動生成

ある業務システムのリニューアル案件で、旧DBから新DBへデータを移し替える「シーディング(初期データ投入)基盤」をPHPで整備しました。設計の核は2つです。

続きを読む
php備忘録
「ガチャの確率」を実装したら、それは確率ではなく重み付けだった

あるアミューズメント系システムの案件で、いわゆる「ガチャ(抽選)」機能を実装する機会がありました。仕様書には当たり前のように 「確率」 という言葉が並んでいたのですが、要件を詰めていくうちに、運用側が本当に求めていたのは確率そのものではなく…

続きを読む
php備忘録
fideloper/proxyで理解するリバースプロキシ配下のLaravel設定

ロードバランサやリバースプロキシの背後にLaravelを配置すると、「ローカルでは正常なのに本番だけおかしい」という症状が高確率で発生します。代表的なものは次のとおりです。

続きを読む
php備忘録
パスワードを持たないログイン設計:「コードがあれば通す、無ければ作る」を安全に実装する

ある子ども向けアミューズメント系システムの案件で、通常とはかなり毛色の違う認証要件に出会いました。

続きを読む
php備忘録
Laravel 13 で「認証基盤アプリのテンプレート」を整える:マルチドメイン・読み書き分離・Sanctum・Octane

複数の案件で「管理画面 + フロント + API」の3層 Laravel アプリを繰り返し立ち上げていると、環境変数の設計や Docker まわりのボイラープレートで毎回消耗します。そこで、認証基盤を持つ Laravel アプリのテンプレー…

続きを読む
php備忘録
計測データの時系列グラフAPIを「期間窓ごとに欠損ゼロ」で返す設計

計測機器向けのSaaS案件で、測定値の推移を「1ヶ月 / 3ヶ月 / 半年 / 1年」で切り替える折れ線グラフのAPIを担当しました。一見「期間で集計して返すだけ」ですが、実運用に載せると「測定が無い期間をどう扱うか」が最大の設計判断になり…

続きを読む