Twig と Smarty、PHPテンプレートエンジンの選び方を考える
PHP でビューを組み立てるとき、生の PHP を埋め込む方式のほかに、専用のテンプレートエンジンを使う選択肢があります。代表的なのが Twig と Smarty です。どちらも「ロジックとビューを分離する」という同じ目的を持ちながら、設計…
Monologでログ設計:ハンドラとチャンネルを使いこなす
PHPのデファクトなロギングライブラリ Monolog は、「ハンドラ(Handler)」「フォーマッタ(Formatter)」「プロセッサ(Processor)」「チャンネル(Channel)」という4つの部品の組み合わせで動きます。この…
Carbonで日付処理のバグを防ぐ:タイムゾーンと不変性の落とし穴
PHP/Laravel で日付を扱うなら Carbon はほぼ必須のライブラリですが、「タイムゾーン」と「ミュータブル(可変)性」の 2 つを理解していないと、テストでは通るのに本番で日付がずれる、集計が 1 件だけ狂う、といった再現しづら…
FakerとファクトリでテストデータをリアルにするPHPテスト術
PHPのテストにおける「テストデータの作り方」は、品質と保守性を大きく左右します。['name' = 'test', 'email' = 'a@a.com'] のようなベタ書きは書き始めこそ速いものの、カラムが増えるたびに全テストへ波及し、…
外部キーだらけの旧DBを新DBへ移行する — Seederの依存解決とDB定義書からのDDL自動生成
ある業務システムのリニューアル案件で、旧DBから新DBへデータを移し替える「シーディング(初期データ投入)基盤」をPHPで整備しました。設計の核は2つです。
「ガチャの確率」を実装したら、それは確率ではなく重み付けだった
あるアミューズメント系システムの案件で、いわゆる「ガチャ(抽選)」機能を実装する機会がありました。仕様書には当たり前のように 「確率」 という言葉が並んでいたのですが、要件を詰めていくうちに、運用側が本当に求めていたのは確率そのものではなく…
fideloper/proxyで理解するリバースプロキシ配下のLaravel設定
ロードバランサやリバースプロキシの背後にLaravelを配置すると、「ローカルでは正常なのに本番だけおかしい」という症状が高確率で発生します。代表的なものは次のとおりです。
パスワードを持たないログイン設計:「コードがあれば通す、無ければ作る」を安全に実装する
ある子ども向けアミューズメント系システムの案件で、通常とはかなり毛色の違う認証要件に出会いました。
Laravel 13 で「認証基盤アプリのテンプレート」を整える:マルチドメイン・読み書き分離・Sanctum・Octane
複数の案件で「管理画面 + フロント + API」の3層 Laravel アプリを繰り返し立ち上げていると、環境変数の設計や Docker まわりのボイラープレートで毎回消耗します。そこで、認証基盤を持つ Laravel アプリのテンプレー…
計測データの時系列グラフAPIを「期間窓ごとに欠損ゼロ」で返す設計
計測機器向けのSaaS案件で、測定値の推移を「1ヶ月 / 3ヶ月 / 半年 / 1年」で切り替える折れ線グラフのAPIを担当しました。一見「期間で集計して返すだけ」ですが、実運用に載せると「測定が無い期間をどう扱うか」が最大の設計判断になり…
