🥇

「Laravelアプデ、テストコード…対応できてますか?」~【php】今週の人気記事TOP5(2025/09/28)

に公開

【2025/9/28】「Laravelアプデ、テストコード…対応できてますか?」今週の人気記事TOP5(2025/09/28)

生成AIと進める、制約ある環境でのテストコード導入

メドレー社は、レガシーな医療機関業務支援システム「@link」にテストコードを導入するため、生成AIを活用しています。大規模機能にブランチカバレッジ20%を目指し、プロンプトを構造化することでAIの精度を向上。テストコードの骨子作成や観点洗い出しに役立てています。得られた知見はドキュメント化し、チーム全体への文化浸透を図っています。

Laravelバージョンアップ時の注意点(Carbon3)

Laravel 10から12へのバージョンアップ時、Carbonライブラリのバージョンが3に上がり、diffIn系メソッドの返り値がintから符号付きfloatに変更された点に注意が必要です。Carbon2では常に正の整数が返っていましたが、Carbon3では正負のfloatが返るため、既存コードに影響が出る可能性があります。対策として、intキャストとabsoluteオプションで絶対値化することで、意図しない数値になるのを防ぎました。バージョンアップ時は、公式ドキュメントを詳細に確認し、AIを活用して影響範囲を洗い出すことが重要です。

wp-envを使ってテーマのローカル開発環境を構築する

この記事は、WordPressのテーマ開発におけるローカル環境構築をwp-envを用いて効率化する方法を解説しています。wp-envはDockerを内部で使用し、指定したWordPressのバージョン、PHPバージョン、プラグインなどを.wp-env.jsonファイルで設定することで、簡単に開発環境を構築できるツールです。具体的な手順として、wp-envのインストール、設定ファイルの記述、環境の起動方法、そしてテーマの作成と有効化について説明しています。最小限のファイル(index.phpstyle.css)を用意することで、自作テーマを有効化できることが示されています。

Laravelバージョンアップ時の注意点(カラム修飾子)

Laravel 10から12へのバージョンアップ時、カラム変更でchange()を使うと、Laravel 11以降では既存のdefaultcomment等の修飾子が消える点に注意が必要です。過去の変更を保持するには、全ての修飾子を再定義する必要があります。

救済策としてphp artisan schema:dumpによるマイグレーション圧縮が有効ですが、これはバージョンアップ前の既存カラムのみに適用されます。バージョンアップ後のchange()利用時は、既存の設定内容を確認し、必要な修飾子を全て再定義するようにしましょう。公式ドキュメントの確認が重要です。

「お会計とおつり」で学ぶPHPプログラミング入門

PHP入門記事の要約です。
この記事では、四則演算、変数、条件分岐といったプログラミングの基礎を、「おやつ代とおつり計算」を題材に解説しています。具体的には、+, -, *, / 演算子を使った計算、変数による計算式の整理、if文による条件分岐を、具体的なコード例とともに紹介。所持金が足りるか否かで表示を変えるなど、実践的な内容を通して、プログラミングの基本を体験できます。

【2025/9/21】「PHP最新動向、キャッチアップしてる?」今週の人気記事TOP5(2025/09/21)

Mago: PHP開発が爆速になる?次世代の静的解析ツールを試してみた

Magoは、Rust製のPHP開発ツールチェーンで、PHPStan、PHP-CS-Fixer、Psalmのような機能を統合し、高速な静的解析、リンター、フォーマッターを提供します。
Composerで簡単に導入でき、設定も対話形式で容易です。
従来のツールに比べ10〜100倍高速で、設定の一元化、一貫したルール適用、モダンな標準準拠が特徴です。
GitHub Actionsとの連携も可能で、proc_open関数でRustのバイナリを呼び出しています。
ベータ版ながらも開発が活発で、将来のPHP開発標準ツールとなる可能性を秘めています。

大量のレコードをPHPで処理する場合のベストプラクティス

