🥇

「AI時代、Inertia.js再評価?OpenTelemetryも気になる…🤔」~【php】今週の人気記事TOP5(2025/7/6)

に公開

【2025/7/6】「AI時代、Inertia.js再評価?OpenTelemetryも気になる…🤔」~今週の人気記事TOP5(2025/7/6)

フロントエンドの分離は正義だったのか──AI時代にInertia.jsを再評価する理由

AI時代において、Inertia.jsのようなモノリシック構成が再評価されている。AIツールがコードベース全体のデータフローを追跡しやすく、フロントエンドとバックエンドの連携を理解・修正しやすいからだ。APIレスでReact/Vue/Svelteを使用でき、Laravel知識があれば容易に習得可能。Claude CodeやCursor等のAIツールとの組み合わせで、開発スピードが大幅に向上する。特に個人や小規模チームで、AIを活用した高速開発と保守性を両立したい場合に有効だ。

2025年6月の技術棚卸しログ

2025年6月はバッチ処理中心に、LaravelのinsertUsingやチャンク処理を実務で初実践。データ量が多い場合の処理分割・ループ設計に苦戦し、条件ごとの最適化を痛感。パーティション操作では柔軟な設計の難しさも経験。PHP基礎知識の曖昧さを再認識し、マニュアル学習を開始。『世界一流のエンジニアは何をしているのか』から刺激を受け、成長とアウトプットを見直し。来月はDB設計、データ加工パターン、OSS活動、複雑な取得処理のリファクタリング、Laravelコレクション学習、PHPマニュアル継続、Zennでのアウトプットに注力。

php-node で PHP スクリプトを実行する

php-nodeは、Node.jsでPHPスクリプトを実行できるツール。Rustのnapi-rsとext-php-rsを使用。

CLIからの実行やHTTPサーバーとしての利用が可能。
スーパーグローバル変数の定義や、組み込みPHPのバージョン、拡張モジュールも調査可能。

アーキテクチャとしては、Node.jsのリクエストを元にPHPスクリプトを実行し、出力をキャプチャしてレスポンスを生成。
PHPスクリプトはシングルスレッドで実行される。既存ツールとの比較や、独自ビルドの方法も解説。

【個人開発】Laravel + Vue.jsで作る週刊少年ジャンプ年表アプリ【ジャンプなに読んでた?】

フルスタックエンジニアのミヤツカ氏が、Laravel+Vue.jsで週刊少年ジャンプ年表アプリ「ジャンプなに読んでた?」を個人開発。
技術スタックは、バックエンドにLaravel、フロントエンドにVue.js、DBにMySQL(Docker)。
工夫点として、Wikipediaとゼブラックから取得したデータを基に、作品の連載期間を算出し、strtotime()でタイムスタンプ変換した値を使いVue.jsで年表を縦スクロール表示。
さらに、ニコニコ動画風のコメント機能を実装し、fetchでサーバーにコメントを送信する。

【FrankenPHP】様々なプロファイリングツールを試してOpenTelemetryに至るまでの記録

FrankenPHPのZTS環境下におけるPHPプロファイリングツール選定の記録。ZTS対応が必須条件の中、New RelicやBlackfireなどが非対応、XdebugやXHProfが動作せず。Excimerは導入が困難、php-spxはベータ版で不安定。DatadogとTidewaysはZTS対応だが有料。結果、マイクロサービス対応でOSSのOpenTelemetryを、安定動作と導入のしやすさから採用。ZTS対応プロファイリングツールの増加に期待。

【2025/6/29】「Laravelアプデ、DDD実践…次は何に挑戦する?」~今週の人気記事TOP5(2025/6/29)

5 分でできちゃう!?Laravel 12 アップグレード

Laravel 12へのアップグレードを「えんさがそっ♪」で実施。ライブラリのアップデート自体は15分で完了したが、仕様変更の影響調査(特にDIコンテナの変更点)と動作確認にそれぞれ1人日を要した。結果、アップグレード作業全体で約2人日を費やした。公式ドキュメントは非常に役立つものの、アプリケーション固有の確認が必要であり、段階的なアップグレードが推奨される。

ドメイン駆動設計(DDD)実践:GHG排出量可視化で学ぶ集約ルートの設計と責務

この記事では、ドメイン駆動設計(DDD)における集約と集約ルートの設計について、GHG排出量可視化を題材に解説しています。集約ルートは集約の代表として、内部整合性の保証、外部からのアクセス制御、ビジネスロジックの提供、内部実装の隠蔽という重要な責務を担います。Emission集約の例を通して、集約ルートを経由しない内部構造への直接アクセスはNGであり、recalculate()updateActivityAmount()のような公開メソッドを通じて操作することが重要であると説明しています。次回は複数集約を扱う際の整合性保証のトレードオフについて解説する予定です。

お絵かき掲示板簡単設置方法2025夏

sakots氏が公開したPHPお絵かき掲示板「noReita」の簡単設置方法の解説記事。SQLiteによるログ保存、ハッシュタグ、Misskey連携が特徴。PHP7.4以上が動作するサーバーに、noReitaをダウンロード・解凍し、config.example.phpをコピーしてconfig.phpを作成(管理者パスワード必須設定)。FTPソフトでアップロード後、URLにアクセスして動作確認。config.phpを設定し直してアップロードすれば完了。GitHubでサポートも受け付けている。

Laradock + Laravel環境構築のハマりどころ備忘録【2025年版】

Laradockを用いたLaravel開発環境構築におけるハマりどころと解決策をまとめた記事です。

よくあるエラーとして、Nginxの403 Forbiddenエラー、DB接続エラー、db:seed時のクラスNotFoundエラーを取り上げ、それぞれの原因と解決策を解説。NginxのエラーはAPP_CODE_PATH_HOSTとNginx設定ファイルの修正、DB接続エラーはLaravel側の.envファイルのDB_HOSTをmysqlに設定、クラスNotFoundエラーはuse宣言の追加で解決します。

