「laravelの最新情報をお届け!」~【laravel】今週の人気記事TOP5(2026/01/25)
「laravelの最新情報をお届け!」今週の人気記事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、Hypervel(Laravel Octaneの11-12倍の性能を持つフレームワーク)、MCPの仕組み、Swoole 6.1の新機能などが紹介されました。DDDとVibe Codingを組み合わせた開発手法も共有されました。また、Laravel Live Japan 2026の最新情報も告知されました。懇親会ではLaravel公式のトレーシングツールNightwatchにも言及がありました。
サロゲートペアだけじゃない、JSの文字数カウントがPHP/MySQLとズレる罠
JSの文字数カウントはサロゲートペアだけでなく、改行の正規化(\n→\r\n)やNFD形式、単独サロゲート等でPHP/MySQLとズレる。特にtextarea送信時の改行正規化は、ブラウザとサーバーで文字数が異なり、Laravelのバリデーションエラーの原因になる。Intl.Segmenterは見た目の文字数を返すものの、MySQLの制限チェックには不向き。MySQLのCHAR_LENGTH()やPHPのmb_strlen()と同期させるには、単独サロゲート除外や改行正規化後のコードポイント数カウントを考慮した処理が必要。
Laravel カスタムバリデーションルールで nullable フィールドを検証する方法
Laravelでカスタムバリデーションルールをnullableフィールドに適用すると、値が空の場合にスキップされる問題が発生します。これは、カスタムルールがデフォルトで「暗黙的」でないためです。
解決策は、カスタムルールクラスにpublic bool $implicit = true; を追加することです。これにより、値が空でもカスタムルールが実行されるようになります。
単純な条件であればRule::requiredIf()で代替可能ですが、ロジックが複雑な場合や再利用性を重視する場合はカスタムルールが適しています。
Azure Easy Auth環境でファイルダウンロード時に502エラーが発生する原因と解決策
Azure App ServiceのEasy Auth環境で、LaravelのExcelダウンロード機能で502エラーが発生する原因は、Easy Authのバッファリングと、StreamedResponseによるデータ断片送信の非互換性です。
解決策は、一時ファイルに保存してからresponse()->download()で送信する方法です。これによりContent-Lengthヘッダーが適切に設定され、Easy Authのプロキシ処理との相性が改善されます。StreamedResponseは巨大ファイルやリアルタイム配信には有効ですが、プロキシ環境や中規模ファイルではBinaryFileResponseが適しています。
FormRequestsのエラーて本当に422でいいの?
API設計におけるHTTPエラーコードの使い分けについて、特にLaravelのFormRequestでよく使われる422 Unprocessable Entityに焦点を当てて解説。
結論: FormRequestのエラーは、入力値が業務ルールやバリデーションに違反している場合に「422 Unprocessable Entity」で返すのが適切。これは「この入力値を直せば成功するか?」という観点で判断できる。
他のエラーコードとの違い:
- 400 Bad Request: リクエスト自体が構文的に壊れている場合。
- 404 Not Found: 対象リソースが存在しない場合。
- 409 Conflict: リソースの現在の状態と操作が衝突する場合(例: 確定済み注文の再確定)。「入力は正しいが、今の状態では無理か?」という観点で判断。
- 401/403: 認証・認可関連。
まとめ: 422はユーザーが修正すべき入力値エラー、409はシステム状態の衝突、404はリソース不存在、500は開発者側のバグとして区別する。
「Fortifyで認証、どこまで任せますか?」今週の人気記事TOP5(2026/01/18)
Laravelでバーコードを表示できるようにする
Laravelでバーコード表示を実現するには、PHPの画像ライブラリGDのインストールが必要です。Docker環境では、DockerfileにGD関連のパッケージとdocker-php-ext-install gdを追加し、docker-compose buildで再構築します。その後、composer require milon/barcodeでライブラリをインストール。Bladeテンプレート内でDNS1D::getBarcodeHTML()やDNS1D::getBarcodePNG()(base64エンコード)を使用することで、指定したフォーマット(例: C128)のバーコードを簡単に表示できます。
CodeBuild Batch で PHPUnit を並列実行できるか検証してみた
AWS CodeBuild Batch で PHPUnit の並列実行を検証した結果、PHPUnit が複数ファイルを引数に取れない制約から、ラッパースクリプトによる動的分割が必要であることが判明しました。また、各シャードで composer install が実行されるため、テスト時間が短い場合はセットアップコストが逆効果となり、直列実行より遅くなることが示されました。キャッシュやカスタムイメージによるセットアップ最適化で損益分岐点は下がりますが、テスト時間が10分程度なら Paratest、30分以上なら CodeBuild Batch の利用が推奨されます。
Laravel×Fortify入門:認証の流れとカスタマイズの考え方
Laravel Fortifyは、Laravel公式の認証パッケージで、ユーザー登録、ログイン、パスワードリセットなどをルーティングやコントローラー作成不要で実装できます。デフォルトでは、FortifyServiceProviderが画面表示、RegisteredUserController/AuthenticatedSessionControllerが処理を担います。
バリデーションのカスタマイズや複数テーブルへの保存など、Fortifyの責務外の要件は、GETリクエストのみFortifyに任せ、POST処理を自作、またはCreateNewUserアクションでバリデーションを定義、さらには完全に自作コントローラーで実装する方法があります。Fortifyは認証フローのベースを迅速に提供するツールであり、責務を理解し、FormRequestと適切に使い分けることが重要です。
UUIDの標準仕様って何それ
UUIDv5は、RFC 4122で定義された「Name-based, SHA-1」という名前ベースのUUID生成ルールです。名前空間と名前をSHA-1でハッシュ化して生成します。同じ入力からは常に同じUUIDが生成され、言語を跨いで再現可能であるため、商品コードや外部システムIDなど、意味に基づいて一意性を確保したい場合に適しています。将来的に同じIDを再生成したい場合にUUIDv5、そうでなければランダムなUUIDv4を使用するのが一般的です。
「Gemini APIとpgvector、Laravel開発の新たな扉を開くか?」人気記事(2026/01/11)
【Laravel】Gemini API (1.5 Flash) でレシートを爆速OCRしてJSON化する方法
個人開発の家計簿アプリにおけるレシート入力課題に対し、Gemini 1.5 Flash APIを活用することで、PHP(Laravel)から低コストかつ高速にOCR処理を実現する方法が解説されています。
要点:
- Gemini 1.5 Flashの利点: 安価(無料枠あり)、高速、画像から直接JSON形式で構造化データを取得可能。
-
実装: LaravelのHttpクライアントを使用し、Base64エンコードした画像とプロンプトをAPIに送信。
response_mime_type: 'application/json'を指定することで、確実なJSONレスポンスを強制。 - プロンプト: 店舗名、購入日、合計金額、商品リストなどの抽出項目を具体的に指示。
- 成果: Pythonでの複雑なOCR処理が不要になり、PHPのみで完結。
これにより、個人開発者でも手軽に高精度なレシートOCR機能を実装できます。
【Laravel】php artisan lang:publishサンプル
Laravelでバリデーションメッセージ等を日本語化する手順。php artisan lang:publishで言語ファイルを公開後、composer require laravel-lang/lang --devで日本語翻訳を導入。php artisan lang:add jaで日本語ロケールを追加し、app.phpまたは.envでlocaleをjaに設定することで、UIが日本語表示されるようになる。
【Laravel】1画面で共通の変数(モデル・値)を渡す方法
Laravelで、Controllerの__constructにmiddlewareを追加することで、特定のViewで共通の変数を渡すことができます。
$this->middleware(function ($request, $next) {
view()->share('変数名', '渡したい値やモデル');
return $next($request);
});
これにより、Controller内で定義した変数をView側で{{ $変数名 }}のように直接参照できるようになり、Javaの@ModelAttributeに似た機能を実現します。
Laravel × pgvector × Embeddingで作る「類似記事検索」の最短ルート
LaravelとPostgreSQLのpgvector拡張機能、OpenAIのEmbedding APIを活用し、類似記事検索機能を最短で実装する方法を解説。記事データをarticleテーブルに保存し、content_for_embeddingカラムからOpenAI APIで生成したベクトルをarticle_embeddingsテーブルに保存。検索時は、基準記事のembeddingと他の記事のembeddingとのコサイン類似度を計算し、ORDER BY similarity DESC LIMITで上位記事を取得。1記事1ベクトル、前処理の雑さといった課題もあるが、最小構成での類似検索導入の道筋を示す。
「Rails/Laravel i18nをReact/Vueで!新ライブラリ徹底解説」人気記事(2026/01/04)
Rails/Laravelのi18nをReact/Vueで使いたくてライブラリを勉強がてら作ってみた
Rails/Laravel の翻訳ファイルを React/Vue で共通利用できるライブラリ bf-i18n が開発された。既存ライブラリは特定のフレームワーク組み合わせに限定されることが多かったが、bf-i18n は Rails/Laravel 両方の形式に対応し、React/Vue で統一APIを提供。モノレポ構成でコア、React、Vue、CLI を分離し、ブラウザロケール検出や Missing Key トラッキング機能も備える。内部では補間処理や複数形処理をフレームワーク形式に合わせて実装し、React では useSyncExternalStore でロケール変更時の再レンダリングを実現している。
Scramble + Orvalで実現するLaravelのスキーマ駆動開発
LaravelとScramble、Orvalを組み合わせたスキーマ駆動開発は、APIの型不整合による実行時エラーを削減し、開発効率を向上させる。ScrambleはLaravelからOpenAPI仕様書を生成し、Orvalはそれを基にTypeScriptのAPIクライアントコードを生成する。Resourceの権限別分割やカスタムレスポンス構造の明示、FormRequestでのパスパラメータの扱いといった工夫により、正確なスキーマ生成とコード品質維持を実現する。CI/CDでの型チェックも重要。
【Laravel】php artisan sail:installサンプル
Laravel Sail は、既存 Laravel プロジェクトに Docker 環境を構築するコマンドです。php artisan sail:install を実行すると、MySQL や PostgreSQL などの DB サービスを選択してインストールできます。
手順:
-
composer create-project laravel/laravelでプロジェクト作成 -
composer installで依存関係(vendor)作成 -
php artisan sail:installで Sail 設定 -
./vendor/bin/sail up -dで起動 -
http://localhostでアクセス
WSL環境で権限エラーが発生した場合、sudo usermod -aG docker $USER と newgrp docker で解決できます。--with オプションで DB を、--php オプションで PHP バージョンを指定可能です。
Laravel使いがNext.jsにチャレンジ|ControllerとViewの違い編
LaravelのController+Bladeの役割は、Next.jsでは基本的にpage.tsxファイルに集約されます。page.tsxでは、データ取得やリクエスト処理といったControllerの役割と、HTML描画といったBladeの役割を同一ファイル内で記述します。ロジックは必要に応じて別のファイルや関数に切り出すことが推奨されます。これにより、ControllerとViewの役割分担に捉われず、Next.jsの記述に自然に入りやすくなります。
Laravel 経験者のための Prisma コマンド早見表
Laravel経験者向けにPrismaコマンドを解説。Prismaのmigrate deployはLaravelのmigrate、migrate devはmake:migration+migrateに相当し、開発用途に便利。migrate statusはmigrate:status、db pushはmigration作成なしでのDB即時反映(検証用)。LaravelのmigrateとPrismaのコマンドは役割を理解すると使いやすい。
Discussion