「PHP非同期処理、現状で十分ですか?」~【php】今週の人気記事TOP5(2026/01/25)
「PHP非同期処理、現状で十分ですか?」今週の人気記事TOP5(2026/01/25)
PHP×Tokyo January 2026 に参加しました
「PHP×Tokyo January 2026」では、Laravel 2025 Advent Calendar、Claude Code Plugin、Livewire V4などが紹介された。特に、PHPの「True Async RFC」の議論や、Laravelスタイルの超高性能フレームワーク「Hypervel」のベンチマーク結果(Laravel Octaneの11〜12倍)が注目された。Swoole 6.1の新機能、MCPの仕組み、Laravel×DDD×Vibe Codingの事例も発表された。懇親会では、Laravel公式のトレーシングツール「Nightwatch」にも触れられた。
memcachedは終わってない:単純なKVキャッシュとしての強さ
Google Cloud Memorystore for Memcachedのサービス終了は、memcachedが古いことを意味しません。memcachedは、マルチスレッドによる高スループット、ステートレスでシンプルな実装、活発なメンテナンスが特徴です。単純なKVキャッシュで低レイテンシ・高スループットが求められ、「キャッシュは飛ぶ」ことを前提にできる場合に非常に強力です。マネージドサービスは減るかもしれませんが、用途が合えば今後も定番の道具として残るでしょう。
サロゲートペアだけじゃない、JSの文字数カウントがPHP/MySQLとズレる罠
JSでの文字数カウントはサロゲートペアだけでなく、改行の正規化(ブラウザ送信時に\nが\r\nになる)や、DB保存時の挙動違いによるズレが発生します。[...str].lengthはコードポイント数ですが、DBのVARCHAR制限などにはTextEncoder().encode(str).length(バイト数)やmb_strlen(PHP)、CHAR_LENGTH(MySQL)との同期が必要です。見た目の文字数ならIntl.Segmenterですが、DB制限には使えません。
MVCを考えながらミニWebアプリを作る
PHPでMVC設計思想に基づき、Webカメラで撮影した画像にフォトフレームを合成するミニWebアプリを開発。
アプリ概要:
- Webカメラ画像とフォトフレームを合成し、全ユーザーに公開。
- ログインユーザーは「いいね」やコメントが可能。
- 画像投稿者への通知機能あり。
要件:
- ユーザー登録・認証・ログイン・情報変更。
- ギャラリー機能(画像順表示、いいね・コメント、メール通知)。
- 編集機能(Webカメラプレビュー、合成画像作成、画像アップロード、画像削除)。
技術:
- サーバーサイド: PHP
- クライアントサイド: HTML, CSS, JavaScript (ブラウザ標準APIのみ)
- 開発環境: Docker
MVC:
- Model: データ・処理(DB操作、ビジネスロジック)
- View: 画面表示(HTML出力、ロジックは最小限)
- Controller: 処理の流れ制御(リクエスト受付、Model呼び出し、View選択)
実装:
- Docker環境でPHP開発。
-
public/index.phpを入口とし、RouterがURLに応じて適切なControllerを呼び出す。 - ControllerはModelからデータを取得・加工し、Viewに渡して画面を生成。
結論:
MVCは責務を明確に分離し、コードの可読性と保守性を向上させる。機能ごとに小さく分け、役割を混ぜないことが重要。
セッションとクッキーの仕組みをしっかりと理解する【PHP】
PHPのセッションとクッキーの核心は、保存場所と役割の違いです。セッションは「実データ」をサーバーに保存し、ブラウザには「セッションID」のみをクッキーとして保存します。これにより、ログイン情報などの機密データを改ざんから守ります。一方、クッキー(setcookie())は「実データ」をブラウザに直接保存し、テーマ設定などに利用されます。セッション維持には、サーバー側(gc_maxlifetime)とブラウザ側(cookie_lifetime)の両方の有効期限設定が重要です。セッションIDはログイン時などに再生成し、セキュリティを高めます。
「phpの最新情報をお届け!」今週の人気記事TOP5(2026/01/18)
意図的に挿入された脆弱性の実例PHP 8.1.0-dev RCE バックドアを例にとって説明 の動画の実装
本記事は、PHP 8.1.0-dev RCE脆弱性を含むバックドアを例に、攻撃者がどのように脆弱性をコードに隠蔽するかを解説。Dockerを用いて2021年当時のPHP環境を再現し、脆弱性のあるソースコードをビルド。curlコマンドでバックドアの実行を確認後、gdbデバッガでPHPプロセスの特定部分にブレークポイントを設定し、HTTPヘッダーを介したコード実行を追跡。これにより、バックドアの具体的手法とデバッグによる追跡方法を実演する。
Phase 0|導入編(思想と全体像)
本シリーズは、EC開発を目指す出戻りエンジニアが、知識の断片化と「作れる」と「理解している」の乖離を克服するため、最短ルートを避け、仕組みの理解を深める学習記録です。
HTML/CSS/JSからPHP、Java、WordPressへと、段階的に各技術の基本構造やEC開発に必要な要素を自作・分解しながら、試行錯誤の過程を共有します。完成品ではなく、理解に至るまでの思考プロセスを重視し、同様の課題を持つエンジニアにヒントを提供することを目指します。
「PHPでよくない?」は言うほど思考停止でもない
小規模社内向けAPI開発において、Python×Lambdaが一般的である一方、本件ではPHP+Laravel+t系EC2を選択。理由は、Lambdaのスケール特性がオーバースペックでコールドスタートの影響が無視できず、初期コストもかかるため。一方PHP+EC2は、チームの経験、コードの可読性、ローカル検証の容易さ、運用・保守の安定性、説明コストの低さが社内APIに適していると判断。サーバーレスのシンプルさや自動スケールは捨てたが、構成の単純さと長期保守性を優先した。
「DTO導入で、あなたのコードはもっとシンプルになる?」今週の人気記事TOP5(2026/01/11)
実装を揃えるより、仕様を揃える― Go と PHP の電話番号対応で考えたこと
GoとPHPが混在する環境で電話番号のバリデーション・フォーマット変換を整理した事例。当初、両言語で自前実装していたが、国際化対応や外部連携の必要性から、それぞれGoogleのlibphonenumberベースのライブラリ(PHP: Laravel-Phone, Go: nyaruka/phonenumbers)を導入。しかし、ライブラリ導入だけでは仕様差分が残るため、PdMと仕様をすり合わせ、テストケースで担保することで、実装間の仕様統一と継続的な品質維持を実現した。重要なのは「実装を揃える」より「仕様を揃える」こと。
DTOがあると考える範囲が減る
クリーンアーキテクチャ等でEntityをUseCaseやControllerに直接渡すと、Entity変更時の影響範囲やメソッド呼出の是非、テスト範囲が曖昧になる。DTO(Data Transfer Object)を導入することで、各層が「公開する情報」と「操作できる範囲」が明確になり、考える範囲(認知負荷)が減る。UseCase側でDTOを定義・生成し、Controller側はそれをJSON化するのみ。入力側にも同様のDTO(Command)を用いると、Entityの構造を知る必要がなくなり、コードの保守性・可読性が向上する。
【Laravel】Gemini API (1.5 Flash) でレシートを爆速OCRしてJSON化する方法
個人開発の家計簿アプリで、Gemini API (1.5 Flash) を利用し、レシート画像を爆速でOCRしてJSON化する方法を解説。LaravelのHTTPクライアントでAPIを叩き、response_mime_type: application/json を指定することで、構造化されたJSONデータを直接取得できる。プロンプトエンジニアリングで精度を向上させ、XserverでのSSL証明書エラーも解決策を提示。これにより、PHPのみで簡潔にレシートOCRが可能になる。
読み取りは自由でいい
本記事は、フルスタックエンジニアがCQRSの考え方から着想を得て、読み取り処理の設計思想を柔軟にした経験を共有する。以前は、表示データ取得でもエンティティ構築やDTO変換をRepository経由で行い複雑化していたが、読み取りはビジネスロジックを経由せず、表示に最適化されたQueryServiceで直接SQLを実行する方式に変更。これにより、シンプル、高速、柔軟、明確といったメリットを得た。書き込み処理は、ビジネスルールの整合性維持のため、従来通り厳格な設計を維持する。
PHP OPcache を正しく理解して最適化したい
OPcacheはPHPの実行性能を向上させる仕組みで、パース・コンパイル済みのOpcodeを共有メモリに保持・再利用します。PHP-FPM環境ではマスタープロセス起動時にメモリが確保され、worker間で共有されるため、設定変更には再起動が必要です。CLIとFPMではOPcacheが分離しています。最適化はmemory(断片化)、files(キャッシュ数)、strings(interned strings)の3観点からopcache_get_status()で確認し、ボトルネックに応じた設定調整が重要です。
「Sail導入で、Docker環境構築が数分で完了!」今週の人気記事TOP5(2026/01/04)
【Laravel】php artisan sail:installサンプル
Laravel Sailは、既存LaravelプロジェクトにDocker環境を構築するコマンドです。PHP 8.1以上とDocker環境を前提とし、php artisan sail:installでMySQLなどのDBサービスを選択し、./vendor/bin/sail upで起動します。WSL環境で権限エラーが発生した場合は、sudo usermod -aG docker $USERでdockerグループに追加し、newgrp dockerで設定を反映させることで解決できます。--withオプションでDB、--phpオプションでPHPバージョンを指定可能です。
Laravel 経験者のための Prisma コマンド早見表
Laravel経験者向けにPrismaコマンドを解説。 php artisan migrate に相当するのは npx prisma migrate deploy で、リポジトリclone時やCI/本番環境で利用。npx prisma migrate dev は make:migration + migrate + generate をまとめた開発用コマンド。migrate status は php artisan migrate:status に対応。db push はマイグレーション履歴を残さずスキーマを即時反映するため、検証用などに限定すべき。
【Laravel】Laravel Breezeを使用した認証画面の作成
Laravel Breezeをcomposer require laravel/breeze --devで追加し、php artisan breeze:install bladeを実行することで、認証機能(ログイン、登録、パスワードリセット等)を持つ画面とコードが自動生成されます。
これにより、app/Http/Controllers/Auth以下、resources/views/auth以下などに認証関連のファイルが追加・生成され、npm install、php artisan migrateで依存関係のインストールとDBテーブル作成、php artisan serveで起動後、http://localhost/loginから認証画面にアクセス可能になります。
Symfonyのバリデーション機能を学ぶ - 基本から条件付きバリデーションまで
SymfonyのValidatorコンポーネントは、Attribute、YAML、XMLで制約を定義し、エンティティまたは専用クラスに適用する。$validator->validate()で検証を実行。@Assert\Callbackで複雑な条件も実装可能。バリデーショングループで状況に応じたルール適用もできる。
結論:
- 既存実装からの置き換えには、学習コスト、混合による混乱、バグ増加リスクから慎重な検討が必要。
- バリデーション専用クラスは、複数エンティティを跨ぐ、画面固有のバリデーションに有用。
【個人開発?】調子に乗って今度は「予想ツール」をAIと作ってみた話
筆者はAIと共に、ロトの過去データを分析して次回の当選番号を予測するWebツールを個人開発した。当初は容易と見込んでいたデータ取得で、みずほ銀行サイトの読み込み失敗や、Yahoo・宝くじネットのネットワーク制限といった壁に直面。AIの試行錯誤の末、楽天銀行の静的HTMLページからPHP標準機能とSSLエラー回避策(※検証無効化、要注意)を施してデータ取得に成功した。ミニロトの連続アクセスによる一時ブロックを防ぐため、cron設定をくじごとに分割し、各抽選日の自動更新を実現。スクレイピングは著作権法上の情報解析に該当し、サーバー負荷にも配慮した上で適法・マナー遵守で開発された。
Discussion