SendGridに関する調査メモ

SendGridは、高到達率と可視化を低工数で実現できるクラウドメール配信SaaS。Laravel + Docker環境への導入が容易で、GUIによるテンプレート編集やABテスト、Webhookによるバウンス処理など、開発・マーケティング双方にメリットがある。API経由での送信は、サーバレス環境との親和性も高い。ただし、無料枠を超えるとコストが発生し、APIレート制限やDNS認証設定も考慮が必要。SMTPからの段階移行も容易。

【2025/6/22】「PHP、どこへ向かう?宣言的、ZTS、キューイング…次の一手は?」~今週の人気記事TOP5(2025/6/22)

命令型プログラミング言語のPHPで、宣言的なコードを書く

PHPにおける宣言的プログラミングについて解説。命令型プログラミングが「どうやるか」を記述するのに対し、宣言型は「何を達成したいか」を記述し、可読性・保守性を向上させる。array_filter()array_map()enummatch()の使用例を紹介。ただし、PHPではパフォーマンスを考慮し、複雑な処理や大量データ処理では命令型が適切な場合もある。宣言的スタイル追求には関数型プログラミングの知識が役立つ。

【FrankenPHP・ZTS】スレッド安全を考慮して、PHP拡張機能を追加する

FrankenPHPはZTS(スレッドセーフ)で構築されているため、PHP拡張機能のインストール時にスレッド安全性を考慮する必要がある。aptpeclではNTS版がインストールされる場合がある。install-php-extensionsを使うことで、ZTS環境に合わせてソースからコンパイルされ、確実にZTS対応版の拡張機能を導入できる。Dockerイメージの品質と安定性向上に役立つ。

Laravelのキューイングで陥りやすい罠:シリアライズ問題を理解する

Laravelのキューイングにおけるシリアライズ問題について解説。ジョブをキューに保存する際、PHPのserialize()が使用されるため、オブジェクトにDB接続等のリソースが含まれているとエラーが発生する。解決策として、ジョブのコンストラクタでシリアライズ可能なデータ(プリミティブ型、配列、モデルID等)のみを受け渡し、サービス等の依存関係はhandle()メソッドの引数で注入することが推奨される。シリアライズできないデータはIDやパスのみを保持し、実行時に再取得する。

PHPで学ぶオブジェクト指向プログラミングの基本

PHPにおけるオブジェクト指向プログラミングの基本概念であるクラスとオブジェクト、抽象クラス、インターフェースについて解説。クラスは設計図、オブジェクトは実物と例え、コード例で具体的な記述方法を示す。抽象クラスは未完成の設計図として、抽象メソッドの実装を子クラスに強制する。インターフェースは能力の企画書として、実装クラスに特定の振る舞いを約束させる。抽象クラスは共通の基盤、インターフェースは能力の定義に利用する。

Laravelのルーティングでオプショナルパラメータと条件指定を組み合わせた時の挙動

Laravelのルーティングにおけるオプショナルパラメータと条件指定の組み合わせについて検証。Route::get('/users/{id?}', function ($id = null) { ... })->whereNumber('id'); のような定義の場合、パラメータ未指定時は $idnull となり、数値が指定された場合はその値が $id に渡される。数値以外が指定された場合は404エラーとなる。テスト結果から、オプショナルパラメータ未指定が優先され、指定があった場合に条件チェックが行われることが確認された。

【2025/6/15】「Laravel + React + Inertia、まだ.htaccessに悩んでる?」~人気記事TOP5(2025/6/15)

Laravel 12 を日本語化する方法

Laravel 12を日本語化する手順の備忘録。laravel-lang/common パッケージと laravel-lang/starter-kits をインストールし、php artisan lang:add ja で日本語言語ファイルを追加。config/app.phplocalefallback_localefaker_localetimezone をそれぞれ jajaja_JPAsia/Tokyo に変更。composer update 時に php artisan lang:update が実行されるよう composer.json を設定することで、言語ファイルを自動更新する。ただし、完全な日本語化には手動修正が必要。

Apache の開発が止まったら .htaccess をどうする?

Apache開発停滞の可能性と.htaccess依存からの脱却が課題。代替案として、nginxリバースプロキシ、CMS設定ファイル提供、LiteSpeed移行、RustによるFPM中継などが提案される。.htaccess互換の完全再現は困難。Rustは高性能HTTPサーバー開発に適しており、hyper, axum, actix-web, warp, Ferronなどが利用可能。CloudflareはHTTP/3実装quicheを開発。FerronはPHP/Python両対応。ApacheのMPM(prefork, worker, event)とPHPの実行方式(mod_php, php-fpm)の組み合わせも重要。プロセスの再起動戦略とプロセス、スレッド、ワーカーの違いも解説。

Laravelのログイン/ログアウト時のセッションの流れ

Laravel Breeze環境下でのログイン・ログアウト時のセッション処理を解説。ログイン時は、まず認証情報に基づきユーザーを取得、SessionGuardにセットし、セッションIDを再生成。セッションにログインユーザーIDを追加し、セキュリティのため既存セッションレコードを削除。ログアウト時は、SessionGuardからユーザー情報を削除し、セッションレコードを削除、セッションIDを再発行する。

未経験からWebエンジニアへ|ゼロから始める学習ロードマップ【独学 or スクール?】

未経験からWebエンジニアを目指す学習ロードマップとして、HTML/CSSでWebページの構造と見た目を構築後、PHPまたはJavaで動的なWebアプリケーション開発を学びます。PHPはWeb制作、Javaは大企業向け開発に適しています。チーム開発の基礎としてGit/GitHubやタスク管理も重要です。学習方法として独学とスクールがあり、スクールでは環境構築、エラー解決、実務を想定した課題、就職支援などが提供されます。EBAエデュケーションは、2ヶ月集中で即戦力育成を目指すスクールです。

