「【Laravel】あなたのコード、新卒が読んでも体調が悪くなりませんか?」~【php】今週の人気記事TOP5(2025/12/14)
「【Laravel】あなたのコード、新卒が読んでも体調が悪くなりませんか?」今週の人気記事TOP5(2025/12/14)
【初心者】PHPのクラスが何も分からない人へ ~クラスの処理を追ってみた~
PHP初心者向けに、クラスの基本をキャンディの例で解説。「設計図」としてのクラス、その「実体」であるインスタンスの生成を詳述。プロパティで基本情報を定義し、__construct()で初期化、newでインスタンス化する流れを説明。private/publicでのアクセス制御、getter/setter含む各種メソッドによる振る舞いの定義が中心。これらの仕組みを理解すれば、クラスへの苦手意識が払拭され、コードリーディングや開発がスムーズになると結論付けている。
新卒1年目の頃に書いたコードを読み直したら汚すぎて体調が悪くなった話
新卒時に書いた、複雑なPHP/Laravelコード(セミナー予約データ取得処理)を「リーダブルコード」とテスト駆動開発を組み合わせたフローでリファクタリングした事例。ネストの深い処理をヘルパーメソッドに分割し、早期リターンや説明変数でコードを整理。命名の明確化と不要コメント削除も実施した。結果、コードは大幅に整理され可読性が向上し、テストコードの存在が安全なリファクタリングに不可欠であることを再認識した。
PHP 8.5のパイプ演算子を使ってお問い合わせフォームをワンライナーで作ってみた
PHP 8.5で導入予定のパイプ演算子|>を活用し、お問い合わせフォームをワンライナーで実装する実験記事。CSRFトークン生成からPOSTデータ取得・サニタイズ、バリデーション、ビュー生成までを一連のパイプ処理で連結しました。これにより、複雑な処理もフロー順に記述でき、可読性が向上する結果を示しています。ただし、本記事のコードは実験用であり、プロダクトでの利用は推奨されていません。
Laravelアプリとモジュール(アプリ依存パッケージ)の連携
本記事は、Laravelアプリでモジュラモノリスを限定的に実現する手法を紹介します。アプリ依存パッケージ(モジュール)のWeb/API/Consoleルートを連携させるため、app/Enums/Module.phpで利用モジュールを列挙し、app/Providers/ModuleServiceProvider.phpでそれらのルートを一括で読み込む仕組みを構築。これにより、モジュールのルーティングを一元管理し、アプリ側から機能の有効/無効化や実装切り替えを可能にします。外部パッケージに依存せず、グルーコードでモジュラモノリスを実現する技術詳細が示されています。
Laravel Queue × Pub/Sub:ドメインを汚さない非同期処理の設計と実装
本記事は、Laravel QueueとPub/Subパターンでドメイン層をLaravelに非依存な非同期処理を設計・実装。注文完了メール送信などを自作Publisher/Subscriberで疎結合化しました。
Subscriberを抽象クラスとし、スパイを用いた本番に近い単体テストを実現。afterCommitでトランザクション整合性も確保しました。この設計は、後からの機能追加の柔軟性と責務分離による保守性向上に寄与すると結論付けています。欠点は全体像の把握の難しさです。
【2025/12/7】「結論:危険なeval()も、使い方次第で最強のDXツールになる」今週の人気記事TOP5(2025/12/07)
laravelアプリケーションで環境変数を管理する手法 実例
Laravelの環境変数管理について、筆者らは課題に直面。当初リポジトリに暗号化する手法はコンフリクトや権限管理が難点だった。Secrets ManagerとECSタスク定義の連携では、タスク定義肥大化によるJSON上限到達や、.envのエスケープ問題が発生。
現在は、Laravelアプリケーション内にカスタムBootstrapperを導入し、Secrets Managerから直接環境変数を読み込む方式を採用。これにより、タスク定義肥大化を回避し、JSONの直接利用でエスケープ問題を解消。config:cacheでパフォーマンスを維持し、運用上の課題解決に成功した。
eval()による黒魔術:PHPの深淵を覗く
PHPのeval()は危険だが、MockeryやSymfony等の主要ライブラリは、性能・開発者体験(DX)向上のため、制御された「黒魔術」として活用。動的コード生成でI/Oレスなモック・DI、対話実行などを実現する。?>によるPHPモードリセットで安全性を確保し、言語制約を超えた「魔法の杖」だが、安易な利用は禁物だ。
【PHP】composer auditの脆弱性のチェックを意図的に無視(ignore)する方法
Composerのauditコマンドで検出された脆弱性は、composer.jsonのconfig.audit.ignoreにCVE-IDなどを設定することで意図的に無視できる。理由や適用範囲(audit/block/all)を指定可能な複数フォーマットが存在する。これによりauditコマンドの終了コードが0となり、CI/CDにおける脆弱性チェックの柔軟な運用が可能となる。基本は修正が望ましいが、影響がないと判断できる場合や、一時的な対処に有効。
Cookieサイズ制限4096バイトとの戦い——認証トークン保存とnginx設定の最適化
認証システムでNginxバッファ不足とCookie 4096バイト制限により「upstream sent too big header」エラーが発生。Nginxのfastcgiバッファ設定を拡大し、トークンをAES-256-CBC暗号化とHMAC-SHA256改ざん検知を施し、アクセストークンとリフレッシュトークンを別々に論理分割(session1/session2)でCookieに保存し解決。その後、リクエスト側の「400 Bad Request」エラーもlarge_client_header_buffers調整で対処。レスポンス/リクエスト両側のCookieサイズ制限を意識することの重要性を示した。
Symfony + Ray.MediaQueryという可能性
Ray.MediaQueryは、SQLをSQLのまま、オブジェクトをOOP原則で扱えるDBアクセスFW。SymfonyでのPoCでは、Doctrineの完全置き換えを検証した。
結果、Symfonyの便利機能喪失と引き換えに、「ファクトリーとドメインオブジェクトへのビジネスロジック集約」「全ビジネスロジックの単体テスト容易性」というメリットが大きいと判明。複雑なSQLのみの部分導入よりも、完全置き換えが有力な選択肢となりうると結論づけ、今後の実務導入を検討する価値がある。
Discussion