「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()
、enum
とmatch()
の使用例を紹介。ただし、PHPではパフォーマンスを考慮し、複雑な処理や大量データ処理では命令型が適切な場合もある。宣言的スタイル追求には関数型プログラミングの知識が役立つ。
【FrankenPHP・ZTS】スレッド安全を考慮して、PHP拡張機能を追加する
FrankenPHPはZTS(スレッドセーフ)で構築されているため、PHP拡張機能のインストール時にスレッド安全性を考慮する必要がある。apt
やpecl
では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');
のような定義の場合、パラメータ未指定時は $id
が null
となり、数値が指定された場合はその値が $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.php
の locale
、fallback_locale
、faker_locale
、timezone
をそれぞれ ja
、ja
、ja_JP
、Asia/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_backtrace
のargs
では隠蔽されない場合があるため、適切な使用方法が必要。 データベース接続情報、暗号化ライブラリの平文、認証トークン等の機密情報の保護に有効である。
【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:link
でpublic/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.php
のboot
メソッドでウィンドウサイズ、タイトル、表示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
で複数のルールを適用する設計を採用。CyclicNumberRule
とPassthroughRule
を実装し、オープン・クローズド原則に従い、拡張性と保守性を高めている。 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_digit
とis_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: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