Laravel 12 + React + Inertia の開発を劇的に改善する Cursor Rules

Laravel 12 + React + Inertia環境でCursorが誤ったコードを生成する問題を、Cursor Rulesで解決する方法を紹介。Next.jsと誤認したり、古いLaravel構造で提案したり、Inertiaの機能を無視するCursorに対し、.cursor/rules/laravel-inertia.mdcにプロジェクトルールを記述。Laravelのバージョンやディレクトリ構造、Inertiaの使用に関する指示を与えることで、AIが適切なコードを生成するよう改善する。

【2025/6/9】集計 新着週間Like数 ランキング Top5

PHPカンファレンス新潟2025登壇レポート:PHPでResult型の考え方を取り入れてみよう

PHPカンファレンス新潟2025での登壇報告。try-catchに代わるエラーハンドリングとして、Rust等で一般的なResult型をPHPに導入する提案。ビジネスロジックにおける「予期される失敗」を例外とすることへの違和感が背景。PHPでの実装例や、例外との使い分け(Result型は予期される失敗、例外はシステムエラー)を解説。参加者からPHPStanの活用や、関数合成・ROPなど発展的な活用に関するフィードバックを得て、今後の研究に繋げる。

PHPUnitからPestPHPへ:テストをもっと軽快に!

PHPUnitの課題を解決するため、PestPHPを導入した記事。PestPHPは、PHPUnitを拡張しつつ、より簡潔で読みやすいテスト記述を可能にする。導入はcomposerで簡単に行え、Laravelプラグインも提供。基本的な構文、アサーション、データプロバイダ、フックの使い方をPHPUnitと比較して説明。メリットは定型文不要、直感的なアサーション、Laravelサポート。デメリットは情報が少ない点と、PHPUnitの知識が前提となる点。全体として、PestPHPはテストコードの可読性を向上させ、開発効率を上げると結論付けている。

Rust で PHP 拡張を書く:Debian + ext-php-rs チュートリアル

RustでPHP拡張を開発するチュートリアルです。ext-php-rsを用いてRust製のPHP拡張モジュールを作成し、PHP環境に組み込む手順を解説します。従来のC/C++拡張に比べ、Rustは安全性が高く、Cargoによる依存関係管理が容易です。AI支援により学習コストが下がり、エラー解決も容易になりました。libphp8.4-embedの導入で Zend Engine の内部シンボルも利用可能になります。RustでPHP拡張を開発することで、PHPからRustへの段階的な移行や、PHPに依存しない汎用ライブラリの作成が期待できます。

Laravel 12 を日本語化する方法

Laravel 12の日本語化手順の備忘録です。laravel-lang/common パッケージと laravel-lang/starter-kits (Starter Kits使用時) をComposerでインストール後、php artisan lang:add ja で日本語ファイルを追加します。config/app.php でlocale等を ja に設定し、必要に応じてtimezoneをAsia/Tokyo に変更。composer update 時に php artisan lang:update が実行されるよう composer.json を設定することで、言語ファイルを自動更新します。ただし、完全な日本語化には手動修正が必要となる場合があります。

PHP スクリプトを実行する Rust CLI ツールを作る

RustからPHPスクリプトを実行するCLIツールとREPLを構築する記事。PHPのembed SAPIを利用し、C言語で初期化関数を呼び出し、RustのFFI経由で実行。CLIツールではzend_execute_scripts()を使用し、REPLではzend_eval_string()を使用。bindgenによるPHPヘッダ解析は複雑さから断念し、Cラッパーを介して必要な関数のみを呼び出す構成を採用。REPL実装では、スコープ維持のために一時ファイルの利用を検討。最後に、各言語のREPL実装を比較し、RustでPHPを扱う際の応用を示唆。

【2025/6/1】集計 新着週間Like数 ランキング Top5

令和最新版LaravelCollective/htmlからspatie/laravel-htmlへの移行注意点

Laravel Collective/htmlパッケージの廃止を受け、代替パッケージspatie/laravel-htmlへの移行と、その注意点が解説されている。Laravel Shiftという移行支援サービスを利用できるが、radio要素の挙動変更(値比較、checked属性の優先順位)、date系の入力タイプ変更、selectの多重ネスト配列非対応など、いくつかの相違点に注意が必要。Laravel Shiftによる自動変換後も、動作検証と手動修正が不可欠で、特にradio要素の修正は重要。 Laravel 11以降のサポート継続のため、移行が推奨される。

[conoha VPSにDocker + Laravel構築④] GitHubActionsでデプロイする

本記事は、conoha VPS上にDockerとLaravelを用いた開発環境を構築し、GitHub Actionsによるデプロイを自動化する手順を説明する。 GitHub Actionsワークフローでは、Apacheの設定でメンテナンスモードへ移行、git pullによるコード更新、php artisan migrate --forceによるマイグレーション実行、メンテナンスモード解除を行い、デプロイを完了する。 appleboy/ssh-actionを利用し、SSH接続でVPSへアクセス、Apacheの設定ファイル操作とLaravelコマンド実行を実現する。 動作確認として、コード変更をプッシュすることで、メンテナンスモードの切り替えとデプロイの成功を確認できる。

LaravelとGoogleカレンダーの連携

この記事は、LaravelアプリケーションからGoogleカレンダーにイベントを登録する手順を解説しています。Google Cloud ConsoleでGoogle Calendar APIを有効化し、サービスアカウントを作成、必要な認証情報を取得後、Laravel側でgoogle/apiclientライブラリを用いてイベント登録処理を実装します。title, message, dateを受け取り、Google_Service_Calendar_Eventを使ってカレンダーにイベントを作成します。 本記事では、API設定からLaravel実装、テストまでを網羅的に説明しており、Googleの他APIとの連携についても言及しています。