PHPで大量レコードを処理する際の最適化として、メモリ制限を解除するのではなく、memory_limit内で処理可能なレコード数を読み込み、処理後にunset($rows)でメモリ解放を推奨。OFFSETLIMIT句を使用し、シーケンシャルIDがあればWHERE id > @positionで効率的なSELECTを実現。全件取得や1行毎の処理は非効率。初学者が陥りやすい非効率な処理を避け、本記事のテクニックでバッチ処理の最適化を促す。

学生が連携先の社内向けシステム開発を受託し大成功した話

学生チームが企業から工数管理システム「WorkTrack」の開発を受託し、成功させた事例。
AWS、MySQL、PHP、Apacheを用いて、認証・セキュリティ、作業登録、集計・分析、マスタ管理等の機能を実装。
アジャイル開発体制で進められ、詳細な要件定義と綿密なコミュニケーションにより、スケジュール遵守率100%、本番稼働後の重大バグ0件を達成。
今後はテスト自動化、ドキュメント整備、メール機能の完成、監視・アラート体制の構築、セキュリティ強化を目指す。

自社プロダクトのPHPのバージョンを7.3から8.4まで上げた

ランサーズのプロダクト(lancers.jp)のPHPバージョンを7.3から8.4へアップデートした事例。人員不足とテスト不足を克服するため、静的解析ツールPHPStanと自動修正ツールRectorを最大限に活用。PHPStanで非互換コードを検出し、Rectorで自動修正を試みた。E2Eテストも実施したが、mixed型コードや曖昧比較などPHPStanでカバーできない部分も存在。結果、重要な機能に絞ったテストと目視確認で対応し、メジャーアップデート8.0を乗り越えた。課題として非推奨機能への対応が残る。静的解析の有効性を実感し、テストのない環境への導入を推奨。

重複URLへの対処と301リダイレクトの実装例(CakePHP)

重複URLはSEO評価分散のリスクがあるため、301リダイレクトによるURL正規化が重要。
.htaccessが利用できない環境向けに、CakePHPでのPHP実装例を紹介。$_SERVER['REQUEST_URI']/index.phpへのアクセスを検知し、header()関数で301リダイレクトを送信。環境変数$_SERVER['HTTP_HOST']を利用して動的に転送先URLを生成。

【2025/9/14】「Laravel 11、WebDAV…PHPの未来、どうデザインする?」今週の人気記事TOP5(2025/09/14)

Laravel11 マルチ認証環境でのセッション管理をカスタマイズ

Laravel 11でマルチ認証(Admin/User)時のセッション管理問題を、カスタムセッションハンドラーで解決する方法を解説。デフォルトではuser_idカラムが共有されるため、sessionsテーブルにadmin_idカラムを追加。CustomDatabaseSessionHandlerを作成し、Admin/User認証状態に応じてadmin_id/user_idをセッションに設定。AppServiceProviderでカスタムハンドラーを登録。認証状態に応じてセッションに適切なIDが格納される。パフォーマンスとセキュリティへの注意点も言及。

PHP 5.2からLaravel 11への大規模リニューアル #2 アーキテクチャ設計と技術選定

レガシーシステムのリニューアルでLaravel 11を採用。Claude Codeによる分析で、既存ホスティング環境(さくらインターネット)との相性、豊富な機能、長期サポートが決め手。データベースは正規化し、番組時間管理に週単位時間システムを導入。認証は4段階権限で柔軟性を確保。APIはRESTful設計。Twitter/OpenAI API連携、多層キャッシュ、セキュリティ対策も実施。次回はデータ移行の詳細を解説。

WordPressをKamalでVPSにデプロイ

WordPressをKamalでVPSにデプロイする手順を解説。既存環境にKamalを初期化し、deploy.ymlを設定(アプリ名、GitHubユーザー名、VPSのIPアドレスなどを環境に合わせて変更)。ヘルスチェックのためにup.phpを作成し、アップロードサイズ上限をupload.iniで調整。DockerfileでPHPバージョンを指定し、up.phpupload.iniをコピー。kamal setupでデプロイを実行。スケーラブルなクラウド環境構築が容易になった。

WebDAVのファイル一覧をJSONで取得したい【WebDAVJSON】

