【php トピック】今週の人気記事TOP5!(2025/3/23 更新)
【2025/3/23】集計 新着週間Like数 ランキング Top5
「GitHub Copilotの実践的活用テクニック完全ガイド」をGitHub Copilotに生成させてみた
本記事は、GitHub Copilotの高度な活用法を解説。詳細なコメント、型情報付与、命名規則統一によるコード補完精度向上と、プロンプト駆動開発、ステップバイステップ指示、テストファースト、エラー処理明示化によるコード生成品質向上をLaravel 11の例を用いて示す。Copilotチャット、複数候補表示等の便利コマンドも紹介し、開発効率の大幅な向上を謳う。
【Laravel】開発環境のセットアップとプロジェクト作成
この記事は、macOS環境でLaravel開発環境を構築する手順を解説しています。PHP、Composer、PostgreSQLをHomebrewでインストール後、Laravelプロジェクトを作成します。PostgreSQLの設定でエラーが発生した場合、brew services start postgresql
でサービスを起動し、psql postgres
でデータベースに接続します。composer create-project laravel/laravel todo-app
でプロジェクトを作成し、.env
ファイルとconfig/database.php
でデータベース設定を確認、php artisan migrate
でマイグレーションを実行することで、php artisan serve
で開発サーバーを起動できます。セッションエラー発生時は、php artisan session:table
とphp artisan migrate
を実行する必要がある点に注意。
XServer VPSでホームページを公開する【AlmaLinux9/Nginx/PHP8/MySQL8】2025年版
記事は、AlmaLinux 9.5上でNginx、PHP 8、MySQL 8を用いたホームページ公開手順をXServer VPS環境で解説。2GBメモリVPSを選択し、公開鍵認証、SELinux有効化、ファイアウォール設定、SSHポート変更(22→2222)、ユーザー管理、NginxとPHP-FPM設定、MySQL設定、ログ監視、cronによるDBバックアップ、セキュリティ強化(fail2ban,clamav)などを実施。.htaccess非使用、セキュリティを考慮した詳細な設定手順が記述されている。 Ansibleによる自動化も今後の予定。
自宅のチャイムが押された事をLINEで確認できる仕組みを作った
本記事は、FlashAir、PHP、LINE Messaging APIを用いた、ドアホン来客通知システムの構築事例を紹介している。FlashAirでドアホン録画データを取得し、自宅サーバーで動画変換後、LINEに通知する仕組みだ。 FlashAirのLuaスクリプトでデータ送信、PHPで動画変換とLINE通知処理を行い、外部アクセスにはCloudflare Tunnel等を使用する。 高齢者見守りや宅配通知などへの応用も可能だが、FlashAir入手、サーバー環境構築、LINE API設定等の事前準備が必要となる。
php-fpm環境にMonitを導入してサーバーを監視する
WordPressサイトのphp-fpm停止問題に対処するため、Monitによるサーバー監視と自動復旧を実装した。Monitをインストール後、monitrc
と/etc/monit.d/php-fpm
に監視設定を記述し、php-fpmのPIDファイルパスを確認して設定した。systemctl enable
でphp-fpmとMonitの自動起動を設定し、monit -t
で設定チェック、systemctl restart monit
で反映後、monit status
で監視状態を確認。php-fpmを強制終了するテストで自動復旧を確認し、Monitによる安定稼働を実現した。
【2025/3/16】集計 新着週間Like数 ランキング Top5
Laravelのログを識別しやすく!リクエストIDをログに埋め込む方法
Laravelアプリケーションのログ調査を効率化するため、リクエストIDをログとレスポンスヘッダーに付与するミドルウェアを作成する方法を紹介。 Str::uuid()
で生成したリクエストIDをLog::withContext()
でログに、レスポンスヘッダーにset('Request-Id', $requestId)
で設定する。これにより、エラー発生時のログ特定が容易になり、request-id
をキーに効率的にログを絞り込めるようになる。 レスポンスヘッダーのRequest-Id
とログのrequest-id
を紐付けることで、迅速なデバッグが可能となる。
28. Find the Index of the First Occurrence in a String
PHPで文字列haystack
の中に文字列needle
の最初の出現位置を見つける問題を解いています。strpos
関数を利用し、needle
が見つかった場合はそのインデックスを、見つからなかった場合は-1を返す関数strStr
を実装しました。例として"sadbutsad"の中に"sad"が含まれる場合、最初の出現位置であるインデックス0が返ります。needle
が存在しない場合は-1を返します。
27. Remove Element
LeetCodeの「Remove Element」問題をPHPで解いた記事です。与えられた整数配列nums
から整数val
をインプレースで削除し、val
ではない要素の数を返します。 解法は、val
と異なる要素を配列の先頭に詰めていき、その要素数を返すことで実現しています。array_splice
を用いて不要な要素を削除することでインプレース性を担保しています。 出力は削除後の要素数k
と、val
以外の要素が先頭k
個に格納されたnums
配列となります。
爆速でLaravel12のローカル環境を作成する
Docker, Nginx, PHP-FPM, MySQL, phpMyAdminを用いたLaravel 12のローカル開発環境構築手順を解説。docker-compose.yml
で各コンテナを定義し、Nginxの設定、.envファイル設定、Laravelインストールとマイグレーションを実行することで、約15分でlocalhost:8000でアクセス可能な環境を構築できる。src
ディレクトリへの適切なパーミッション設定も重要。
26. Remove Duplicates from Sorted Array
ソート済み整数配列から重複を削除し、ユニークな要素数を返すPHPアルゴリズム。 removeDuplicates
関数は、二分探索ではなく、2つのポインタ($i
, $j
)を用いて線形時間(O(n))で処理する。$i
はユニーク要素のインデックス、$j
は走査用インデックス。nums[$i] != nums[$j]
ならユニークと判断し$i
を進め、値を上書き。最後に$i + 1
を返すことでユニーク要素数を返す。空間計算量はO(1)である。
【2025/3/9】集計 新着週間Like数 ランキング Top5
Rectorを使って地獄のLaravelアップグレード作業をEASYにしよう[Laravel7→11]
Laravel 7から11へのアップグレードをRectorとRector-laravelを用いて実施。composer
で両ツールをインストールし、rector.php
でアップグレード対象バージョン(Laravel 11、PHP 8.4)を指定。vendor/bin/rector process
コマンドでコードを自動修正。ドライラン機能で変更内容を確認可能。Rectorにより、非推奨記述の検出と修正を効率化し、大規模アップグレードを容易にした。
[2025年3月4更新] PHP開発者のためのCursor設定ガイド:共通設定・テスト・デバッグ・拡張機能まで
本記事は、PHP開発者向けVSCodeフォーク「Cursor」の設定ガイドです。ワークスペース設定、settings.json
によるエディタ・PHPUnit・Xdebug設定、推奨拡張機能、.cursorignore
によるインデックス除外、cursorrules
によるルール設定を解説。Docker環境でのPHPUnit実行、Xdebugによるリモートデバッグ設定を詳細に説明し、WSL環境での利用方法も示しています。settings.json
ではセキュリティ設定、エディタ表示、AI補完、GitLens設定などを紹介。効率的なPHP開発環境構築を支援します。
Laravel 12の新しいスターターキットを一瞬で日本語化
Laravel 12のスターターキットを日本語化する方法を解説。laravel new proj
で新規プロジェクトを作成し、LivewireとLaravel標準認証を選択。composer require askdkc/breezejp --dev
とphp artisan breezejp
を実行することで、簡単に日本語化できる。 本記事では、作者がLaravel本体へのPR (#24と#39)を通して日本語化の容易化に貢献したことも述べられている。
9. Palindrome Number
与えられた整数が回文数かどうかを判定するPHPコードについての記事です。負数や10のような数字は回文数ではないことを説明しています。 コードでは、数値を文字列に変換し、反転させて元の文字列と比較することで判定しています。 一致すればtrue、そうでなければfalseを返します。 文字列操作を用いたシンプルな解法が提示されています。
WordPressの投稿でカテゴリー必須仕様を回避する方法
WordPressの投稿は必ずカテゴリーを必要とするが、wp_insert_post
アクションフックを用いて回避可能。 「カテゴリー未選択」という仮のカテゴリーを作成し、投稿保存後に削除する手法で実現する。get_category_by_slug
、has_term
、wp_remove_object_terms
関数を使用。ただし、カテゴリー一覧からの除外、アーカイブページ対策、プラグイン・テーマとの互換性確認が必要となる。
【2025/3/2】集計 新着週間Like数 ランキング Top5
PHPカンファレンス名古屋2025で登壇してきました
PHPカンファレンス名古屋2025にて登壇。講演テーマは「設計原則、アーキテクチャパターン、アーキテクチャスタイルの違い」。抽象度の高い内容で、概念の粒度と抽象度の関係性を説明。参加セッションでは、「具体と抽象の往復」「テストの種類による分類」といった内容が印象的だった。 PHPUnit高速化技術やYWT(Year Week Task)振り返り手法に関する知見も得た。 講演後、参加者からのフィードバックを受け、Rails Wayがアーキテクチャスタイルという新たな気づきを得たことが最大の収穫となった。
Tree-sitterを使ってコードベースから関数定義を抽出する
この記事は、Tree-sitterを用いたPHPコードからの関数定義抽出方法を紹介しています。Tree-sitterは高速な構文解析ライブラリで、Node.jsスクリプトとtree-sitter-php
パッケージを用いることで、指定ディレクトリのPHPファイルから関数・クラス定義を抽出できます。出力は関数定義とその位置情報を階層的に表示します。この手法は、LLMとの連携によるコード生成、読解、ドキュメント生成に役立ち、特にインハウスコードのドキュメント整備に有効です。他の言語への適用も、対応するTree-sitterパッケージを利用することで可能です。
PHPカンファレンス名古屋2025で当日スタッフをしてきました
PHPカンファレンス名古屋2025の当日スタッフとして参加した非PHPerの筆者は、司会やタイムキーパーなどを担当。 セッションでは「テスト駆動開発」や「PHPの脆弱性とその対策」に関する内容が印象に残った。 イベントを通して名古屋のエンジニアコミュニティの活性化を実感し、今後の活動に繋げたいと考えている。 カンファレンスは盛況で、名古屋での勉強会開催も期待される。
[パフォーマンス改善]LaravelのwhereIn()をgroupBy()で改善
Laravelアプリのパフォーマンス改善事例。1万件のデータ処理で、whereIn()
を用いた処理が24秒かかっていたのを、groupBy()
によるインデックス化で0.03秒に短縮。メモリ消費は18.3MBから22.06MBに増加したが、処理速度の大幅な向上が優先された。keyBy()
も有効な選択肢で、メモリ消費を更に抑えられる可能性がある。ループ内でのwhereIn()
の多用はパフォーマンスボトルネックになりうるため注意が必要と結論づけられた。
負荷テストツール『k6』をローカル環境でサクッと試してみた
k6を用いたPHPアプリのローカル負荷テストを実施。Dockerとk6(JavaScript記述)で、10秒で100VUに増加、2分間維持、10秒で0に減少させる3段階のシナリオを実行。結果、95%のリクエストが500ms以下、エラー率0%と、100VUの負荷に十分耐えうることを確認した。 k6はローカル環境での手軽な負荷テストに有効である。
【2025/2/23】集計 新着週間Like数 ランキング Top5
LaravelでN+1を回避!with()を使う or 使わない?
LaravelでN+1問題を回避するwith()
メソッドの利用について検証した結果、大量データ処理ではwith()
によるEager Loadingで不要なデータを取得しメモリ消費が増えるため、別途クエリ発行による最適化が有効と結論付けた。 本ケースでは処理データが200件程度と少なかったためパフォーマンスへの影響は限定的であったが、リレーション数が多い既存コードを考慮し、可読性を犠牲にしてでもクエリ最適化を優先した。with()
は便利だが、データ量やリレーション数が多い場合はメモリ枯渇に注意が必要である。
PHPカンファレンス名古屋で初登壇
PHPカンファレンス名古屋にて、「楽しく向き合う例外対応」と題した講演を初登壇。夜中の勢いで応募したものの、社内登壇者のサポートを受け準備を進めた。当日はスライド表示トラブル発生も、かえって緊張が和らぎ、発表を成功させた。懇親会では登壇経験を活かし、積極的に交流できたと結論付けている。今後の更なる挑戦意欲を示している。
条件分岐を減らすためのポリモーフィズム
ECサイトの端数処理を例に、ポリモーフィズムによる条件分岐削減を解説。初期実装ではif
文で端数処理の種類(四捨五入、切り上げ、切り捨て)を選択していたが、ポリモーフィズムを用いることで、Roundable
インターフェースを実装した各クラス(四捨五入、切り上げ、切り捨て処理を持つクラス)を使い分けることで条件分岐をなくした。条件分岐はオブジェクト生成時に移行するものの、拡張性・保守性を向上させ、コードの複雑さを軽減できる。 BC Math
を用いた正確な数値計算の重要性にも言及している。
Symfony7~Docker環境構築からログイン機能作成まで
記事はSymfony7とPHP8.2を用いたDocker環境構築とログイン機能実装について記述している。Docker Composeを用いて、nginx、PHP-FPM、PostgreSQLコンテナを構築。Symfony CLIでUserエンティティとマイグレーションを生成し、データベースにログインユーザーを作成。security.yamlの設定と、LoginController、TopPageController、それに対応するtwigテンプレートによりログイン機能を実装した。 GitHubにソースコードを公開している。
PHP Laravelのよく使う記法をまとめてみたよ
Laravelにおけるデバッグ手法(dd(), dump(), Log::error)とCarbonを用いた日付処理、配列/コレクションへのデータマージ(array_merge, array_push, concat, push)、型変換(all())、文字列切り取り(substr())、空判定(empty(), isEmpty())、ページネーション(paginate())を解説。特に日付処理では2038年問題回避のためCarbonの使用を推奨。コレクションの空判定にはisEmpty()を推奨。 効率的な型変換にはall()を用いる。
Discussion