Laravel Arrクラスを使って型指定で値を取得する

Laravel 11.0から、Illuminate\Support\Arrクラスに型指定による値取得メソッドが追加された。array, boolean, float, integer, stringの各型に対応するメソッド(メソッド名と型は一致)が提供され、指定した型と一致する値のみ取得できる。型が異なるとInvalidArgumentExceptionが発生する。 これにより、取得値の型チェックが不要になる反面、例外処理が必要となるため、開発者の好みによる選択となる。configヘルパーでも同様の機能が利用可能。

カケポン: react×laravel10で楽しく続けられるミニマル家計簿アプリを作ってみた

React(Vite+TypeScript)とLaravel10で構築されたミニマルな家計簿アプリ「カケポン」を開発。AWS(Fargate,ECS,RDS,S3,CloudFront等)を用いたコンテナベースのインフラで、GitHub ActionsによるCI/CDを実現。モバイルファースト設計で、ホーム、取引登録、カテゴリ分析の3画面から構成。ユーザー、カテゴリ、収支記録等の最小限のDB設計で、拡張性も考慮。個人利用に特化し、セキュリティとスケーラビリティを確保した本番運用可能なシステムとなっている。

【2025/5/25】集計 新着週間Like数 ランキング Top5

Ubuntu × DockerでPHP-FPM環境を構築する最小構成メモ

このDockerfileは、Ubuntu 22.04上にPHP-FPM環境を構築します。TCPポート9000でFastCGIを待ち受けるよう設定を変更し、Nginx等との連携を容易にします。apt-getによるパッケージインストールを自動化し、GPG署名問題への対応策も盛り込まれています。www.confをコピーしてPHP-FPMの設定を上書きし、CMDでPHP-FPMをフォアグラウンドで常駐起動することで、Dockerコンテナを動作させ続けます。イメージサイズはapt-get cleanで削減されます。

TermuxでLaravel

Termux上でLaravel 11を用いた開発環境構築を試みた記事。Laravel 11の新規プロジェクト作成では、Vue.jsとLaravel標準認証機能を利用するStarter Kitを選択。 しかし、Tailwind CSSのAndroid対応不足によりビルド失敗。個人ビルドのパッケージを用いて回避。さらに、inotifyのファイル監視上限に達しHot Reloadを無効化することで解決した。 最後に、データベースをSQLiteからMariaDBへ移行し、動作確認まで完了した。ただし、Hot Reloadは不完全で、root権限がないとinotifyの上限を増やせないなどの課題が残る。

S3へ画像アップロード

Laravel 12とAWS S3を用いた画像アップロード機能の実装手順を示した記事。AWS側のIAMユーザー作成、S3バケット作成後、Laravel側ではleague/flysystem-aws-s3-v3をComposerでインストールし、.envファイルとconfig/filesystems.phpにAWS認証情報とバケット名を設定。コントローラーでStorage::disk('s3')->putFileAs()を用いてアップロードし、成功時はURLを返す。セキュリティのため、バケットはパブリックアクセスをブロックする設定が推奨される。

PHPにおける改行方法の使い分けとその理由

PHPの改行は用途で方法が異なる。CLI/ログ出力にはPHP_EOL(OS非依存)、簡単なスクリプトやテストには\n、HTML出力には<br>を使うのが適切。PHP_EOLはOSごとの改行コードの違いを吸収し可搬性を高め、\nは簡潔でデバッグに便利、<br>はHTMLの改行無視を回避する。用途に合わせた適切な改行方法を選択することで、コードの可搬性と保守性を向上できる。

Wordpress6.8.1とcron

WordPress 6.8.1のcronジョブがDB接続エラーで失敗。原因はPHPバージョン違い(Apache:8.2、コマンドライン:8.4)によるソケットファイルのパス差異と、WordPress 6.8.1のCLI実行時の$_SERVER変数の不足。ChatGPTはwp-cron.php実行時の環境変数を設定したcron-runner.php作成を提案。これにより$_SERVER変数を模倣し、WordPressをWeb環境と誤認させcronジョブを実行可能にした。ChatGPTはレアな情報探索に有効だが、情報の正確性には注意が必要。

【2025/5/18】集計 新着週間Like数 ランキング Top5

[備忘録]phpunitのdataProviderメソッドはsetupメソッドよりも先に呼び出されるっぽい

Laravel PHPUnitテストで、dataProviderメソッドがsetUpメソッドより先に実行されるため、config/app.phpのタイムゾーン変更が反映されない問題が発生。dataProvider内でCarbonオブジェクトを生成する際、タイムゾーンがUTCのままとなりテストが失敗した。createApplicationメソッドの調査で、configの反映はsetUpメソッド実行時であることが判明。対策として、dataProvider内でCarbonオブジェクトにタイムゾーンを明示的に指定することで解決した。dataProvider使用時はconfig反映のタイミングに注意が必要。

#[SensitiveParameter] の挙動の確認

PHP 8.2で導入された#[SensitiveParameter]アトリビュートは、関数/メソッドのパラメータ値をスタックトレースから隠蔽する。debug_print_backtrace等では値が隠蔽されるが、var_dump等では隠蔽されない。可変長引数にも対応するが、関数内でのみ有効で、呼び出し元/先でアトリビュートの有無が異なると隠蔽されない場合がある。配列やオブジェクトにも有効だが、debug_backtraceargsでは隠蔽されない場合があるため、適切な使用方法が必要。 データベース接続情報、暗号化ライブラリの平文、認証トークン等の機密情報の保護に有効である。

【2025年版】XAMPP・MAMPに代わるWindows向けLAMP環境3選【軽量&簡単】