WebDAVJSONは、WebDAVのファイル操作をJSON形式でRESTfulに行うための軽量なサーバーサイドスクリプト(PHP/Node.js)です。PROPFIND/XMLの代わりに、JSONでのファイル一覧取得、アップロード、削除、ダウンロードを提供し、CORS、APIキー認証、拡張子制限に対応します。従来のWebDAVと併用することで、フロントエンドやスクリプトからの利用を容易にし、開発体験を向上させます。公開環境での利用時は、TLS、認証、拡張子制限の設定が推奨されます。

Raspberry Piと外付けHDDで構築するNextCloudサーバー

Raspberry PiにNextCloudサーバーを構築する手順を解説。Apache、PHP7.2、MariaDBをインストールし、外付けHDDをデータ保存領域として設定する。HDDはGPT形式で初期化後、ext4でフォーマットし自動マウント設定を行う。NextCloudとMariaDBのデータディレクトリをHDDへ移動し、電力設定の変更も行う。ブラウザからNextCloudにアクセスし、管理者アカウントとデータベース情報を入力して初期設定を完了させる。

【2025/9/7】「LaravelとVite、レガシーリプレイス。次の一手、どう考える?」今週の人気記事TOP5(2025/09/07)

[Laravel] 10年付き合うことになるWebAPIをチームで作るときに考えたこと

通販事業のWebAPIリプレイスにおいて、10年後も快適な開発を目指し、PHPとLaravelを採用。オンプレミス環境でコンテナ化し、GitLab CI/CDを構築。チームのスキルと事業の変化に対応するため、ディレクトリ構成を再考し、UseCaseとInternalディレクトリを導入。連想配列の使用禁止、PHPUnitの徹底、アンチパターンの定義などを推進。課題はテストコードの浸透、レビュー文化の醸成、ドメイン知識の共有、認証・認可の整備。長期的な保守を見据え、柔軟性を重視した設計を目指している。

非数 や -0.0 は truthy?

浮動小数点数の0、-0.0、非数(NaN)がtruthy/falsyとして扱われるかを複数言語で調査。C/C++とPythonは0と-0.0がfalsy、NaNがtruthy。RubyとLuaは全てtruthy。JavaScriptとPHPは全てfalsy。PerlはC/C++と同様。言語によって挙動が異なり、特にJavaScriptとPHPが少数派であることが判明。著者はRuby/Luaの「nilとfalse以外truthy」方式を好む。

PHP 5.2からLaravel 11への大規模リニューアル #1 プロジェクト概要と課題分析

20年以上稼働するPHP5.2ベースの「Aniradi Network」をLaravel 11へリニューアルするプロジェクトの概要。
技術的負債(セキュリティリスク、メンテナンス性、パフォーマンス、文字コード問題)が深刻化し、長年リニューアルを阻んでいたが、Claude Codeの登場により開発効率が向上。
PHP8.3 + Laravel 11、MySQL8.0へ移行し、セキュリティ強化、保守性向上、ユーザー体験・運用効率の改善を目指す。
Claude Codeを活用し、段階的なデータ移行と並行稼働で進める。

Laravel + Vite + α のモダンフロントエンド環境を5分で立ち上げる手順

Laravel BreezeとSailを利用し、Viteを導入したモダンなフロントエンド開発環境を迅速に構築する手順を紹介。Docker環境でLaravelプロジェクトを作成後、BreezeでBootstrap, Vue, Reactのいずれかの足場を生成し、npm installとnpm run devでビルド。これにより、認証機能付きの快適な開発環境が手軽に実現可能。

PHPとfontforgeで実装するWebフォント変換サーバー

PHPとFontForgeを活用し、Webフォント変換サーバーを実装した事例を紹介。ユーザーがアップロードしたOTF/TTF形式のフォントファイルを、FontForgeやttf2eotなどのコマンドラインツールを用いてWOFF2, WOFF, EOT, SVG形式に自動変換し、ZIPファイルとしてダウンロードさせる。CakePHPでの実装例として、ファイル処理、形式変換、ZIP圧縮の流れを解説。セキュリティ対策としてOSコマンドインジェクション対策の必要性、サーバー負荷、エラーハンドリングについても言及。

CareNet Engineers

Discussion