XAMPP/MAMPのPHPバージョンが古くセキュリティリスクがあるため、Windows向けLAMP環境の代替を検討すべき。記事では、WampServer、Laragon、ServBayの3つを紹介。 中でもLaragonは最新PHPに対応しやすくUIも分かりやすいことから、Windows環境における最有力候補と結論づけている。macOSユーザーはServBayも選択肢だが、Windows版は開発中である点に注意が必要。DockerやWSLと比較し、手軽なGUIツールとしての利便性を強調している。

フロントエンドエンジニアが挑戦してみた!Laravel初心者のためのコンポーネント入門

Laravel初心者のフロントエンドエンジニアが、Bladeコンポーネントとクラスベースコンポーネントの作成に挑戦。Bladeコンポーネントはシンプルで学習コストが低く、複雑でないUIに適している一方、クラスベースコンポーネントは複雑なロジックや状態管理が必要なUIに適していることを確認。Next.jsやVue.jsの経験者はLaravelコンポーネント作成に比較的容易に適応できる。@propsによるプロパティ定義や、階層構造でのコンポーネント呼び出し方法などを解説。 各コンポーネントの設計はNext.jsやVue.jsと類似性があり、容易に理解できる。

LaravelのStorageとpublicディレクトリの違い

LaravelのpublicディレクトリはWebから直接アクセス可能な唯一のディレクトリで、静的ファイル(CSS、JS、画像など)を配置する。一方、storageディレクトリはアプリケーション内部で使用されるファイル(アップロード画像、ログ、キャッシュなど)を保存する。公開したいファイルはstorage/app/publicに保存し、php artisan storage:linkpublic/storageにシンボリックリンクを作成することでWebからアクセス可能にする。機密ファイルはstorage直下、あるいはstorage/app以下に配置し、直接アクセスを防ぐ必要がある。

【2025/5/11】集計 新着週間Like数 ランキング Top5

3500件以上あったLarastanのエラーを約3ヶ月で解消するまで

Laravelプロジェクトで3500件以上のLarastanエラーを、6~7名チームで約3ヶ月かけて解消した事例。毎日30分の時間を確保し、スプレッドシートで管理、プルリクエストを小さく分割してレビュー負担を軽減した。完璧な解消にはこだわらず、テストコードは除外。結果、エラー0件となり、コード品質向上、チームのモチベーション向上に繋がった。pre-commitフックやCIへの組み込みも今後の課題としている。

異なるフレームワーク間 でのアプリ マイグレーション

ペライチは、レガシーなCakePHPアプリをRuby on Railsへマイグレーションした。 クリティカルなサービスのため、新旧システムを並行稼働させ、APIを段階的に切り替えることで影響を最小限に抑えた。Railsの複数データベース接続機能と、CakePHP/Rails間のタイムスタンプ差異を調整する独自のcallback処理により、DBを共有した並行稼働を実現。これにより、段階的なリリースと低リスクな移行を達成した。

EC2にLaravelを構築する手順

Amazon Linux 2023 EC2インスタンスにLaravel 12.0、Nginx 1.26.3、PHP 8.4を構築し、静的ページ表示を確認する手順を示す記事。yumを用いてPHP、nginx、composerをインストール後、Laravelプロジェクトをclone、依存パッケージをインストール、.env設定、nginx設定ファイル作成、php-fpm設定変更・起動を経て、静的HTMLファイル表示に成功。データベース接続やSSL設定は別途必要だが、基本的なLaravel環境構築手順を網羅している。

[PHP] isset・empty・is_null の違いをまとめてみた

PHPのisset()empty()is_null()の使い分けを解説した記事。isset()は変数が定義されnullでないかを判定し、empty()は空かどうか(未定義、false相当値を含む)を判定する。is_null()はnull値かどうかを判定する。empty()は判定が緩く、isset()はnullのみを「値なし」とみなす。is_null()は未定義の場合Warningが発生する。用途に応じて使い分けるべきで、空判定にはempty()、null判定にはis_null()、定義とnull判定にはisset()が適している。

PHPUnitのモックとスタブの使い方

この記事は、PHPUnitを用いたモックとスタブによるテスト手法を紹介している。外部リソースへの依存を排除するため、UserRepositoryインターフェースのスタブ/モックを作成し、UserServiceクラスのgetUserNameByIdメソッドのテストを行う。スタブは予め決められた値を返し、モックはメソッドの呼び出し回数や引数を検証する。これにより、データベース等へのアクセスを模擬し、安全で効率的な単体テストを実現できることを示している。

【2025/5/4】集計 新着週間Like数 ランキング Top5

NativePHP for desktop が正式リリースしたのでインストールして少し触った

NativePHP for desktop 1.0.0が正式リリースされた。PHP 8.3+、Laravel 11+、Node.js 22+が必要。composer require nativephp/electronでインストール後、php artisan native:installでセットアップする。php artisan native:serveで開発サーバーを起動し、app/Providers/NativeAppServiceProvider.phpbootメソッドでウィンドウサイズ、タイトル、表示URL、開発者ツールの表示/非表示などを制御できる。 デスクトップアプリをPHPで開発できることが確認された。

Nginxについて1から理解したい

本記事はNginxの基礎から応用までを解説する。Nginxは軽量・高性能なWebサーバーで、静的コンテンツ配信、リバースプロキシ、ロードバランサとして機能する。 動的コンテンツ処理にはPHP-FPM(FastCGI)と連携し、TCP/UNIXソケット接続を選択可能。他の言語(Node.js, Python)もproxy_passやuWSGIで容易に連携できる。設定ファイルnginx.confでは、listen、server_name、location等のディレクティブで各種設定を行う。記事では設定例とPHP-FPM連携方法を具体的に示し、Nginx中級者レベルの理解を目指している。

WordPress で do_action を用いる際の落とし穴:配列が自動的にアンパックされる謎の仕様

WordPressのdo_action()関数で、要素数1のオブジェクト配列を第2引数に渡すと、PHP4互換処理により配列がアンパックされ、単一オブジェクトがコールバック関数に渡される。これは予期せぬ動作を引き起こすため、コールバック関数で配列チェックを行うか、do_action_ref_array()を使用することで回避する必要がある。 本記事ではこの問題の原因と解決策を解説している。

PHPでToDoアプリを作ってみよう!!

本教材は、PHPとMySQLを用いたToDoアプリ開発を通してWebシステム開発の基礎を学ぶものです。クライアント・サーバーモデル、HTTPリクエスト/レスポンス、HTML/CSS/JavaScript、PHPの基本文法、SQL、PDO、正規表現、名前空間、クラス、データベース設計、セキュリティ(SQLインジェクション/XSS対策)、バリデーションなどを学習します。最終的には、タスクの追加、表示、完了状態変更、編集、削除機能を持つToDoアプリを作成し、GitHubに提出します。MVCアーキテクチャは使用せず、単一ファイル構成で開発します。

laravelでユーザー・管理者を作ってみる

Laravel 12を用いたユーザー認証システム構築記事。マイグレーション、モデル(isAdmin()メソッド追加)、シーダー(ダミーユーザー5名と管理者1名作成)でユーザー管理機能を実装。ユーザー登録はフォームリクエストによるバリデーション(名前、メールアドレス、パスワード、アイコン)付き。ログイン・ログアウト機能はAuth::attempt()Auth::logout()を使用。ミドルウェア(UserIsAuthenticated, UserIsAdmin)で認証レベル(一般ユーザー、管理者)に応じたアクセス制御を実現。ルーティングはミドルウェアを用いてアクセス制限を実施している。

【2025/4/27】集計 新着週間Like数 ランキング Top5

レンタルサーバーでNext.js(SSG)×PHP APIを運用するという、ちょっと珍しい構成の話…

既存レンタルサーバーとPHP資産を活かし、Next.js(SSG)フロントエンドとPHPバックエンドAPIを統合する構成を構築。開発環境ではconcurrentlyでNext.jsとPHPサーバーを同時起動、本番環境ではNext.jsで静的サイトを生成し、レンタルサーバー上にデプロイ。環境変数でAPIベースパスを管理し、開発/本番環境を切り替える。メリットは低コスト、PHP資産活用、高速なSSGだが、情報が少ない、開発環境の煩雑さ、API Routes非使用といったデメリットも存在する。

【2025年版】windowsユーザーがMacを使う時に実施するべき設定

macOS初心者向け、Windowsユーザーのための快適な初期設定を紹介。主な内容は、1.スクリーンショットをクリップボードに直接コピー、2.Finderでファイルパス表示、3.トラックパッド操作の改善(タップでクリック、右クリック設定)、4.マウススクロール方向のWindows化、5.日本語入力のWindows風キー操作、6.アクセシビリティ機能を使ったスムーズな画面拡大縮小。これらの設定により、WindowsユーザーはMacをより直感的に操作できるようになる。

2つの摘みを持ったレンジバーを作ってみた

本記事は、Laravel, PHP, JavaScript, CSSを用いた価格絞り込み機能の実装例を紹介している。2つのrange入力と、それらに対応する表示用数値入力、動的に幅が変わるrangeバーから構成される。JavaScriptでは、rangeバーの値が逆転しないよう制御し、値の変更を検知してrangeバーの位置と幅を更新、400ms後にフォームを送信する。バックエンドでは、リクエストされた価格範囲に基づきデータベースから商品を絞り込む。 CSSは、rangeバーの見た目と位置調整を担っている。

PHPとMySQLを繋げて操作する方法【PHP, MySQL】

この記事はPHPとMySQLを用いたデータベース操作を解説している。PDOを用いたデータベース接続、try-catchによる例外処理、プレースホルダーを使ったSQLインジェクション対策付きのINSERT文の実行方法を、具体的なコード例と共に説明している。複数のテーブルに事前に用意されたメッセージデータを挿入する処理を、配列とforeach文を用いて効率的に実行する方法を示している点が特徴である。

[Symfony][Doctrine] OneToOneのエンティティの削除が上手くいかなかったけど解決した

Symfony/DoctrineでOneToOne関係のエンティティ削除でForeignKeyConstraintViolationExceptionが発生。UserエンティティがProfileエンティティをOneToOneで持ち、cascade: ['remove']によりUser削除時にProfileも削除される設定だったが、Profile単体削除時に例外が発生した。原因はProfileListenerによる親子の関係断絶により、Doctrineの削除順序計算が失敗したこと。解決策として、cascade: ['remove']を削除し、UserListener$event->getObjectManager()->getUnitOfWork()->scheduleForDelete()を用いてProfileの削除を明示的に行うことで解決した。

【2025/4/20】集計 新着週間Like数 ランキング Top5

PHPカンファレンス小田原2025でスポンサーセッションした感想を書くよ

PHPカンファレンス小田原2025にて、レバテック開発部の筆者は「古き良きLaravelシステムの関数型スタイルリファクタリング」を発表。技術負債を抱えたシステムに対し、関数型スタイルでリファクタリングに取り組んだ経験を共有した。登壇では想定以上の反応があり、参加者からのフィードバックも得られた。特に「単一テーブル継承」の提案は今後の開発に活かされる予定。 セッション内容は後日アーカイブ公開予定で、5月21日には再演も実施される。

2025年の最新PHP開発環境:注目すべきツールまとめ

この記事は、PHP開発における効率化と品質向上のためのツールを紹介している。コード整形ツールPint、スペルチェックツールPeck、静的解析ツールPHPStan、リファクタリングツールRector、テストフレームワークPestを解説。 各ツールはComposerでインストール可能で、CIへの統合も容易。Pestは型カバレッジやアーキテクチャテストにも対応し、Composer scriptsによるコマンド管理も推奨している。これらのツールを活用することで、開発効率とコード品質の大幅な向上が期待できる。

Snow Monkey Forms をPHPのテンプレートファイル内で使用する方法

Snow Monkey FormsをクラシックテーマのPHPテンプレートで利用する方法は、公式ではサポートされていない。本記事では、フォームを固定ページに配置し、そのページのslugをキーにget_page_by_pathで取得、apply_filters('the_content', $page->post_content)で出力する手法を紹介。formIdを使う公式の方法では環境依存の問題があるため、この方法が提案されている。ただし、slugのユニーク性を担保する必要がある。最後に、その固定ページへの直接アクセスをtemplate_redirectアクションで404エラーにする方法も示されている。

PHPで始めるテスト駆動開発(TDD)入門

この記事は、PHPを用いたテスト駆動開発(TDD)入門です。TDDは「テスト作成→実装→リファクタリング」のサイクルを繰り返し、バグの少ない保守性の高いコードを作成する手法です。PHPUnitを用いた実践例として、電卓クラスの加算と減算機能の実装を解説。テストファーストのアプローチにより、機能単位の検証と、リファクタリングを容易にするメリットを説明しています。 結論として、TDDはバグ予防、コード品質向上、設計力向上に繋がり、PHP開発者にとって強力な武器となることを示唆しています。

202. Happy Number

この記事は、正の整数を入力として、それが「幸せな数」かどうか判定するアルゴリズムを解説しています。「幸せな数」とは、各桁の二乗和を繰り返し計算し、最終的に1になる数です。1にならない場合は「幸せな数」ではありません。記事では、PHPとTypeScriptによる実装例を示し、19は幸せな数(true)、2は幸せな数ではない(false)ことを例に挙げています。制約として、入力数は1以上、2³¹-1以下とされています。

【2025/4/13】集計 新着週間Like数 ランキング Top5

変更に強いFizz&Buzz

記事は、変更に強いFizzBuzzプログラムの実装を解説している。一般的なFizzBuzz関数の問題点として、ルール変更時の修正コストの大きさを指摘。解決策として、ルールをReplaceRuleInterfaceで抽象化し、NumberConverterで複数のルールを適用する設計を採用。CyclicNumberRulePassthroughRuleを実装し、オープン・クローズド原則に従い、拡張性と保守性を高めている。 NumberConverterはルールを処理し、CyclicNumberRuleは数値と文字列の対応を、PassthroughRuleはデフォルトの数字出力を行う。

PHPerKaigi2025に登壇してきました。

PHPerKaigi2025にて、NE株式会社の山本氏は「AUTO_INCREMENTのIDカラムオーバーフロー」に関する発表を行った。 DB設計における注意点として、実例を用いて解説し、多くの聴衆から好評を得た。 発表後、多くのフィードバックと肯定的な反応があった。 山本氏は3年連続の登壇で、イベント全体も楽しんでおり、コードゴルフにも参加したと報告している。 NE株式会社はPHPエンジニアの採用を積極的に行っている。

160. Intersection of Two Linked Lists

与えられた2つの単方向連結リストが交差するノードを検出するアルゴリズムを実装する問題。 リストのノード数は最大3万個。交差するノードが存在すればその値を、存在しなければ"交差なし"を返す。 アルゴリズムは、入力としてリストの先頭ノードを受け取り、元のリスト構造を維持したまま、交差ノード(存在する場合)を特定する。 交差ノードの値は intersectVal で与えられる。intersectVal が0なら交差なし。

145. Binary Tree Postorder Traversal

この記事は、バイナリツリーの後順巡回を実装するPHPコードを示しています。空の木の場合は空配列を返し、そうでない場合は再帰関数helperを用いて左部分木、右部分木を巡回し、最後に根ノードの値を結果配列に追加することで後順巡回を実現します。ノード数は0~100、ノード値は-100~100の制約があります。 コードは再帰的なアプローチで、時間計算量はO(N)、空間計算量はO(H) (Hは木の高さ)です。

144. Binary Tree Preorder Traversal

この記事は、バイナリツリーの前順走査アルゴリズムを実装するLeetCodeの問題を扱っています。 入力としてバイナリツリーのルートノードが与えられ、出力は前順走査(根→左→右)によって得られるノードの値の配列です。 空のツリーや単一ノードのツリーを含む様々な入力例とその出力結果が示されています。 記事自体はアルゴリズムの実装方法には触れていませんが、前順走査の結果を返す問題とその具体的な例を示している点が重要です。

【2025/4/6】集計 新着週間Like数 ランキング Top5

【教育コンテンツ】PHPで正の整数を受け取るバリデーションについて

PHPで正の整数のバリデーションを安全に行う3つの方法を解説。preg_matchによる正規表現を用いた厳密な方法、ctype_digitis_numericを使った簡潔な方法、キャストと文字列比較を組み合わせた簡便な方法を紹介。それぞれにPHPUnitを用いたユニットテストによる検証方法を示し、先頭ゼロや非数値入力への対応を重点的に説明。preg_matchが最も安全だが複雑で、ctype_digitは簡潔だが先頭ゼロに注意が必要。キャスト比較は手軽だが、可読性と明確性に欠ける可能性がある。 適切なバリデーションはシステムの安全性と信頼性を高める。

社内でイベントソーシング勉強会をやりました

NE株式会社のバックエンドエンジニアが、イベントソーシングに関する社内ハンズオン勉強会を開催した。Laravelを用いたWebアプリを題材に、イベント駆動、イベントソーシング、簡易CQRSを2時間かけて学習。参加者12名は、イベント駆動設計の理解度により理解の差が見られたものの、ハンズオン形式で実践的に学ぶことができたと好評だった。 イベントソーシングの導入は慎重に進めるべきとアドバイスされた。今後は、疎結合化が必要な箇所へのイベント利用を検討していく。

125. Valid Palindrome

LeetCodeのValid Palindrome問題を解いた記事です。与えられた文字列が、英数字のみを残し、大文字を小文字に変換した後、回文かどうかを判定します。空文字列は回文とみなします。例1("A man, a plan, a canal: Panama")はtrue、例2("race a car")はfalse、例3(" ")はtrueと判定されます。アルゴリズムは、前処理で英数字のみを抽出し、その後、文字列の先頭と末尾を比較することで回文性を確認します。

121. Best Time to Buy and Sell Stock

LeetCodeの「Best Time to Buy and Sell Stock」問題の解説記事です。株の価格配列から最大利益を得る取引を特定するアルゴリズムを示しています。 配列を走査し、最小購入価格と最大利益を更新することで、O(n)の計算量で解を得ます。利益が出ない場合は0を返します。例として、[7,1,5,3,6,4] から最大利益5が算出されます。

Codeception で任意のバージョンの Chrome を起動したい

CodeceptionのE2EテストでChrome/ChromeDriverのバージョン不整合エラーが発生した場合、@puppeteer/browsersを用いて任意バージョンのChromeとChromeDriverをインストールし、Codeceptionの設定ファイル(acceptance.suite.yml)にインストールパスを指定することで解決できる。 npx @puppeteer/browsers installコマンドでバージョンを指定してインストール後、ChromeDriverを起動し、Codeceptionを実行する。 これにより、特定バージョンのブラウザ環境でのテストが可能となる。

【2025/3/30】集計 新着週間Like数 ランキング Top5

MCPサーバーはPHPでもつくれまぁす!(SDKがないので、案外大変)

著者は、PHPでModel Context Protocol (MCP) サーバーを実装した。PHP向けSDKがないため、Pythonのサンプルコードを参考に、ゼロから開発した。 開発過程ではデバッグの困難さに直面し、エラーログの解析に時間を費やした。 最終的に動作するサーバーを作成し、Packagistへの公開を目指している。新プロトコルへの対応についても、必須機能がオプションのため問題ないと判断している。 PHPでのMCPサーバー開発は困難だが、本記事が参考になるだろう。

Laravelで実装する認証と認可:簡単なセットアップと基本操作

Laravelを用いたWebアプリケーションの認証・認可実装を解説。Laravelの組み込み機能により、CSRF保護、パスワードハッシュ化、SQLインジェクション対策などを容易に実装可能。middlewareを用いたアクセス制御も示し、EnsureEmailIsGmailミドルウェア作成例を通して、特定条件下でのアクセス制限方法を説明。Laravelの標準機能とミドルウェアを活用することで、安全で効率的な認証・認可システム構築が可能となる。

Enumとパターンマッチでコードの意図を明確にする

PHPコードのリファクタリングにおいて、Enumとパターンマッチングを活用することで、コードの意図を明確化できることを示した記事です。 外部システム連携処理を例に、従来のif-elseによる複雑な条件分岐を、Enum(SyncMode: CREATE, PARTIAL_UPDATE, FULL_UPDATE)とパターンマッチで置き換えることで、コードの可読性と保守性を向上させました。 これにより、「なぜその処理をするのか?」という意図がコードから直接理解できるようになり、if/elseネストの解消に有効であると結論付けています。

PHPerKaigi 2025に登壇させていただきました: 『ドメインイベントを活用したPHPコードのリファクタリング』

PHPerKaigi 2025で「ドメインイベントを活用したPHPコードのリファクタリング」と題した講演が行われました。複雑化したコードベースに対し、ドメインイベントを用いた段階的なリファクタリングを実施。イベントの特定・モデリング、発行・ハンドリング、テスト手法を紹介し、機能間の依存関係を減らし、変更・テスト容易性、チームコミュニケーションを改善しました。 今後、非同期処理や結果整合性に関する更なる発信を予定しています。

PHPerKaigi 2025に参加・登壇しました(登壇編)

PHPerKaigi 2025にて、「PHP実行環境の歴史 PHP-FPMからFrankenPHPの誕生へ」と題し発表。PHP実行環境の変遷をPHP-FPMからFrankenPHPまで解説し、FrankenPHPのコンテナ環境との親和性とデメリットを提示。時間不足でイベント駆動とスレッドの説明が不十分だったものの、FrankenPHPのメリット・デメリット、ソフトウェアアーキテクチャとの関連性について聴衆の理解を得られた。次回のPHPカンファレンス関西2025では、パフォーマンス比較やFrankenPHPの代替可能性に関する実験結果を発表予定。

【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:tablephp 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 --devphp artisan breezejpを実行することで、簡単に日本語化できる。 本記事では、作者がLaravel本体へのPR (#24と#39)を通して日本語化の容易化に貢献したことも述べられている。

9. Palindrome Number

与えられた整数が回文数かどうかを判定するPHPコードについての記事です。負数や10のような数字は回文数ではないことを説明しています。 コードでは、数値を文字列に変換し、反転させて元の文字列と比較することで判定しています。 一致すればtrue、そうでなければfalseを返します。 文字列操作を用いたシンプルな解法が提示されています。

WordPressの投稿でカテゴリー必須仕様を回避する方法

WordPressの投稿は必ずカテゴリーを必要とするが、wp_insert_postアクションフックを用いて回避可能。 「カテゴリー未選択」という仮のカテゴリーを作成し、投稿保存後に削除する手法で実現する。get_category_by_slughas_termwp_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()を用いる。

CareNet Engineers

Discussion